AusweisApp2/test/qt/remote_device/test_RemoteReaderAdvertiser...

110 lines
2.3 KiB
C++
Raw Normal View History

2017-12-20 14:54:05 +01:00
/*!
* \brief Unit tests for \ref RemoteReaderAdvertiserImpl
*
2018-03-28 15:10:51 +02:00
* \copyright Copyright (c) 2017-2018 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"