AusweisApp2/test/qt/card/asn1/test_AccessRoleAndRight.cpp

204 lines
7.7 KiB
C++

/*!
* \brief Unit tests for \ref AccessRoleAndRight
*
* \copyright Copyright (c) 2017-2018 Governikus GmbH & Co. KG, Germany
*/
#include "asn1/AccessRoleAndRight.h"
#include <QtTest>
using namespace governikus;
class test_AccessRoleAndRight
: public QObject
{
Q_OBJECT
void fillTestData()
{
QTest::addColumn<AccessRight>("value");
QTest::newRow("ResidencePermitII") << AccessRight::READ_DG20;
QTest::newRow("ResidencePermitI") << AccessRight::READ_DG19;
QTest::newRow("CommunityID") << AccessRight::READ_DG18;
QTest::newRow("Address") << AccessRight::READ_DG17;
QTest::newRow("BirthName") << AccessRight::READ_DG13;
QTest::newRow("Nationality") << AccessRight::READ_DG10;
QTest::newRow("PlaceOfBirth") << AccessRight::READ_DG09;
QTest::newRow("DateOfBirth") << AccessRight::READ_DG08;
QTest::newRow("DoctoralDegree") << AccessRight::READ_DG07;
QTest::newRow("ArtisticName") << AccessRight::READ_DG06;
QTest::newRow("FamilyName") << AccessRight::READ_DG05;
QTest::newRow("GivenNames") << AccessRight::READ_DG04;
QTest::newRow("ValidUntil") << AccessRight::READ_DG03;
QTest::newRow("IssuingCountry") << AccessRight::READ_DG02;
QTest::newRow("DocumentType") << AccessRight::READ_DG01;
QTest::newRow("Pseudonym") << AccessRight::RESTRICTED_IDENTIFICATION;
QTest::newRow("AddressVerification") << AccessRight::COMMUNITY_ID_VERIFICATION;
QTest::newRow("AgeVerification") << AccessRight::AGE_VERIFICATION;
}
private Q_SLOTS:
void checkAccessRightNames_data()
{
fillTestData();
QTest::newRow("") << AccessRight::WRITE_DG17;
QTest::newRow("") << AccessRight::RFU_32;
QTest::newRow("") << AccessRight::CAN_ALLOWED;
QTest::newRow("") << AccessRight::PRIVILEGED_TERMINAL;
}
void checkAccessRightNames()
{
QFETCH(AccessRight, value);
QCOMPARE(AccessRoleAndRightsUtil::toTechnicalName(value), QLatin1String(QTest::currentDataTag()));
}
void checkFromTechnicalName_data()
{
fillTestData();
}
void checkFromTechnicalName()
{
QFETCH(AccessRight, value);
const AccessRight undefined = static_cast<AccessRight>(UINT_MAX);
AccessRight right = undefined;
const auto& func = [&](AccessRight pRight){
right = pRight;
};
bool success = AccessRoleAndRightsUtil::fromTechnicalName(QString::fromLatin1(QTest::currentDataTag()), func);
if (right != value)
{
QVERIFY(!success);
}
QCOMPARE(right, value);
QVERIFY(success);
QVERIFY(right != undefined);
}
void checkFromTechnicalNameInvalid()
{
const AccessRight undefined = static_cast<AccessRight>(UINT_MAX);
AccessRight right = undefined;
const auto& func = [&](AccessRight pRight){
right = pRight;
};
QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName(QString("crap"), func));
QCOMPARE(right, undefined);
QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName(QString("CAN_ALLOWED"), func));
QCOMPARE(right, undefined);
QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName(QString("CanAllowed"), func));
QCOMPARE(right, undefined);
QVERIFY(!AccessRoleAndRightsUtil::fromTechnicalName(QString("familyname"), func));
QCOMPARE(right, undefined);
}
void checkJoinFromTechnicalName()
{
auto data = AccessRoleAndRightsUtil::joinFromTechnicalName({"DocumentType", "DoctoralDegree"});
QCOMPARE(data, QStringLiteral("Document type, Doctoral degree"));
data = AccessRoleAndRightsUtil::joinFromTechnicalName({"crap", "FamilyName"});
QCOMPARE(data, QStringLiteral("crap, Family name"));
}
/**
* We use UINT_MAX as "undefined" state in AccessRoleAndRightsUtil::fromTechnicalName.
* Ensure that we never use UINT_MAX as a valid value!
*/
void checkUndefinedUsage()
{
const auto& names = Enum<AccessRightNames>::getList();
for (AccessRightNames entry : names)
{
QVERIFY(entry != static_cast<AccessRightNames>(UINT_MAX));
}
const auto& rights = Enum<AccessRight>::getList();
for (AccessRight entry : rights)
{
QVERIFY(entry != static_cast<AccessRight>(UINT_MAX));
}
}
void test_ToDisplayText_data()
{
QTest::addColumn<AccessRight>("input");
QTest::addColumn<QString>("output");
const auto& reserved = QStringLiteral("Unknown (reserved)");
QTest::newRow("RFU_29") << AccessRight::RFU_29 << reserved;
QTest::newRow("RFU_30") << AccessRight::RFU_30 << reserved;
QTest::newRow("RFU_31") << AccessRight::RFU_31 << reserved;
QTest::newRow("RFU_32") << AccessRight::RFU_32 << reserved;
QTest::newRow("writeDG17") << AccessRight::WRITE_DG17 << QString("WRITE_DG17");
QTest::newRow("writeDG18") << AccessRight::WRITE_DG18 << QString("WRITE_DG18");
QTest::newRow("writeDG19") << AccessRight::WRITE_DG19 << QString("WRITE_DG19");
QTest::newRow("writeDG20") << AccessRight::WRITE_DG20 << QString("WRITE_DG20");
QTest::newRow("writeDG21") << AccessRight::WRITE_DG21 << QString("WRITE_DG21");
QTest::newRow("readDG21") << AccessRight::READ_DG21 << QString("Optional data");
QTest::newRow("readDG20") << AccessRight::READ_DG20 << QString("Residence permit II");
QTest::newRow("readDG19") << AccessRight::READ_DG19 << QString("Residence permit I");
QTest::newRow("readDG18") << AccessRight::READ_DG18 << QString("Community-ID");
QTest::newRow("readDG17") << AccessRight::READ_DG17 << QString("Address");
QTest::newRow("readDG16") << AccessRight::READ_DG16 << QString("RFU");
QTest::newRow("readDG15") << AccessRight::READ_DG15 << QString("RFU");
QTest::newRow("readDG14") << AccessRight::READ_DG14 << QString("RFU");
QTest::newRow("readDG13") << AccessRight::READ_DG13 << QString("Birth name");
QTest::newRow("readDG12") << AccessRight::READ_DG12 << QString("Optional data");
QTest::newRow("readDG11") << AccessRight::READ_DG11 << QString("Gender");
QTest::newRow("readDG10") << AccessRight::READ_DG10 << QString("Nationality");
QTest::newRow("readDG09") << AccessRight::READ_DG09 << QString("Place of birth");
QTest::newRow("readDG08") << AccessRight::READ_DG08 << QString("Date of birth");
QTest::newRow("readDG07") << AccessRight::READ_DG07 << QString("Doctoral degree");
QTest::newRow("readDG06") << AccessRight::READ_DG06 << QString("Religious / artistic name");
QTest::newRow("readDG05") << AccessRight::READ_DG05 << QString("Family name");
QTest::newRow("readDG04") << AccessRight::READ_DG04 << QString("Given name(s)");
QTest::newRow("readDG03") << AccessRight::READ_DG03 << QString("Valid until");
QTest::newRow("readDG02") << AccessRight::READ_DG02 << QString("Issuing country");
QTest::newRow("readDG01") << AccessRight::READ_DG01 << QString("Document type");
QTest::newRow("installQualCert") << AccessRight::INSTALL_QUAL_CERT << QString("Installation of qualified signature certificates");
QTest::newRow("installCert") << AccessRight::INSTALL_CERT << QString("Installation of signature certificates");
QTest::newRow("pinManagement") << AccessRight::PIN_MANAGEMENT << QString("PIN Management");
QTest::newRow("canAllowed") << AccessRight::CAN_ALLOWED << QString("CAN allowed");
QTest::newRow("privilegedTerminal") << AccessRight::PRIVILEGED_TERMINAL << QString("Privileged terminal");
QTest::newRow("restrictedIdentification") << AccessRight::RESTRICTED_IDENTIFICATION << QString("Pseudonym");
QTest::newRow("comunityIdVerification") << AccessRight::COMMUNITY_ID_VERIFICATION << QString("Address verification");
QTest::newRow("ageVerification") << AccessRight::AGE_VERIFICATION << QString("Age verification");
QTest::newRow("default") << static_cast<AccessRight>(100) << QString("Unknown");
}
void test_ToDisplayText()
{
QFETCH(AccessRight, input);
QFETCH(QString, output);
QCOMPARE(AccessRoleAndRightsUtil::toDisplayText(input), output);
}
};
QTEST_GUILESS_MAIN(test_AccessRoleAndRight)
#include "test_AccessRoleAndRight.moc"