From 6864e4accaafa4fa90332719bff5a85a0e92b242 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Sun, 22 May 2016 13:10:39 +0200 Subject: ImapResource prototype --- examples/imapresource/tests/CMakeLists.txt | 21 +++ examples/imapresource/tests/imapresourcetest.cpp | 162 +++++++++++++++++++++++ examples/imapresource/tests/resetmailbox.sh | 10 ++ 3 files changed, 193 insertions(+) create mode 100644 examples/imapresource/tests/CMakeLists.txt create mode 100644 examples/imapresource/tests/imapresourcetest.cpp create mode 100644 examples/imapresource/tests/resetmailbox.sh (limited to 'examples/imapresource/tests') diff --git a/examples/imapresource/tests/CMakeLists.txt b/examples/imapresource/tests/CMakeLists.txt new file mode 100644 index 0000000..cdd5fcb --- /dev/null +++ b/examples/imapresource/tests/CMakeLists.txt @@ -0,0 +1,21 @@ +set(CMAKE_AUTOMOC ON) +include_directories( + ${CMAKE_CURRENT_BINARY_DIR} + ) + +macro(auto_tests) + foreach(_testname ${ARGN}) + add_executable(${_testname} ${_testname}.cpp) + # generate_flatbuffers(${_testname} calendar) + add_test(${_testname} ${_testname}) + qt5_use_modules(${_testname} Core Test Concurrent) + target_link_libraries(${_testname} sink libhawd) + endforeach(_testname) +endmacro(auto_tests) + +auto_tests ( + imapresourcetest +) +target_link_libraries(imapresourcetest sink_resource_imap) + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resetmailbox.sh DESTINATION bin PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ) diff --git a/examples/imapresource/tests/imapresourcetest.cpp b/examples/imapresource/tests/imapresourcetest.cpp new file mode 100644 index 0000000..27d7d6d --- /dev/null +++ b/examples/imapresource/tests/imapresourcetest.cpp @@ -0,0 +1,162 @@ +#include + +#include +#include + +// #include "imapresource/imapresource.h" +#include "store.h" +#include "resourcecontrol.h" +#include "commands.h" +#include "entitybuffer.h" +#include "resourceconfig.h" +#include "modelresult.h" +#include "pipeline.h" +#include "log.h" +#include "test.h" +#include "../imapresource.h" +#include "../imapserverproxy.h" + +#define ASYNCCOMPARE(actual, expected) \ +do {\ + if (!QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__))\ + return KAsync::error(1, "Comparison failed.");\ +} while (0) + +#define ASYNCVERIFY(statement) \ +do {\ + if (!QTest::qVerify((statement), #statement, "", __FILE__, __LINE__))\ + return KAsync::error(1, "Verify failed.");\ +} while (0) + +#define VERIFYEXEC(statement) \ +do {\ + auto result = statement.exec(); \ + result.waitForFinished(); \ + if (!QTest::qVerify(!result.errorCode(), #statement, "", __FILE__, __LINE__))\ + return;\ +} while (0) + +using namespace Sink; +using namespace Sink::ApplicationDomain; + +/** + * Test of complete system using the imap resource. + * + * This test requires the imap resource installed. + */ +class ImapResourceTest : public QObject +{ + Q_OBJECT + + QTemporaryDir tempDir; + QString targetPath; +private slots: + void initTestCase() + { + + //FIXME initTest only works for the current process, + //we also have to start resources in test-mode + // Sink::Test::initTest(); + Sink::Log::setDebugOutputLevel(Sink::Log::Trace); + ::ImapResource::removeFromDisk("org.kde.imap.instance1"); + system("resetmailbox.sh"); + // auto resource = ApplicationDomain::ImapResource::create("account1"); + Sink::ApplicationDomain::SinkResource resource; + resource.setProperty("identifier", "org.kde.imap.instance1"); + resource.setProperty("type", "org.kde.imap"); + resource.setProperty("server", "localhost"); + resource.setProperty("port", 993); + Sink::Store::create(resource).exec().waitForFinished(); + } + + void cleanup() + { + Sink::ResourceControl::shutdown(QByteArray("org.kde.imap.instance1")).exec().waitForFinished(); + ::ImapResource::removeFromDisk("org.kde.imap.instance1"); + } + + void init() + { + qDebug(); + qDebug() << "-----------------------------------------"; + qDebug(); + Sink::ResourceControl::start(QByteArray("org.kde.imap.instance1")).exec().waitForFinished(); + } + + void testListFolders() + { + Sink::Query query; + query.resources << "org.kde.imap.instance1"; + query.request(); + + // Ensure all local data is processed + VERIFYEXEC(Store::synchronize(query)); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + auto job = Store::fetchAll(query).then>([](const QList &folders) { + QCOMPARE(folders.size(), 2); + QStringList names; + for (const auto &folder : folders) { + names << folder->getName(); + } + QVERIFY(names.contains("INBOX")); + QVERIFY(names.contains("INBOX.test")); + }); + VERIFYEXEC(job); + } + + void testListMails() + { + Sink::Query query; + query.resources << "org.kde.imap.instance1"; + query.request().request(); + + // Ensure all local data is processed + VERIFYEXEC(Store::synchronize(query)); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + auto job = Store::fetchAll(query).then>([](const QList &mails) { + QCOMPARE(mails.size(), 1); + QVERIFY(mails.first()->getSubject().startsWith(QString("[Nepomuk] Jenkins build is still unstable"))); + const auto data = mails.first()->getMimeMessage(); + QVERIFY(!data.isEmpty()); + + KMime::Message m; + m.setContent(data); + m.parse(); + QCOMPARE(mails.first()->getSubject(), m.subject(true)->asUnicodeString()); + }); + VERIFYEXEC(job); + } + + void testFetchNewMessages() + { + Sink::Query query; + query.resources << "org.kde.imap.instance1"; + query.request().request(); + + // Ensure all local data is processed + VERIFYEXEC(Store::synchronize(query)); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + ImapServerProxy imap("localhost", 993); + imap.login("doe", "doe").exec().waitForFinished(); + + auto msg = KMime::Message::Ptr::create(); + msg->subject(true)->fromUnicodeString("Foobar", "utf8"); + msg->assemble(); + + VERIFYEXEC(imap.append("INBOX.test", msg->encodedContent(true))); + + Store::synchronize(query).exec().waitForFinished(); + ResourceControl::flushMessageQueue(query.resources).exec().waitForFinished(); + + auto job = Store::fetchAll(query).then>([](const QList &mails) { + QCOMPARE(mails.size(), 2); + }); + VERIFYEXEC(job); + } +}; + +QTEST_MAIN(ImapResourceTest) +#include "imapresourcetest.moc" diff --git a/examples/imapresource/tests/resetmailbox.sh b/examples/imapresource/tests/resetmailbox.sh new file mode 100644 index 0000000..966115a --- /dev/null +++ b/examples/imapresource/tests/resetmailbox.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +sudo echo "dm user.doe.test" | cyradm --auth PLAIN -u cyrus -w admin localhost +sudo echo "cm user.doe.test" | cyradm --auth PLAIN -u cyrus -w admin localhost +sudo echo "sam user.doe cyrus c" | cyradm --auth PLAIN -u cyrus -w admin localhost +sudo echo "sam user.doe.test cyrus c" | cyradm --auth PLAIN -u cyrus -w admin localhost +# sudo rm -R /var/spool/imap/d/user/doe/* +sudo cp /work/source/Sink/tests/data/maildir1/cur/1365777830.R28.localhost.localdomain\:2\,S /var/spool/imap/d/user/doe/test/1. +sudo chown cyrus:mail /var/spool/imap/d/user/doe/test/1. +sudo /usr/lib/cyrus-imapd/reconstruct "user.doe.test" -- cgit v1.2.3