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 |