#include #include #include #include "../imapserverproxy.h" #include "log.h" #include "test.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) #define VERIFYEXEC_FAIL(statement) \ do {\ auto result = statement.exec(); \ result.waitForFinished(); \ if (!QTest::qVerify(result.errorCode(), #statement, "", __FILE__, __LINE__))\ return;\ } while (0) using namespace Imap; /** */ class ImapServerProxyTest : public QObject { Q_OBJECT QTemporaryDir tempDir; QString targetPath; private slots: void initTestCase() { Sink::Log::setDebugOutputLevel(Sink::Log::Trace); system("resetmailbox.sh"); } void cleanup() { } void init() { qDebug(); qDebug() << "-----------------------------------------"; qDebug(); } void testLogin() { ImapServerProxy imap("localhost", 993); VERIFYEXEC(imap.login("doe", "doe")); } void testLoginFailure() { ImapServerProxy imap("foobar", 993); VERIFYEXEC_FAIL(imap.login("doe", "doe")); } void testFetchFolders() { ImapServerProxy imap("localhost", 993); VERIFYEXEC(imap.login("doe", "doe")); auto future = imap.fetchFolders([](const QVector &){}); future.waitForFinished(); QVERIFY(!future.errorCode()); } void testFetchFoldersFailure() { ImapServerProxy imap("foobar", 993); auto future = imap.fetchFolders([](const QVector &){}); auto future2 = future; future2.waitForFinished(); QVERIFY(future2.errorCode()); } void testFetchMail() { ImapServerProxy imap("localhost", 993); VERIFYEXEC(imap.login("doe", "doe")); KIMAP::FetchJob::FetchScope scope; scope.mode = KIMAP::FetchJob::FetchScope::Headers; int count = 0; auto job = imap.select("INBOX.test").then(imap.fetch(KIMAP::ImapSet::fromImapSequenceSet("1:*"), scope, [&count](const QString &mailbox, const QMap &uids, const QMap &sizes, const QMap &attrs, const QMap &flags, const QMap &messages) { Trace() << "Received " << uids.size() << " messages from " << mailbox; Trace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); count += uids.size(); })); VERIFYEXEC(job); QCOMPARE(count, 1); } void testRemoveMail() { ImapServerProxy imap("localhost", 993); VERIFYEXEC(imap.login("doe", "doe")); VERIFYEXEC(imap.remove("INBOX.test", "1:*")); KIMAP::FetchJob::FetchScope scope; scope.mode = KIMAP::FetchJob::FetchScope::Headers; int count = 0; auto job = imap.select("INBOX.test").then(imap.fetch(KIMAP::ImapSet::fromImapSequenceSet("1:*"), scope, [&count](const QString &mailbox, const QMap &uids, const QMap &sizes, const QMap &attrs, const QMap &flags, const QMap &messages) { Trace() << "Received " << uids.size() << " messages from " << mailbox; Trace() << uids.size() << sizes.size() << attrs.size() << flags.size() << messages.size(); count += uids.size(); })); VERIFYEXEC(job); QCOMPARE(count, 0); } }; QTEST_MAIN(ImapServerProxyTest) #include "imapserverproxytest.moc"