logsui/logsengine/tsrc/ut_logsengine/src/ut_logsduplicatelookup.cpp
changeset 16 c5af8598d22c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/logsui/logsengine/tsrc/ut_logsengine/src/ut_logsduplicatelookup.cpp	Thu Sep 02 20:27:05 2010 +0300
@@ -0,0 +1,182 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include "ut_logsduplicatelookup.h"
+#include "logsduplicatelookup.h"
+#include "logsevent.h"
+#include <QtTest/QtTest>
+
+QString testDir1key1 = "remote1/t1111";
+QString testDir1key2 = "remote2/t1111";
+
+QString testDir2key1 = "remote1/t2222";
+
+QString testDir3key1 = "remote1/t3333";
+QString testDir3key2 = "remote2/t3333";
+QString testDir3key3 = "remote3/t3333";
+
+
+void UT_LogsDuplicateLookup::initTestCase()
+{
+    mLookup = new LogsDuplicateLookup(); 
+}
+
+void UT_LogsDuplicateLookup::cleanupTestCase()
+{
+    delete mLookup;
+    mLookup = NULL;
+}
+
+void UT_LogsDuplicateLookup::init()
+{
+}
+     
+void UT_LogsDuplicateLookup::cleanup()
+{
+}
+    
+void UT_LogsDuplicateLookup::testConstructor()
+{
+    QVERIFY( mLookup );
+    QCOMPARE( mLookup->mDirectionLookupTables.count(), 3 );
+}
+
+void UT_LogsDuplicateLookup::testInvalidate()
+{
+    createTestData();
+    LogsEvent ev1;
+    mLookup->mDirectionLookupTables.at(1)->find(testDir2key1).value() = &ev1;
+    LogsEvent ev2;
+    mLookup->mDirectionLookupTables.at(2)->find(testDir3key2).value() = &ev2;
+    mLookup->invalidate();
+    QVERIFY( mLookup->mDirectionLookupTables.at(0)->find(testDir1key1).value() == 0 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(1)->find(testDir2key1).value() == 0 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(2)->find(testDir3key2).value() == 0 );
+    
+}
+void UT_LogsDuplicateLookup::testCleanup()
+{
+    createTestData();
+    
+    // All expect one with value are cleared
+    QCOMPARE( mLookup->mDirectionLookupTables.at(0)->count(), 2 );
+    QCOMPARE( mLookup->mDirectionLookupTables.at(1)->count(), 1 );
+    QCOMPARE( mLookup->mDirectionLookupTables.at(2)->count(), 3 );
+    
+    LogsEvent ev1;
+    mLookup->mDirectionLookupTables.at(2)->find(testDir3key2).value() = &ev1;
+    mLookup->cleanup();
+    QCOMPARE( mLookup->mDirectionLookupTables.at(0)->count(), 0 );
+    QCOMPARE( mLookup->mDirectionLookupTables.at(1)->count(), 0 );
+    QCOMPARE( mLookup->mDirectionLookupTables.at(2)->count(), 1 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(2)->find(testDir3key2).value() == &ev1 );
+    
+}
+void UT_LogsDuplicateLookup::testAddLookupEntry()
+{
+    // Event does not have remote name
+    LogsEvent ev;
+    ev.setLogId(100);
+    QVERIFY( mLookup->addLookupEntry(ev) == -1 );
+    
+    // Event contains wrong direction
+    ev.setRemoteParty("remote1");
+    ev.setNumber("1234");
+    QVERIFY( mLookup->addLookupEntry(ev) == -1 );
+    
+    // No key yet for the event, key is generated from remote name and number
+    ev.setDirection(LogsEvent::DirIn);
+    QVERIFY( mLookup->addLookupEntry(ev) == 0 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(LogsEvent::DirIn)->find( "remote1/t1234" ).value() == &ev );
+    
+    // Several keys exists and value for matching key exists, value not changed
+    createTestData();
+    QVERIFY( mLookup->addLookupEntry(ev) == 0 );
+    LogsEvent ev2;
+    ev2.setDirection(LogsEvent::DirIn);
+    ev2.setRemoteParty("remote1");
+    ev2.setNumber("1234");
+    ev2.setLogId(200);
+    QVERIFY( mLookup->addLookupEntry(ev2) == 0 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(LogsEvent::DirIn)->find( "remote1/t1234" ).value() == &ev );
+    
+    // This direction entry does not exists, entry is added
+    ev2.setDirection(LogsEvent::DirOut);
+    QVERIFY( mLookup->addLookupEntry(ev2) == 0 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(LogsEvent::DirOut)->find( "remote1/t1234" ).value() == &ev2 );
+    
+    // Several keys exists and no value for matching key, value is set
+    mLookup->mDirectionLookupTables.at(LogsEvent::DirIn)->find( "remote1/t1234" ).value() = 0;
+    ev2.setDirection(LogsEvent::DirIn);
+    QVERIFY( mLookup->addLookupEntry(ev2) == 0 );
+    QVERIFY( mLookup->mDirectionLookupTables.at(LogsEvent::DirIn)->find( "remote1/t1234" ).value() == &ev2 );
+}
+void UT_LogsDuplicateLookup::testFindDuplicate()
+{
+    // Not valid search term
+    LogsEvent ev;
+    ev.setLogId(100);
+    QVERIFY( mLookup->findDuplicate(ev) == 0 );
+    
+    createTestData();
+    LogsEvent ev1;
+    mLookup->mDirectionLookupTables.at(2)->find(testDir3key2).value() = &ev1;
+    LogsEvent ev2;
+    mLookup->mDirectionLookupTables.at(2)->find(testDir3key3).value() = &ev2;
+    LogsEvent searchTerm;
+    searchTerm.setDirection(LogsEvent::DirIn);
+    searchTerm.setRemoteParty("remote1");
+    searchTerm.setNumber("1111");
+    QVERIFY( mLookup->findDuplicate(searchTerm) == 0 );
+    
+    searchTerm.setDirection(LogsEvent::DirMissed);
+    searchTerm.setRemoteParty("remote2");
+    searchTerm.setNumber("3333");
+    QVERIFY( mLookup->findDuplicate(searchTerm) == &ev1 );
+
+    searchTerm.setRemoteParty("remote3");
+    QVERIFY( mLookup->findDuplicate(searchTerm) == &ev2 );
+    
+    // Check that duplicate lookup works with international format also
+    LogsEvent ev5;
+    ev5.setDirection(LogsEvent::DirOut);
+    ev5.setRemoteParty("remote2");
+    ev5.setNumber("+358504443333");
+    mLookup->addLookupEntry(ev5);
+    LogsEvent searchTerm2;
+    searchTerm2.setDirection(LogsEvent::DirOut);
+    searchTerm2.setRemoteParty("remote2");
+    searchTerm2.setNumber("0504443333");
+    QVERIFY( mLookup->findDuplicate(searchTerm2) == &ev5 );
+    
+}
+
+void UT_LogsDuplicateLookup::createTestData()
+{
+    foreach( LogsLookupHash* dir, mLookup->mDirectionLookupTables ){
+        dir->clear();
+    }
+    mLookup->mDirectionLookupTables.at(0)->insert(testDir1key1, 0);
+    mLookup->mDirectionLookupTables.at(0)->insert(testDir1key2, 0);
+    
+    mLookup->mDirectionLookupTables.at(1)->insert(testDir2key1, 0);
+    
+    mLookup->mDirectionLookupTables.at(2)->insert(testDir3key1, 0);
+    mLookup->mDirectionLookupTables.at(2)->insert(testDir3key2, 0);
+    mLookup->mDirectionLookupTables.at(2)->insert(testDir3key3, 0);
+}