2017-12-20 14:54:05 +01:00
|
|
|
/*!
|
|
|
|
* \brief Unit tests for \ref RemoteReaderAdvertiserImpl
|
|
|
|
*
|
2019-05-22 10:08:38 +02:00
|
|
|
* \copyright Copyright (c) 2017-2019 Governikus GmbH & Co. KG, Germany
|
2017-12-20 14:54:05 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include "RemoteReaderAdvertiser.h"
|
|
|
|
|
|
|
|
#include "DatagramHandler.h"
|
|
|
|
#include "Env.h"
|
|
|
|
#include "messages/Discovery.h"
|
|
|
|
|
|
|
|
#include <QNetworkProxy>
|
|
|
|
#include <QtTest>
|
|
|
|
|
|
|
|
using namespace governikus;
|
|
|
|
|
|
|
|
|
|
|
|
class DatagramHandlerMock
|
|
|
|
: public DatagramHandler
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
public:
|
|
|
|
virtual bool isBound() const override;
|
|
|
|
|
2019-01-03 15:06:22 +01:00
|
|
|
virtual bool send(const QByteArray& pData) override
|
2017-12-20 14:54:05 +01:00
|
|
|
{
|
|
|
|
Q_EMIT fireSend(pData);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Q_SIGNALS:
|
2019-01-03 15:06:22 +01:00
|
|
|
void fireSend(const QByteArray& pData);
|
2017-12-20 14:54:05 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
bool DatagramHandlerMock::isBound() const
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class test_RemoteReaderAdvertiser
|
|
|
|
: public QObject
|
|
|
|
{
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
QPointer<DatagramHandlerMock> mMock;
|
|
|
|
|
|
|
|
private Q_SLOTS:
|
|
|
|
void init()
|
|
|
|
{
|
|
|
|
mMock = new DatagramHandlerMock;
|
|
|
|
std::function<DatagramHandler*(bool pListen)> creator = [this](bool){
|
|
|
|
return mMock.data();
|
|
|
|
};
|
|
|
|
Env::setCreator<DatagramHandler*>(creator);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void cleanup()
|
|
|
|
{
|
|
|
|
QVERIFY(mMock == nullptr);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void advertisePeriodically()
|
|
|
|
{
|
|
|
|
const QString ifdName("ServerName");
|
|
|
|
const QString ifdId("0123456789ABCDEF");
|
|
|
|
quint16 port = 12345;
|
|
|
|
int pTimerInterval = 100;
|
|
|
|
|
|
|
|
QSignalSpy spy(mMock.data(), &DatagramHandlerMock::fireSend);
|
|
|
|
QScopedPointer<RemoteReaderAdvertiser> advertiser(Env::create<RemoteReaderAdvertiser*>(ifdName, ifdId, port, pTimerInterval));
|
2019-01-03 15:06:22 +01:00
|
|
|
QTRY_COMPARE(spy.count(), 5);
|
2017-12-20 14:54:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void checkBroadcast()
|
|
|
|
{
|
|
|
|
const QString ifdName("ServerName");
|
|
|
|
const QString ifdId("0123456789ABCDEF");
|
|
|
|
quint16 port = 12345;
|
|
|
|
int pTimerInterval = 100;
|
|
|
|
|
|
|
|
QSignalSpy spy(mMock.data(), &DatagramHandlerMock::fireSend);
|
|
|
|
QScopedPointer<RemoteReaderAdvertiser> advertiser(Env::create<RemoteReaderAdvertiser*>(ifdName, ifdId, port, pTimerInterval));
|
2019-01-03 15:06:22 +01:00
|
|
|
QTRY_COMPARE(spy.count(), 1);
|
2017-12-20 14:54:05 +01:00
|
|
|
advertiser.reset();
|
|
|
|
|
2019-01-03 15:06:22 +01:00
|
|
|
const auto& byteArray = spy.at(0).at(0).toByteArray();
|
|
|
|
const auto& offerMsg = Discovery(QJsonDocument::fromJson(byteArray).object());
|
2017-12-20 14:54:05 +01:00
|
|
|
|
2019-01-03 15:06:22 +01:00
|
|
|
QCOMPARE(offerMsg.getIfdName(), ifdName);
|
|
|
|
QCOMPARE(offerMsg.getIfdId(), ifdId);
|
|
|
|
QCOMPARE(offerMsg.getPort(), port);
|
|
|
|
QCOMPARE(offerMsg.getSupportedApis(), {IfdVersion::Version::v0});
|
2017-12-20 14:54:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
Q_DECLARE_METATYPE(QHostAddress)
|
|
|
|
|
|
|
|
QTEST_GUILESS_MAIN(test_RemoteReaderAdvertiser)
|
|
|
|
#include "test_RemoteReaderAdvertiser.moc"
|