From a9dc9ed667f06fa1828773d1bb8671ec2731dce5 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Tue, 11 Aug 2015 10:30:10 +0200 Subject: Fixed messagequeue --- tests/messagequeuetest.cpp | 90 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 81 insertions(+), 9 deletions(-) (limited to 'tests') 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: { MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); QVERIFY(queue.isEmpty()); - QByteArray value("value"); - queue.enqueue(value.data(), value.size()); + queue.enqueue("value"); QVERIFY(!queue.isEmpty()); } - void testQueue() + void testDequeueEmpty() + { + MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); + bool gotValue = false; + bool gotError = false; + queue.dequeue([&](void *ptr, int size, std::function callback) { + gotValue = true; + }, + [&](const MessageQueue::Error &error) { + gotError = true; + }); + QVERIFY(!gotValue); + QVERIFY(gotError); + } + + void testDrained() + { + MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); + QSignalSpy spy(&queue, SIGNAL(drained())); + queue.enqueue("value1"); + + queue.dequeue([](void *ptr, int size, std::function callback) { + callback(true); + }, [](const MessageQueue::Error &error) {}); + QCOMPARE(spy.size(), 1); + } + + void testSyncDequeue() { QQueue values; values << "value1"; @@ -44,10 +70,11 @@ private Q_SLOTS: MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); for (const QByteArray &value : values) { - queue.enqueue(value.data(), value.size()); + queue.enqueue(value); } while (!queue.isEmpty()) { + Log() << "start"; const auto expected = values.dequeue(); bool gotValue = false; bool gotError = false; @@ -66,21 +93,66 @@ private Q_SLOTS: QVERIFY(values.isEmpty()); } - void testDequeueEmpty() + void testAsyncDequeue() { + QQueue values; + values << "value1"; + values << "value2"; + MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); - bool gotValue = false; + for (const QByteArray &value : values) { + queue.enqueue(value); + } + + while (!queue.isEmpty()) { + QEventLoop eventLoop; + const auto expected = values.dequeue(); + bool gotValue = false; + bool gotError = false; + + queue.dequeue([&](void *ptr, int size, std::function callback) { + if (QByteArray(static_cast(ptr), size) == expected) { + gotValue = true; + } + auto timer = new QTimer(); + timer->setSingleShot(true); + QObject::connect(timer, &QTimer::timeout, [timer, callback, &eventLoop]() { + delete timer; + callback(true); + eventLoop.exit(); + }); + timer->start(0); + }, + [&](const MessageQueue::Error &error) { + gotError = true; + }); + eventLoop.exec(); + QVERIFY(gotValue); + QVERIFY(!gotError); + } + QVERIFY(values.isEmpty()); + } + + /* + * Dequeue's are async and we want to be able to enqueue new items in between. + */ + void testNestedEnqueue() + { + MessageQueue queue(Akonadi2::Store::storageLocation(), "org.kde.dummy.testqueue"); + queue.enqueue("value1"); + bool gotError = false; queue.dequeue([&](void *ptr, int size, std::function callback) { - gotValue = true; + queue.enqueue("value3"); + callback(true); }, [&](const MessageQueue::Error &error) { gotError = true; }); - QVERIFY(!gotValue); - QVERIFY(gotError); + QVERIFY(!gotError); } + }; QTEST_MAIN(MessageQueueTest) -- cgit v1.2.3