1 /*!
2 * \brief Unit tests for \ref RemoteServerImpl
3 *
4 * \copyright Copyright (c) 2017-2021 Governikus GmbH & Co. KG, Germany
5 */
6 #include "RemoteServerImpl.h"
7
8 #include "Env.h"
9 #include "RemoteReaderAdvertiser.h"
10 #include "RemoteServer.h"
11 #include "RemoteWebSocketServer.h"
12
13 #include <QPointer>
14 #include <QSharedPointer>
15 #include <QtTest>
16
17
18 using namespace governikus;
19
20 class RemoteWebSocketServerMock
21 : public RemoteWebSocketServer
22 {
23 Q_OBJECT
24
25 public:
26 QString mServerName;
27 bool mPairing;
28 bool mListening = false, mConnected = false;
29 QSharedPointer<ServerMessageHandler> mEmptyHandler;
30
isListening() const31 [[nodiscard]] bool isListening() const override
32 {
33 return mListening;
34 }
35
36
isConnected() const37 [[nodiscard]] bool isConnected() const override
38 {
39 return mConnected;
40 }
41
42
isPairingConnection() const43 [[nodiscard]] bool isPairingConnection() const override
44 {
45 return false;
46 }
47
48
setConnected(bool pConnected)49 void setConnected(bool pConnected)
50 {
51 if (mConnected != pConnected)
52 {
53 mConnected = pConnected;
54 Q_EMIT fireConnectedChanged(mConnected);
55 }
56 }
57
58
listen(const QString & pServerName)59 bool listen(const QString& pServerName) override
60 {
61 if (mListening)
62 {
63 return false;
64 }
65 mServerName = pServerName;
66 mListening = true;
67 return true;
68 }
69
70
close()71 void close() override
72 {
73 mListening = false;
74 mServerName = QString();
75 mPairing = false;
76 }
77
78
getServerName() const79 [[nodiscard]] QString getServerName() const override
80 {
81 return mServerName;
82 }
83
84
getServerPort() const85 [[nodiscard]] quint16 getServerPort() const override
86 {
87 return 1;
88 }
89
90
setPairing(bool pEnabled=true)91 void setPairing(bool pEnabled = true) override
92 {
93 mPairing = pEnabled;
94 }
95
96
getCurrentCertificate() const97 [[nodiscard]] QSslCertificate getCurrentCertificate() const override
98 {
99 return QSslCertificate();
100 }
101
102
getMessageHandler() const103 [[nodiscard]] const QSharedPointer<ServerMessageHandler>& getMessageHandler() const override
104 {
105 return mEmptyHandler;
106 }
107
108
109 };
110
111
112 class RemoteReaderAdvertiserMock
113 : public RemoteReaderAdvertiser
114 {
115 Q_OBJECT
116
117 public:
118 const QString mIfdName;
119 const QString mIfdId;
120 const quint16 mPort;
121
RemoteReaderAdvertiserMock(const QString & pIfdName,const QString & pIfdId,quint16 pPort)122 RemoteReaderAdvertiserMock(const QString& pIfdName, const QString& pIfdId, quint16 pPort)
123 : RemoteReaderAdvertiser()
124 , mIfdName(pIfdName)
125 , mIfdId(pIfdId)
126 , mPort(pPort)
127 {
128 }
129
130
131 ~RemoteReaderAdvertiserMock() override;
132 };
133
134
~RemoteReaderAdvertiserMock()135 RemoteReaderAdvertiserMock::~RemoteReaderAdvertiserMock()
136 {
137 }
138
139
140 class test_RemoteServerImpl
141 : public QObject
142 {
143 Q_OBJECT
144
145 QPointer<RemoteReaderAdvertiserMock> mAdvertiserMock;
146 QPointer<RemoteWebSocketServerMock> mWebSocketMock;
147 QScopedPointer<RemoteServer> mServer;
148
149 private Q_SLOTS:
init()150 void init()
151 {
152 std::function<RemoteReaderAdvertiser* (const QString&, const QString&, quint16&)> creator = [this](const QString& pIfdName, const QString& pIfdId, quint16& pPort){
153 mAdvertiserMock = new RemoteReaderAdvertiserMock(pIfdName, pIfdId, pPort);
154 return mAdvertiserMock;
155 };
156 Env::setCreator<RemoteReaderAdvertiser*, const QString&, const QString&, quint16&>(creator);
157 std::function<RemoteWebSocketServer* ()> creator2 = [this](){
158 mWebSocketMock = new RemoteWebSocketServerMock();
159 return mWebSocketMock;
160 };
161 Env::setCreator<RemoteWebSocketServer*>(creator2);
162 mServer.reset(new RemoteServerImpl());
163 }
164
165
startStop()166 void startStop()
167 {
168 QVERIFY(!mAdvertiserMock);
169 QVERIFY(!mWebSocketMock->isListening());
170
171 QVERIFY(mServer->start(QStringLiteral("ServerName")));
172 QVERIFY(mAdvertiserMock);
173 QVERIFY(mWebSocketMock->isListening());
174
175 mServer->stop();
176 QVERIFY(!mAdvertiserMock);
177 QVERIFY(!mWebSocketMock->isListening());
178 }
179
180
serverName()181 void serverName()
182 {
183 mServer->start(QStringLiteral("ServerName"));
184 QCOMPARE(mAdvertiserMock->mIfdName, QStringLiteral("ServerName"));
185 QCOMPARE(mWebSocketMock->mServerName, QStringLiteral("ServerName"));
186 }
187
188
port()189 void port()
190 {
191 mServer->start(QStringLiteral("ServerName"));
192 QCOMPARE(mAdvertiserMock->mPort, mWebSocketMock->getServerPort());
193 }
194
195
stopAdvertisingOnConnection()196 void stopAdvertisingOnConnection()
197 {
198 mServer->start(QStringLiteral("ServerName"));
199 mWebSocketMock->setConnected(true);
200
201 QVERIFY(!mAdvertiserMock);
202 }
203
204
startAdvertisingOnConnectionClosed()205 void startAdvertisingOnConnectionClosed()
206 {
207 mServer->start(QStringLiteral("ServerName"));
208 mWebSocketMock->setConnected(true);
209 mWebSocketMock->setConnected(false);
210
211 QVERIFY(mAdvertiserMock);
212 }
213
214
215 };
216
217
218 QTEST_GUILESS_MAIN(test_RemoteServerImpl)
219 #include "test_RemoteServerImpl.moc"
220