logsui/logsengine/logssymbianos/tsrc/ut_logssymbianos/src/ut_logsdbconnector.cpp
changeset 15 76d2cf7a585e
parent 8 6c9acdc6adc0
child 17 90fe74753f71
equal deleted inserted replaced
13:52d644758b05 15:76d2cf7a585e
    24 
    24 
    25 #include <QtTest/QtTest>
    25 #include <QtTest/QtTest>
    26 
    26 
    27 Q_DECLARE_METATYPE(QList<int>)
    27 Q_DECLARE_METATYPE(QList<int>)
    28 
    28 
       
    29 #define LOGS_TEST_CREATE_EVENT_WITHOUT_IDX(eventName, id, eventState ) \
       
    30 LogsEvent* eventName = new LogsEvent; \
       
    31 eventName->setLogId(id);\
       
    32 eventName->setIsInView(true); \
       
    33 eventName->mEventState = eventState; \
       
    34 mDbConnector->mEvents.insert(id, eventName)
       
    35 
    29 #define LOGS_TEST_CREATE_EVENT(eventName, index, eventState ) \
    36 #define LOGS_TEST_CREATE_EVENT(eventName, index, eventState ) \
    30 LogsEvent* eventName = new LogsEvent; \
    37 LogsEvent* eventName = new LogsEvent; \
    31 eventName->setIndex(index); \
    38 eventName->setIndex(index); \
    32 eventName->setLogId(index);\
    39 eventName->setLogId(index);\
    33 eventName->setIsInView(true); \
    40 eventName->setIsInView(true); \
    34 eventName->mEventState = eventState; \
    41 eventName->mEventState = eventState; \
    35 mDbConnector->mEvents.insert(index, eventName)
    42 mDbConnector->mEvents.insert(index, eventName)
    36 
    43 
       
    44 #define ADD_EVENT_WITH_ID( arr, id ) \
       
    45 {\
       
    46 LogsEvent* ev = new LogsEvent;\
       
    47 ev->setLogId(id);\
       
    48 arr.append(ev);\
       
    49 }
       
    50 
       
    51 #define ADD_EVENT_WITH_ID_2( arr, id ) \
       
    52 {\
       
    53 LogsEvent ev;\
       
    54 ev.setLogId(id);\
       
    55 arr.append(ev);\
       
    56 }
       
    57 
    37 void UT_LogsDbConnector::initTestCase()
    58 void UT_LogsDbConnector::initTestCase()
    38 {
    59 {
    39 
    60 
    40 }
    61 }
    41 
    62 
    69     QVERIFY( mDbConnector->mLogEventStrings.iFetched.length() > 0 );
    90     QVERIFY( mDbConnector->mLogEventStrings.iFetched.length() > 0 );
    70     QVERIFY( !mDbConnector->mCompressionEnabled );
    91     QVERIFY( !mDbConnector->mCompressionEnabled );
    71     QVERIFY( LogsCommonData::getInstance().maxReadSize() == logsReadSizeUndefined );
    92     QVERIFY( LogsCommonData::getInstance().maxReadSize() == logsReadSizeUndefined );
    72     
    93     
    73     // Resource control enabled
    94     // Resource control enabled
       
    95     CentralRepositoryStubHelper::setCurrentVal(logsDefaultMatchLength + 2);
    74     LogsDbConnector* connector = new LogsDbConnector(mEvents, false, true);
    96     LogsDbConnector* connector = new LogsDbConnector(mEvents, false, true);
    75     QVERIFY( connector->init() == 0 );
    97     QVERIFY( connector->init() == 0 );
    76     QVERIFY( connector->mReader );
    98     QVERIFY( connector->mReader );
    77     QVERIFY( connector->mLogsRemove );
    99     QVERIFY( connector->mLogsRemove );
    78     QVERIFY( connector->mCompressionEnabled );
   100     QVERIFY( connector->mCompressionEnabled );
    79     QVERIFY( LogsCommonData::getInstance().maxReadSize() == logsReadSizeCompressEnabled );
   101     QVERIFY( LogsCommonData::getInstance().maxReadSize() == logsReadSizeCompressEnabled );
       
   102     QCOMPARE( LogsCommonData::getInstance().telNumMatchLen(), logsDefaultMatchLength + 2 );
    80     delete connector;
   103     delete connector;
       
   104     
       
   105     // Match len not found, default is used
       
   106     CentralRepositoryStubHelper::setCurrentVal(logsDefaultMatchLength + 2);
       
   107     CentralRepositoryStubHelper::setFailCode( -1 );
       
   108     connector = new LogsDbConnector(mEvents);
       
   109     QVERIFY( connector->init() == 0 );
       
   110     QVERIFY( connector->mReader );
       
   111     QVERIFY( connector->mLogsRemove );
       
   112     QCOMPARE( LogsCommonData::getInstance().telNumMatchLen(), logsDefaultMatchLength );
       
   113     
    81 }
   114 }
    82 
   115 
    83 void  UT_LogsDbConnector::testClearList()
   116 void  UT_LogsDbConnector::testClearList()
    84 {
   117 {
    85     QVERIFY( !mDbConnector->mLogsRemove );
   118     QVERIFY( !mDbConnector->mLogsRemove );
    91 }
   124 }
    92 
   125 
    93 void UT_LogsDbConnector::testClearEvents()
   126 void UT_LogsDbConnector::testClearEvents()
    94 {
   127 {
    95     QVERIFY( !mDbConnector->mLogsRemove );
   128     QVERIFY( !mDbConnector->mLogsRemove );
    96     QList<int> events;
   129     QList<LogsEvent*> events;
    97     events.append(1);
   130     ADD_EVENT_WITH_ID(events, 1);
    98     QVERIFY( !mDbConnector->clearEvents(events) ); // sync
   131     QVERIFY( !mDbConnector->clearEvents(events) ); // sync
    99     
   132     
   100     mDbConnector->init();
   133     mDbConnector->init();
   101     QVERIFY( mDbConnector->mLogsRemove );
   134     QVERIFY( mDbConnector->mLogsRemove );
   102     mDbConnector->clearEvents(events); 
   135     mDbConnector->clearEvents(events); 
   103     QVERIFY( !mDbConnector->clearEvents(events) ); // sync
   136     QVERIFY( mDbConnector->mReader->mLocked );
       
   137     QVERIFY( !mDbConnector->clearEvents(events) ); // Already clearing
       
   138     QVERIFY( mDbConnector->mReader->mLocked );
       
   139     qDeleteAll(events);
       
   140     
       
   141     // Remove completed or removeError causes read lock release
       
   142     mDbConnector->removeCompleted();
       
   143     QVERIFY( !mDbConnector->mReader->mLocked );
       
   144     mDbConnector->mReader->mLocked = true;
       
   145     mDbConnector->logsRemoveErrorOccured(-1);
       
   146     QVERIFY( !mDbConnector->mReader->mLocked );
   104 }
   147 }
   105 
   148 
   106 void UT_LogsDbConnector::testMarkEventsSeen()
   149 void UT_LogsDbConnector::testMarkEventsSeen()
   107 {
   150 {
   108     QList<int> events;
   151     QList<LogsEvent*> events;
   109     QSignalSpy spy( mDbConnector, SIGNAL(markingCompleted(int)) );
   152     QSignalSpy spy( mDbConnector, SIGNAL(markingCompleted(int)) );
   110     
   153     
   111     // Not ready
   154     // Not ready
   112     mDbConnector->mEventsSeen.clear();
   155     mDbConnector->mEventsSeen.clear();
   113     mDbConnector->markEventsSeen(events);
   156     mDbConnector->markEventsSeen(events);
   123     event->setDirection(LogsEvent::DirMissed);
   166     event->setDirection(LogsEvent::DirMissed);
   124     LOGS_TEST_CREATE_EVENT(event2, 1, LogsEvent::EventAdded );
   167     LOGS_TEST_CREATE_EVENT(event2, 1, LogsEvent::EventAdded );
   125     event2->setDirection(LogsEvent::DirMissed);
   168     event2->setDirection(LogsEvent::DirMissed);
   126     LOGS_TEST_CREATE_EVENT(event3, 2, LogsEvent::EventAdded );
   169     LOGS_TEST_CREATE_EVENT(event3, 2, LogsEvent::EventAdded );
   127     event3->setDirection(LogsEvent::DirMissed);
   170     event3->setDirection(LogsEvent::DirMissed);
   128     events.append(0);
   171     ADD_EVENT_WITH_ID(events, 0);
   129     events.append(1);
   172     ADD_EVENT_WITH_ID(events, 1);
   130     QVERIFY( mDbConnector->markEventsSeen(events) );
   173     QVERIFY( mDbConnector->markEventsSeen(events) );
   131     QVERIFY( mDbConnector->mEventsSeen.count() == 2 );
   174     QVERIFY( mDbConnector->mEventsSeen.count() == 2 );
   132     QVERIFY( mDbConnector->mReader->mCurrentEventId == 0 ); // Started modifying
   175     QVERIFY( mDbConnector->mReader->mCurrentEventId == 0 ); // Started modifying
   133     
   176     
   134     // Trying to clear missed again, id is appended to mark list, old modifying process in ongoing
   177     // Trying to clear missed again, id is appended to mark list, old modifying process in ongoing
   135     // and is not interrupted
   178     // and is not interrupted
   136     events.append(2);
   179     ADD_EVENT_WITH_ID(events, 2);
   137     QVERIFY( !mDbConnector->markEventsSeen(events) );
   180     QVERIFY( !mDbConnector->markEventsSeen(events) );
   138     QVERIFY( mDbConnector->mEventsSeen.count() == 3 );
   181     QVERIFY( mDbConnector->mEventsSeen.count() == 3 );
   139     QVERIFY( mDbConnector->mReader->mCurrentEventId == 0 ); // Modifying still previous
   182     QVERIFY( mDbConnector->mReader->mCurrentEventId == 0 ); // Modifying still previous
   140     
   183     
   141     // Completed previous modifying, next one in queue is modified
   184     // Completed previous modifying, next one in queue is modified
   152     QVERIFY( spy.count() == 1 ); // Completion was signaled with err 0
   195     QVERIFY( spy.count() == 1 ); // Completion was signaled with err 0
   153     QVERIFY( spy.takeFirst().at(0).toInt() == 0 );
   196     QVERIFY( spy.takeFirst().at(0).toInt() == 0 );
   154     
   197     
   155     // Clearing all, ids are not appended as those are already in modification list
   198     // Clearing all, ids are not appended as those are already in modification list
   156     mDbConnector->mEventsSeen.clear();
   199     mDbConnector->mEventsSeen.clear();
   157     mDbConnector->mEventsSeen.append(0);
   200     ADD_EVENT_WITH_ID_2(mDbConnector->mEventsSeen, 0);
   158     mDbConnector->mEventsSeen.append(1);
   201     ADD_EVENT_WITH_ID_2(mDbConnector->mEventsSeen, 1);
   159     mDbConnector->mEventsSeen.append(2);
   202     ADD_EVENT_WITH_ID_2(mDbConnector->mEventsSeen, 2);
   160     QVERIFY( !mDbConnector->markEventsSeen(events) );
   203     QVERIFY( !mDbConnector->markEventsSeen(events) );
   161     QVERIFY( mDbConnector->mEventsSeen.count() == 3 );
   204     QVERIFY( mDbConnector->mEventsSeen.count() == 3 );
       
   205     
       
   206     // Marked events contains merged duplicates which will be handled same way
       
   207     // as any other event
       
   208     mDbConnector->mEventsSeen.clear();
       
   209     qDeleteAll(events);
       
   210     events.clear();
       
   211     ADD_EVENT_WITH_ID(events, 8);
       
   212     ADD_EVENT_WITH_ID(events, 9);
       
   213     ADD_EVENT_WITH_ID_2( events.at(0)->mergedDuplicates(), 88 );
       
   214     ADD_EVENT_WITH_ID_2( events.at(0)->mergedDuplicates(), 9 ); // already exists in main event list
       
   215     QVERIFY( !mDbConnector->markEventsSeen(events) );
       
   216     QVERIFY( mDbConnector->mEventsSeen.count() == 3 );
       
   217     QVERIFY( mDbConnector->mEventsSeen.at(0).logId() == 8 );
       
   218     QVERIFY( mDbConnector->mEventsSeen.at(1).logId() == 88 );
       
   219     QVERIFY( mDbConnector->mEventsSeen.at(2).logId() == 9 );
       
   220     qDeleteAll(events);
   162 }
   221 }
   163 
   222 
   164 void UT_LogsDbConnector::testReadDuplicates()
   223 void UT_LogsDbConnector::testReadDuplicates()
   165 {
   224 {
   166     QSignalSpy spy( mDbConnector, SIGNAL(duplicatesRead()) );
   225     QSignalSpy spy( mDbConnector, SIGNAL(duplicatesRead()) );
   209     QSignalSpy spyRemoved(mDbConnector, SIGNAL(dataRemoved(QList<int>)));
   268     QSignalSpy spyRemoved(mDbConnector, SIGNAL(dataRemoved(QList<int>)));
   210     QSignalSpy spyUpdated(mDbConnector, SIGNAL(dataUpdated(QList<int>)));
   269     QSignalSpy spyUpdated(mDbConnector, SIGNAL(dataUpdated(QList<int>)));
   211     QSignalSpy spyReset(mDbConnector, SIGNAL(dataReset()));
   270     QSignalSpy spyReset(mDbConnector, SIGNAL(dataReset()));
   212 
   271 
   213     // No events, no signal
   272     // No events, no signal
   214     mDbConnector->readCompleted(0);
   273     mDbConnector->readCompleted();
   215     QVERIFY( spyAdded.count() == 0 );
   274     QVERIFY( spyAdded.count() == 0 );
   216     QVERIFY( spyRemoved.count() == 0 );
   275     QVERIFY( spyRemoved.count() == 0 );
   217     QVERIFY( spyUpdated.count() == 0 );
   276     QVERIFY( spyUpdated.count() == 0 );
   218     QVERIFY( spyReset.count() == 0 );
   277     QVERIFY( spyReset.count() == 0 );
   219     
   278     
   220     // Events exists, their indexes are signaled
   279     // Events exists, their indexes are signaled, indexes are assigned at this phase
   221     LOGS_TEST_CREATE_EVENT(event, 0, LogsEvent::EventAdded );
   280     LOGS_TEST_CREATE_EVENT_WITHOUT_IDX(event, 0, LogsEvent::EventAdded );
   222     mDbConnector->readCompleted(1);
   281     QCOMPARE( event->index(), -1 );
       
   282     mDbConnector->readCompleted();
       
   283     QCOMPARE( event->index(), 0 );
   223     QVERIFY( spyAdded.count() == 1 );
   284     QVERIFY( spyAdded.count() == 1 );
   224     QList<int> addedIndexes = qvariant_cast< QList<int> >(spyAdded.at(0).at(0));
   285     QList<int> addedIndexes = qvariant_cast< QList<int> >(spyAdded.at(0).at(0));
   225     QVERIFY( addedIndexes.count() == 1 );
   286     QVERIFY( addedIndexes.count() == 1 );
   226     QVERIFY( addedIndexes.at(0) == 0 );
   287     QVERIFY( addedIndexes.at(0) == 0 );
   227     QVERIFY( spyRemoved.count() == 0 );
   288     QVERIFY( spyRemoved.count() == 0 );
   230     QVERIFY( mDbConnector->mEvents.count() == 1 );
   291     QVERIFY( mDbConnector->mEvents.count() == 1 );
   231     QVERIFY( mEvents.count() == 1 );
   292     QVERIFY( mEvents.count() == 1 );
   232     
   293     
   233     // 2 more events added, their indexes are signaled
   294     // 2 more events added, their indexes are signaled
   234     event->mEventState = LogsEvent::EventNotUpdated;
   295     event->mEventState = LogsEvent::EventNotUpdated;
   235     event->setIndex(2);
   296     LOGS_TEST_CREATE_EVENT_WITHOUT_IDX(event2, 0, LogsEvent::EventAdded );
   236     LOGS_TEST_CREATE_EVENT(event2, 0, LogsEvent::EventAdded );
   297     LOGS_TEST_CREATE_EVENT_WITHOUT_IDX(event3, 1, LogsEvent::EventAdded );
   237     LOGS_TEST_CREATE_EVENT(event3, 1, LogsEvent::EventAdded );
   298     mDbConnector->readCompleted();
   238     mDbConnector->readCompleted(3);
   299     QCOMPARE( event2->index(), 0 );
       
   300     QCOMPARE( event3->index(), 1 );
       
   301     QCOMPARE( event->index(), 2 );
   239     QVERIFY( spyAdded.count() == 2 );
   302     QVERIFY( spyAdded.count() == 2 );
   240     QList<int> addedIndexes2 = qvariant_cast< QList<int> >(spyAdded.at(1).at(0));
   303     QList<int> addedIndexes2 = qvariant_cast< QList<int> >(spyAdded.at(1).at(0));
   241     QVERIFY( addedIndexes2.count() == 2 );
   304     QVERIFY( addedIndexes2.count() == 2 );
   242     QVERIFY( addedIndexes2.at(0) == 0 );
   305     QVERIFY( addedIndexes2.at(0) == 0 );
   243     QVERIFY( addedIndexes2.at(1) == 1 );
   306     QVERIFY( addedIndexes2.at(1) == 1 );
   249     
   312     
   250     // One of the events updated (index 1)
   313     // One of the events updated (index 1)
   251     event->mEventState = LogsEvent::EventNotUpdated;
   314     event->mEventState = LogsEvent::EventNotUpdated;
   252     event2->mEventState = LogsEvent::EventNotUpdated;
   315     event2->mEventState = LogsEvent::EventNotUpdated;
   253     event3->mEventState = LogsEvent::EventUpdated;
   316     event3->mEventState = LogsEvent::EventUpdated;
   254     mDbConnector->readCompleted(3); 
   317     mDbConnector->readCompleted(); 
   255     QVERIFY( spyAdded.count() == 2 );
   318     QVERIFY( spyAdded.count() == 2 );
   256     QVERIFY( spyRemoved.count() == 0 );
   319     QVERIFY( spyRemoved.count() == 0 );
   257     QVERIFY( spyUpdated.count() == 1 );
   320     QVERIFY( spyUpdated.count() == 1 );
   258     QVERIFY( spyReset.count() == 0 );
   321     QVERIFY( spyReset.count() == 0 );
   259     QList<int> updatedIndexes = qvariant_cast< QList<int> >(spyUpdated.at(0).at(0));
   322     QList<int> updatedIndexes = qvariant_cast< QList<int> >(spyUpdated.at(0).at(0));
   263     QVERIFY( mEvents.count() == 3 );
   326     QVERIFY( mEvents.count() == 3 );
   264     
   327     
   265     // One of the events removed (index 2)
   328     // One of the events removed (index 2)
   266     event->setIsInView(false);
   329     event->setIsInView(false);
   267     event3->mEventState = LogsEvent::EventNotUpdated;
   330     event3->mEventState = LogsEvent::EventNotUpdated;
   268     mDbConnector->readCompleted(2);
   331     mDbConnector->readCompleted();
   269     QVERIFY( spyAdded.count() == 2 );
   332     QVERIFY( spyAdded.count() == 2 );
   270     QVERIFY( spyRemoved.count() == 1 );
   333     QVERIFY( spyRemoved.count() == 1 );
   271     QVERIFY( spyUpdated.count() == 1 );
   334     QVERIFY( spyUpdated.count() == 1 );
   272     QVERIFY( spyReset.count() == 0 );
   335     QVERIFY( spyReset.count() == 0 );
   273     QList<int> removedIndexes = qvariant_cast< QList<int> >(spyRemoved.at(0).at(0));
   336     QList<int> removedIndexes = qvariant_cast< QList<int> >(spyRemoved.at(0).at(0));
   277     QVERIFY( mEvents.count() == 2 );
   340     QVERIFY( mEvents.count() == 2 );
   278     
   341     
   279     // Event added and removed, reset should be signaled
   342     // Event added and removed, reset should be signaled
   280     mDbConnector->mEvents.at(0)->mEventState = LogsEvent::EventAdded;
   343     mDbConnector->mEvents.at(0)->mEventState = LogsEvent::EventAdded;
   281     mDbConnector->mEvents.at(1)->mIsInView = false;
   344     mDbConnector->mEvents.at(1)->mIsInView = false;
   282     mDbConnector->readCompleted(1);
   345     mDbConnector->readCompleted();
   283     QVERIFY( spyAdded.count() == 2 );
   346     QVERIFY( spyAdded.count() == 2 );
   284     QVERIFY( spyRemoved.count() == 1 );
   347     QVERIFY( spyRemoved.count() == 1 );
   285     QVERIFY( spyUpdated.count() == 1 );
   348     QVERIFY( spyUpdated.count() == 1 );
   286     QVERIFY( spyReset.count() == 1 );
   349     QVERIFY( spyReset.count() == 1 );
   287     QVERIFY( mDbConnector->mEvents.count() == 1 );
   350     QVERIFY( mDbConnector->mEvents.count() == 1 );
   290     // Read completed when compression is enabled, reader is not stopped
   353     // Read completed when compression is enabled, reader is not stopped
   291     QVERIFY( mDbConnector->init() == 0 );
   354     QVERIFY( mDbConnector->init() == 0 );
   292     QVERIFY( mDbConnector->start() == 0 );
   355     QVERIFY( mDbConnector->start() == 0 );
   293     QVERIFY( mDbConnector->mReader->mLogViewRecent != 0 );
   356     QVERIFY( mDbConnector->mReader->mLogViewRecent != 0 );
   294     mDbConnector->mCompressionEnabled = true;
   357     mDbConnector->mCompressionEnabled = true;
   295     mDbConnector->readCompleted(0);
   358     mDbConnector->readCompleted();
   296     QVERIFY( mDbConnector->mReader->mLogViewRecent != 0 );
   359     QVERIFY( mDbConnector->mReader->mLogViewRecent != 0 );
   297 }
   360 }
   298 
   361 
   299 void UT_LogsDbConnector::testErrorOccurred()
   362 void UT_LogsDbConnector::testErrorOccurred()
   300 {
   363 {
   301     // If pending event modifying, completion is signaled
   364     // If pending event modifying, completion is signaled
   302     QSignalSpy spy( mDbConnector, SIGNAL(markingCompleted(int)) );
   365     QSignalSpy spy( mDbConnector, SIGNAL(markingCompleted(int)) );
   303     mDbConnector->mEventsSeen.append(0);
   366     ADD_EVENT_WITH_ID_2(mDbConnector->mEventsSeen, 0);
   304     mDbConnector->mEventsSeen.append(1);
   367     ADD_EVENT_WITH_ID_2(mDbConnector->mEventsSeen, 1);
   305     mDbConnector->errorOccurred(-3);
   368     mDbConnector->errorOccurred(-3);
   306     QVERIFY( spy.count() == 1 ); // Completion was signaled with err -3
   369     QVERIFY( spy.count() == 1 ); // Completion was signaled with err -3
   307     QVERIFY( spy.takeFirst().at(0).toInt() == -3 );
   370     QVERIFY( spy.takeFirst().at(0).toInt() == -3 );
   308     QVERIFY( mDbConnector->mEventsSeen.count() == 0 );
   371     QVERIFY( mDbConnector->mEventsSeen.count() == 0 );
   309 }
   372 }
   317     
   380     
   318     mDbConnector->init();
   381     mDbConnector->init();
   319     QVERIFY( mDbConnector->mReader );
   382     QVERIFY( mDbConnector->mReader );
   320     LOGS_TEST_CREATE_EVENT(event, 0, LogsEvent::EventUpdated );
   383     LOGS_TEST_CREATE_EVENT(event, 0, LogsEvent::EventUpdated );
   321     QVERIFY( mDbConnector->updateDetails(false) == 0 );
   384     QVERIFY( mDbConnector->updateDetails(false) == 0 );
   322     QVERIFY( spyUpdated.count() == 1 );
   385     QVERIFY( spyUpdated.count() == 0 ); // Will happen asynchronously
   323 }
   386 }
   324 
   387 
   325 void UT_LogsDbConnector::testClearMissedCallsCounter()
   388 void UT_LogsDbConnector::testClearMissedCallsCounter()
   326 {
   389 {
   327     // Not ready
   390     // Not ready