summaryrefslogtreecommitdiffstats
path: root/tests/messagequeuetest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/messagequeuetest.cpp')
-rw-r--r--tests/messagequeuetest.cpp90
1 files changed, 81 insertions, 9 deletions
diff --git a/tests/messagequeuetest.cpp b/tests/messagequeuetest.cpp
index c43b192..d5c47f5 100644
--- a/tests/messagequeuetest.cpp
+++ b/tests/messagequeuetest.cpp
@@ -31,12 +31,38 @@ private Q_SLOTS:
31 { 31 {
32 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); 32 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue");
33 QVERIFY(queue.isEmpty()); 33 QVERIFY(queue.isEmpty());
34 QByteArray value("value"); 34 queue.enqueue("value");
35 queue.enqueue(value.data(), value.size());
36 QVERIFY(!queue.isEmpty()); 35 QVERIFY(!queue.isEmpty());
37 } 36 }
38 37
39 void testQueue() 38 void testDequeueEmpty()
39 {
40 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue");
41 bool gotValue = false;
42 bool gotError = false;
43 queue.dequeue([&](void *ptr, int size, std::function<void(bool success)> callback) {
44 gotValue = true;
45 },
46 [&](const MessageQueue::Error &error) {
47 gotError = true;
48 });
49 QVERIFY(!gotValue);
50 QVERIFY(gotError);
51 }
52
53 void testDrained()
54 {
55 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue");
56 QSignalSpy spy(&queue, SIGNAL(drained()));
57 queue.enqueue("value1");
58
59 queue.dequeue([](void *ptr, int size, std::function<void(bool success)> callback) {
60 callback(true);
61 }, [](const MessageQueue::Error &error) {});
62 QCOMPARE(spy.size(), 1);
63 }
64
65 void testSyncDequeue()
40 { 66 {
41 QQueue<QByteArray> values; 67 QQueue<QByteArray> values;
42 values << "value1"; 68 values << "value1";
@@ -44,10 +70,11 @@ private Q_SLOTS:
44 70
45 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); 71 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue");
46 for (const QByteArray &value : values) { 72 for (const QByteArray &value : values) {
47 queue.enqueue(value.data(), value.size()); 73 queue.enqueue(value);
48 } 74 }
49 75
50 while (!queue.isEmpty()) { 76 while (!queue.isEmpty()) {
77 Log() << "start";
51 const auto expected = values.dequeue(); 78 const auto expected = values.dequeue();
52 bool gotValue = false; 79 bool gotValue = false;
53 bool gotError = false; 80 bool gotError = false;
@@ -66,21 +93,66 @@ private Q_SLOTS:
66 QVERIFY(values.isEmpty()); 93 QVERIFY(values.isEmpty());
67 } 94 }
68 95
69 void testDequeueEmpty() 96 void testAsyncDequeue()
70 { 97 {
98 QQueue<QByteArray> values;
99 values << "value1";
100 values << "value2";
101
71 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); 102 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue");
72 bool gotValue = false; 103 for (const QByteArray &value : values) {
104 queue.enqueue(value);
105 }
106
107 while (!queue.isEmpty()) {
108 QEventLoop eventLoop;
109 const auto expected = values.dequeue();
110 bool gotValue = false;
111 bool gotError = false;
112
113 queue.dequeue([&](void *ptr, int size, std::function<void(bool success)> callback) {
114 if (QByteArray(static_cast<char*>(ptr), size) == expected) {
115 gotValue = true;
116 }
117 auto timer = new QTimer();
118 timer->setSingleShot(true);
119 QObject::connect(timer, &QTimer::timeout, [timer, callback, &eventLoop]() {
120 delete timer;
121 callback(true);
122 eventLoop.exit();
123 });
124 timer->start(0);
125 },
126 [&](const MessageQueue::Error &error) {
127 gotError = true;
128 });
129 eventLoop.exec();
130 QVERIFY(gotValue);
131 QVERIFY(!gotError);
132 }
133 QVERIFY(values.isEmpty());
134 }
135
136 /*
137 * Dequeue's are async and we want to be able to enqueue new items in between.
138 */
139 void testNestedEnqueue()
140 {
141 MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue");
142 queue.enqueue("value1");
143
73 bool gotError = false; 144 bool gotError = false;
74 queue.dequeue([&](void *ptr, int size, std::function<void(bool success)> callback) { 145 queue.dequeue([&](void *ptr, int size, std::function<void(bool success)> callback) {
75 gotValue = true; 146 queue.enqueue("value3");
147 callback(true);
76 }, 148 },
77 [&](const MessageQueue::Error &error) { 149 [&](const MessageQueue::Error &error) {
78 gotError = true; 150 gotError = true;
79 }); 151 });
80 QVERIFY(!gotValue); 152 QVERIFY(!gotError);
81 QVERIFY(gotError);
82 } 153 }
83 154
155
84}; 156};
85 157
86QTEST_MAIN(MessageQueueTest) 158QTEST_MAIN(MessageQueueTest)