Warning, file /pim/akonadi/autotests/server/fakeakonadiserver.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  * SPDX-FileCopyrightText: 2014 Daniel Vrátil <dvratil@redhat.com>
0003  *
0004  * SPDX-License-Identifier: LGPL-2.1-or-later
0005  *
0006  */
0007 #pragma once
0008 
0009 #include "akonadi.h"
0010 #include "exception.h"
0011 
0012 #include <QSharedPointer>
0013 #include <QSignalSpy>
0014 
0015 #include <memory>
0016 #include <type_traits>
0017 
0018 #include "private/protocol_p.h"
0019 
0020 namespace Akonadi
0021 {
0022 namespace Server
0023 {
0024 class InspectableNotificationCollector;
0025 class FakeDataStore;
0026 class FakeConnection;
0027 class FakeClient;
0028 
0029 class TestScenario
0030 {
0031 public:
0032     using List = QList<TestScenario>;
0033 
0034     enum Action {
0035         ServerCmd,
0036         ClientCmd,
0037         Wait,
0038         Quit,
0039         Ignore,
0040     };
0041 
0042     Action action;
0043     QByteArray data;
0044 
0045     static TestScenario create(qint64 tag, Action action, const Protocol::CommandPtr &response);
0046 
0047     static TestScenario wait(int timeout)
0048     {
0049         return TestScenario{Wait, QByteArray::number(timeout)};
0050     }
0051 
0052     static TestScenario quit()
0053     {
0054         return TestScenario{Quit, QByteArray()};
0055     }
0056 
0057     static TestScenario ignore(int count)
0058     {
0059         return TestScenario{Ignore, QByteArray::number(count)};
0060     }
0061 };
0062 
0063 /**
0064  * A fake server used for testing. Loosely based on KIMAP::FakeServer
0065  */
0066 class FakeAkonadiServer : public AkonadiServer
0067 {
0068     Q_OBJECT
0069 
0070 public:
0071     explicit FakeAkonadiServer();
0072     ~FakeAkonadiServer() override;
0073 
0074     /* Reimpl */
0075     bool init() override;
0076 
0077     static QString basePath();
0078     static QString socketFile();
0079     static QString instanceName();
0080 
0081     static TestScenario::List loginScenario(const QByteArray &sessionId = QByteArray());
0082     static TestScenario::List selectCollectionScenario(const QString &name);
0083     static TestScenario::List selectResourceScenario(const QString &name);
0084 
0085     void setScenarios(const TestScenario::List &scenarios);
0086 
0087     void runTest();
0088 
0089     QSharedPointer<QSignalSpy> notificationSpy() const;
0090 
0091     void setPopulateDb(bool populate);
0092     void disableItemRetrievalManager();
0093 
0094 protected:
0095     void newCmdConnection(quintptr socketDescriptor) override;
0096 
0097 private:
0098     bool quit() override;
0099     void initFake();
0100 
0101     FakeDataStore *mDataStore = nullptr;
0102     std::unique_ptr<FakeConnection> mConnection;
0103     std::unique_ptr<FakeClient> mClient;
0104 
0105     InspectableNotificationCollector *mNtfCollector = nullptr;
0106     QSharedPointer<QSignalSpy> mNotificationSpy;
0107 
0108     bool mPopulateDb = true;
0109     bool mDisableItemRetrievalManager = false;
0110 };
0111 
0112 AKONADI_EXCEPTION_MAKE_INSTANCE(FakeAkonadiServerException);
0113 
0114 }
0115 }
0116 
0117 Q_DECLARE_METATYPE(Akonadi::Server::TestScenario)
0118 Q_DECLARE_METATYPE(Akonadi::Server::TestScenario::List)