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"