diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-08-11 10:30:10 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-08-11 10:30:10 +0200 |
commit | a9dc9ed667f06fa1828773d1bb8671ec2731dce5 (patch) | |
tree | f8a195992d79d1ff8122be44613e70e04cde0d95 /tests/messagequeuetest.cpp | |
parent | 3144d1b4bbf523b80fa04ba61787d9366ccc0443 (diff) | |
download | sink-a9dc9ed667f06fa1828773d1bb8671ec2731dce5.tar.gz sink-a9dc9ed667f06fa1828773d1bb8671ec2731dce5.zip |
Fixed messagequeue
Diffstat (limited to 'tests/messagequeuetest.cpp')
-rw-r--r-- | tests/messagequeuetest.cpp | 90 |
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 | ||
86 | QTEST_MAIN(MessageQueueTest) | 158 | QTEST_MAIN(MessageQueueTest) |