AusweisApp2/test/qt/remote_device/messages/test_IfdModifyPin.cpp

194 lines
5.9 KiB
C++
Raw Normal View History

2018-03-28 15:10:51 +02:00
/*!
2019-05-22 10:08:38 +02:00
* \copyright Copyright (c) 2018-2019 Governikus GmbH & Co. KG, Germany
2018-03-28 15:10:51 +02:00
*/
#include "messages/IfdModifyPin.h"
#include "LogHandler.h"
#include <QtTest>
using namespace governikus;
class test_IfdModifyPin
: public QObject
{
Q_OBJECT
private Q_SLOTS:
void initTestCase()
{
2019-01-03 15:06:22 +01:00
Env::getSingleton<LogHandler>()->init();
2018-03-28 15:10:51 +02:00
}
void invalidJson()
{
2019-01-03 15:06:22 +01:00
QSignalSpy logSpy(Env::getSingleton<LogHandler>(), &LogHandler::fireLog);
2018-03-28 15:10:51 +02:00
QByteArray message("FooBar");
const auto& obj = QJsonDocument::fromJson(message).object();
QVERIFY(obj.isEmpty());
IfdModifyPin msg(obj);
2019-01-03 15:06:22 +01:00
QVERIFY(msg.isIncomplete());
2018-03-28 15:10:51 +02:00
2019-01-03 15:06:22 +01:00
QCOMPARE(logSpy.count(), 6);
2018-03-28 15:10:51 +02:00
QVERIFY(logSpy.at(0).at(0).toString().contains("Missing value \"msg\""));
2019-01-03 15:06:22 +01:00
QVERIFY(logSpy.at(1).at(0).toString().contains("Invalid messageType received: \"\""));
QVERIFY(logSpy.at(2).at(0).toString().contains("Missing value \"ContextHandle\""));
QVERIFY(logSpy.at(3).at(0).toString().contains("Missing value \"SlotHandle\""));
QVERIFY(logSpy.at(4).at(0).toString().contains("Missing value \"InputData\""));
QVERIFY(logSpy.at(5).at(0).toString().contains("The value of msg should be IFDModifyPIN"));
2018-03-28 15:10:51 +02:00
}
void values()
{
const IfdModifyPin ifdModifyPin(
QStringLiteral("SlotHandle"),
QByteArray::fromHex("abcd1234")
);
2019-01-03 15:06:22 +01:00
QVERIFY(!ifdModifyPin.isIncomplete());
2018-03-28 15:10:51 +02:00
QCOMPARE(ifdModifyPin.getType(), RemoteCardMessageType::IFDModifyPIN);
QCOMPARE(ifdModifyPin.getContextHandle(), QString());
QCOMPARE(ifdModifyPin.getSlotHandle(), QStringLiteral("SlotHandle"));
QCOMPARE(ifdModifyPin.getInputData(), QByteArray::fromHex("abcd1234"));
}
void toJson()
{
const IfdModifyPin ifdModifyPin(
QStringLiteral("SlotHandle"),
QByteArray::fromHex("abcd1234")
);
2019-01-03 15:06:22 +01:00
const QByteArray& byteArray = ifdModifyPin.toByteArray(QStringLiteral("TestContext"));
QCOMPARE(byteArray,
2018-03-28 15:10:51 +02:00
QByteArray("{\n"
" \"ContextHandle\": \"TestContext\",\n"
" \"InputData\": \"abcd1234\",\n"
" \"SlotHandle\": \"SlotHandle\",\n"
" \"msg\": \"IFDModifyPIN\"\n"
"}\n"));
2019-01-03 15:06:22 +01:00
const QJsonObject obj = QJsonDocument::fromJson(byteArray).object();
2018-03-28 15:10:51 +02:00
QCOMPARE(obj.size(), 4);
QCOMPARE(obj.value(QLatin1String("msg")).toString(), QStringLiteral("IFDModifyPIN"));
QCOMPARE(obj.value(QLatin1String("ContextHandle")).toString(), QStringLiteral("TestContext"));
QCOMPARE(obj.value(QLatin1String("SlotHandle")).toString(), QStringLiteral("SlotHandle"));
QCOMPARE(obj.value(QLatin1String("InputData")).toString(), QStringLiteral("abcd1234"));
}
void fromJson()
{
2019-01-03 15:06:22 +01:00
QSignalSpy logSpy(Env::getSingleton<LogHandler>(), &LogHandler::fireLog);
2018-03-28 15:10:51 +02:00
const QByteArray message("{\n"
" \"ContextHandle\": \"TestContext\",\n"
" \"InputData\": \"abcd1234\",\n"
" \"SlotHandle\": \"SlotHandle\",\n"
" \"msg\": \"IFDModifyPIN\"\n"
"}\n");
const QJsonObject& obj = QJsonDocument::fromJson(message).object();
const IfdModifyPin ifdModifyPin(obj);
2019-01-03 15:06:22 +01:00
QVERIFY(!ifdModifyPin.isIncomplete());
2018-03-28 15:10:51 +02:00
QCOMPARE(ifdModifyPin.getType(), RemoteCardMessageType::IFDModifyPIN);
QCOMPARE(ifdModifyPin.getContextHandle(), QStringLiteral("TestContext"));
QCOMPARE(ifdModifyPin.getSlotHandle(), QStringLiteral("SlotHandle"));
QCOMPARE(ifdModifyPin.getInputData(), QByteArray::fromHex("abcd1234"));
QCOMPARE(logSpy.count(), 0);
}
void msgField_data()
{
QTest::addColumn<RemoteCardMessageType>("type");
const auto& msgTypes = Enum<RemoteCardMessageType>::getList();
for (const auto& type : msgTypes)
{
QTest::newRow(getEnumName(type).data()) << type;
}
}
void msgField()
{
QFETCH(RemoteCardMessageType, type);
2019-01-03 15:06:22 +01:00
QSignalSpy logSpy(Env::getSingleton<LogHandler>(), &LogHandler::fireLog);
2018-03-28 15:10:51 +02:00
QByteArray message("{\n"
" \"ContextHandle\": \"TestContext\",\n"
" \"InputData\": \"abcd1234\",\n"
" \"SlotHandle\": \"SlotHandle\",\n"
" \"msg\": \"%1\"\n"
"}\n");
const QJsonObject& obj = QJsonDocument::fromJson(message.replace("%1", QTest::currentDataTag())).object();
const IfdModifyPin ifdModifyPin(obj);
if (type == RemoteCardMessageType::IFDModifyPIN)
{
2019-01-03 15:06:22 +01:00
QVERIFY(!ifdModifyPin.isIncomplete());
2018-03-28 15:10:51 +02:00
QCOMPARE(ifdModifyPin.getType(), RemoteCardMessageType::IFDModifyPIN);
QCOMPARE(logSpy.count(), 0);
return;
}
2019-01-03 15:06:22 +01:00
QVERIFY(ifdModifyPin.isIncomplete());
2018-03-28 15:10:51 +02:00
QCOMPARE(ifdModifyPin.getType(), type);
2019-01-03 15:06:22 +01:00
if (type == RemoteCardMessageType::UNDEFINED)
{
QCOMPARE(logSpy.count(), 2);
QVERIFY(logSpy.at(0).at(0).toString().contains("Invalid messageType received: \"UNDEFINED\""));
QVERIFY(logSpy.at(1).at(0).toString().contains("The value of msg should be IFDModifyPIN"));
return;
}
QCOMPARE(logSpy.count(), 1);
QVERIFY(logSpy.at(0).at(0).toString().contains("The value of msg should be IFDModifyPIN"));
2018-03-28 15:10:51 +02:00
}
void wrongTypes()
{
2019-01-03 15:06:22 +01:00
QSignalSpy logSpy(Env::getSingleton<LogHandler>(), &LogHandler::fireLog);
2018-03-28 15:10:51 +02:00
const QByteArray message("{\n"
" \"ContextHandle\": \"TestContext\",\n"
" \"InputData\": 1,\n"
" \"SlotHandle\": 2,\n"
" \"msg\": \"IFDModifyPIN\"\n"
"}\n");
const QJsonObject& obj = QJsonDocument::fromJson(message).object();
const IfdModifyPin ifdModifyPin(obj);
2019-01-03 15:06:22 +01:00
QVERIFY(ifdModifyPin.isIncomplete());
2018-03-28 15:10:51 +02:00
QCOMPARE(ifdModifyPin.getType(), RemoteCardMessageType::IFDModifyPIN);
QCOMPARE(ifdModifyPin.getContextHandle(), QStringLiteral("TestContext"));
QCOMPARE(ifdModifyPin.getSlotHandle(), QString());
QCOMPARE(ifdModifyPin.getInputData(), QByteArray());
QCOMPARE(logSpy.count(), 2);
QVERIFY(logSpy.at(0).at(0).toString().contains("The value of \"SlotHandle\" should be of type \"string\""));
QVERIFY(logSpy.at(1).at(0).toString().contains("The value of \"InputData\" should be of type \"string\""));
}
};
QTEST_GUILESS_MAIN(test_IfdModifyPin)
#include "test_IfdModifyPin.moc"