File indexing completed on 2024-05-12 05:17:11
0001 /* 0002 SPDX-FileCopyrightText: 2011 Andras Mantia <amantia@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <QTest> 0008 0009 #include "kimap/getquotarootjob.h" 0010 #include "kimap/session.h" 0011 #include "kimaptest/fakeserver.h" 0012 0013 #include <QTest> 0014 0015 Q_DECLARE_METATYPE(QList<qint64>) 0016 0017 class QuotaRootJobTest : public QObject 0018 { 0019 Q_OBJECT 0020 0021 private Q_SLOTS: 0022 0023 void testGetQuotaRoot_data() 0024 { 0025 QTest::addColumn<QString>("mailbox"); 0026 QTest::addColumn<QList<QByteArray>>("roots"); 0027 QTest::addColumn<QList<QByteArray>>("resources"); 0028 QTest::addColumn<QList<qint64>>("usages"); 0029 QTest::addColumn<QList<qint64>>("limits"); 0030 QTest::addColumn<QList<QByteArray>>("scenario"); 0031 0032 QList<QByteArray> roots; 0033 QList<QByteArray> resources; 0034 QList<qint64> usages; 0035 QList<qint64> limits; 0036 QList<QByteArray> scenario; 0037 roots << ""; 0038 resources << "STORAGE"; 0039 limits << 512; 0040 usages << 10; 0041 scenario << FakeServer::preauth() << "C: A000001 GETQUOTAROOT \"INBOX\"" 0042 << "S: * QUOTAROOT INBOX \"\" " 0043 << "S: * QUOTA \"\" (STORAGE 10 512)" 0044 << "S: A000001 OK GETQUOTA completed"; 0045 QTest::newRow("one root, one resource") << "INBOX" << roots << resources << usages << limits << scenario; 0046 0047 roots.clear(); 0048 resources.clear(); 0049 usages.clear(); 0050 limits.clear(); 0051 scenario.clear(); 0052 roots << ""; 0053 resources << "STORAGE" 0054 << "MESSAGE"; 0055 usages << 10 << 8221; 0056 limits << 512 << 20000; 0057 scenario << FakeServer::preauth() << "C: A000001 GETQUOTAROOT \"INBOX\"" 0058 << "S: * QUOTAROOT INBOX \"\" " 0059 << "S: * QUOTA \"\" (STORAGE 10 512)" 0060 << "S: * QUOTA \"\" ( MESSAGE 8221 20000 ) " 0061 << "S: A000001 OK GETQUOTA completed"; 0062 QTest::newRow("one root, multiple resource") << "INBOX" << roots << resources << usages << limits << scenario; 0063 0064 roots.clear(); 0065 resources.clear(); 0066 usages.clear(); 0067 limits.clear(); 0068 scenario.clear(); 0069 roots << "root1" 0070 << "root2"; 0071 resources << "STORAGE" 0072 << "MESSAGE"; 0073 usages << 10 << 8221 << 30 << 100; 0074 limits << 512 << 20000 << 5124 << 120000; 0075 scenario << FakeServer::preauth() << "C: A000001 GETQUOTAROOT \"INBOX\"" 0076 << "S: * QUOTAROOT INBOX \"root1\" root2 " 0077 << "S: * QUOTA \"root1\" (STORAGE 10 512)" 0078 << "S: * QUOTA \"root1\" ( MESSAGE 8221 20000 ) " 0079 << "S: * QUOTA \"root2\" ( MESSAGE 100 120000 ) " 0080 << "S: * QUOTA \"root2\" (STORAGE 30 5124)" 0081 << "S: A000001 OK GETQUOTA completed"; 0082 QTest::newRow("multiple roots, multiple resource") << "INBOX" << roots << resources << usages << limits << scenario; 0083 0084 roots.clear(); 0085 resources.clear(); 0086 usages.clear(); 0087 limits.clear(); 0088 scenario.clear(); 0089 roots << ""; 0090 resources << "STORAGE" 0091 << "MESSAGE"; 0092 usages << 10 << 8221; 0093 limits << 512 << 20000; 0094 scenario << FakeServer::preauth() << "C: A000001 GETQUOTAROOT \"INBOX\"" 0095 << "S: * QUOTAROOT INBOX" 0096 << "S: * QUOTA (STORAGE 10 512)" 0097 << "S: * QUOTA ( MESSAGE 8221 20000 ) " 0098 << "S: A000001 OK GETQUOTA completed"; 0099 QTest::newRow("no rootname, multiple resource") << "INBOX" << roots << resources << usages << limits << scenario; 0100 0101 roots.clear(); 0102 resources.clear(); 0103 usages.clear(); 0104 limits.clear(); 0105 scenario.clear(); 0106 roots << ""; 0107 resources << "STORAGE"; 0108 limits << 512; 0109 usages << 10; 0110 scenario << FakeServer::preauth() << "C: A000001 GETQUOTAROOT \"INBOX\"" 0111 << "S: * QUOTAROOT INBOX \"\" " 0112 << "S: * QUOTA (STORAGE 10 512)" 0113 << "S: A000001 OK GETQUOTA completed"; 0114 QTest::newRow("no rootname in QUOTA, one resource") << "INBOX" << roots << resources << usages << limits << scenario; 0115 0116 roots.clear(); 0117 resources.clear(); 0118 usages.clear(); 0119 limits.clear(); 0120 scenario.clear(); 0121 roots << ""; 0122 resources << "STORAGE"; 0123 limits << 512; 0124 usages << 10; 0125 scenario << FakeServer::preauth() << "C: A000001 GETQUOTAROOT \"INBOX\"" 0126 << "S: * QUOTAROOT INBOX \"root1\" " 0127 << "S: * QUOTA \"root2\" (STORAGE 10 512)" 0128 << "S: A000001 OK GETQUOTA completed"; 0129 QTest::newRow("rootname mismatch") << "INBOX" << roots << resources << usages << limits << scenario; 0130 } 0131 0132 void testGetQuotaRoot() 0133 { 0134 QFETCH(QString, mailbox); 0135 QFETCH(QList<QByteArray>, roots); 0136 QFETCH(QList<QByteArray>, resources); 0137 QFETCH(QList<qint64>, usages); 0138 QFETCH(QList<qint64>, limits); 0139 QFETCH(QList<QByteArray>, scenario); 0140 0141 FakeServer fakeServer; 0142 fakeServer.setScenario(scenario); 0143 fakeServer.startAndWait(); 0144 0145 KIMAP::Session session(QStringLiteral("127.0.0.1"), 5989); 0146 0147 auto job = new KIMAP::GetQuotaRootJob(&session); 0148 job->setMailBox(mailbox); 0149 bool result = job->exec(); 0150 QEXPECT_FAIL("bad", "Expected failure on BAD response", Continue); 0151 QEXPECT_FAIL("no", "Expected failure on NO response", Continue); 0152 QVERIFY(result); 0153 QEXPECT_FAIL("rootname mismatch", "Expected failure on rootname mismatch in QUOTAROOT and QUOTA response", Abort); 0154 QCOMPARE(job->roots(), roots); 0155 for (int rootIdx = 0; rootIdx < roots.size(); rootIdx++) { 0156 const QByteArray &root = roots[rootIdx]; 0157 for (int i = 0; i < resources.size(); i++) { 0158 int idx = i + rootIdx * roots.size(); 0159 QByteArray resource = resources[i]; 0160 QCOMPARE(job->limit(root, resource), limits[idx]); 0161 QCOMPARE(job->usage(root, resource), usages[idx]); 0162 } 0163 } 0164 0165 fakeServer.quit(); 0166 } 0167 }; 0168 0169 QTEST_GUILESS_MAIN(QuotaRootJobTest) 0170 0171 #include "quotarootjobtest.moc"