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)