logsui/logsengine/tsrc/ut_logsengine/src/ut_logsduplicatelookup.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 02 Sep 2010 20:27:05 +0300
changeset 16 c5af8598d22c
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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);
}