/*! * \brief Test for the chat administration in authentication context. * * \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany */ #include "TestAuthContext.h" #include #include #include using namespace governikus; class test_AuthContext : public QObject { Q_OBJECT private: QScopedPointer mEac1Changed; QScopedPointer mDataChanged; QScopedPointer mEffectiveSignal; QScopedPointer mAuthContext; QSharedPointer getChat(const std::initializer_list& pList) { auto chat = newObject(); chat->setAccessRights(QSet(pList)); return chat; } void clearSignals() { mEac1Changed->clear(); mDataChanged->clear(); mEffectiveSignal->clear(); } void checkChatSizes(const QString& pTestNum, int pRequired, int pOptional, int pEffective) { qDebug() << "Checking test" << pTestNum; QCOMPARE(mAuthContext->getRequiredAccessRights().size(), pRequired); QCOMPARE(mAuthContext->getOptionalAccessRights().size(), pOptional); QCOMPARE(mAuthContext->getEffectiveAccessRights().size(), pEffective); } void checkAndClearSignals(const QString& pTestNum, int pEac1Data, int pEffective) { qDebug() << "Checking test" << pTestNum; QCOMPARE(mEac1Changed->count(), pEac1Data); QCOMPARE(mDataChanged->count(), pEac1Data); QCOMPARE(mEffectiveSignal->count(), pEffective); clearSignals(); } private Q_SLOTS: void init() { // Creates a context with 17 access rights in cvc // Because required and optional are empty, all 17 rights are optional by default mAuthContext.reset(new TestAuthContext(nullptr, ":/paos/DIDAuthenticateEAC1.xml")); mAuthContext->setRequiredAccessRights({}); mAuthContext->setOptionalAccessRights({}); mEac1Changed.reset(new QSignalSpy(mAuthContext.data(), &AuthContext::fireDidAuthenticateEac1Changed)); mDataChanged.reset(new QSignalSpy(mAuthContext.data(), &AuthContext::fireAuthenticationDataChanged)); mEffectiveSignal.reset(new QSignalSpy(mAuthContext.data(), &AuthContext::fireEffectiveChatChanged)); } void cleanup() { mEac1Changed.reset(); mEffectiveSignal.reset(); mAuthContext.reset(); } void test_AuthContext_01() { // Exists after creation - All cvc rights are optional and selected checkChatSizes("01-01", 0, 17, 17); } void test_AuthContext_02() { // Try to set required right that is not in cvc mAuthContext->setRequiredAccessRights({AccessRight::READ_DG21}); checkChatSizes("02-01", 0, 17, 17); checkAndClearSignals("02-02", 1, 1); // Try to set optional right that is not in cvc mAuthContext->setOptionalAccessRights({AccessRight::READ_DG21}); checkChatSizes("02-03", 0, 17, 17); checkAndClearSignals("02-04", 1, 1); // Try to set a right in required and optional mAuthContext->setOptionalAccessRights({AccessRight::READ_DG05}); checkChatSizes("02-05", 0, 1, 1); checkAndClearSignals("02-06", 1, 1); mAuthContext->setRequiredAccessRights({AccessRight::READ_DG05}); checkChatSizes("02-07", 1, 0, 1); checkAndClearSignals("02-08", 1, 1); } void test_AuthContext_03() { // Clear effective access rights mAuthContext->setEffectiveAccessRights({}); checkChatSizes("03-01", 0, 17, 0); checkAndClearSignals("03-02", 0, 1); } void test_AuthContext_04() { // Set only one access right as optional, required access rights remain empty mAuthContext->setOptionalAccessRights({AccessRight::READ_DG05}); checkChatSizes("04-01", 0, 1, 1); QVERIFY(mAuthContext->getOptionalAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("04-02", 1, 1); // Try to set an optional access right that is already set QVERIFY(mAuthContext->addEffectiveAccessRight(AccessRight::READ_DG05)); checkChatSizes("04-03", 0, 1, 1); QVERIFY(mAuthContext->getOptionalAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("04-04", 0, 0); // Try to remove an optional access right QVERIFY(mAuthContext->removeEffectiveAccessRight(AccessRight::READ_DG05)); checkChatSizes("04-05", 0, 1, 0); QVERIFY(mAuthContext->getOptionalAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("04-06", 0, 1); // Try to remove an optional access right that is not set QVERIFY(mAuthContext->removeEffectiveAccessRight(AccessRight::READ_DG05)); checkChatSizes("04-07", 0, 1, 0); QVERIFY(mAuthContext->getOptionalAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("04-08", 0, 0); // Try to set an optional access right QVERIFY(mAuthContext->addEffectiveAccessRight(AccessRight::READ_DG05)); checkChatSizes("04-09", 0, 1, 1); QVERIFY(mAuthContext->getOptionalAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("04-10", 0, 1); // Try to set an access right that is not included in optional or required access rights QVERIFY(!mAuthContext->addEffectiveAccessRight(AccessRight::AGE_VERIFICATION)); checkChatSizes("04-11", 0, 1, 1); QVERIFY(mAuthContext->getOptionalAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("04-12", 0, 0); } void test_AuthContext_05() { // Set only one access right as required, optional access rights remain empty mAuthContext->setRequiredAccessRights({AccessRight::READ_DG05}); checkChatSizes("05-01", 1, 0, 1); QVERIFY(mAuthContext->getRequiredAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("05-02", 1, 1); // Try to set an required access right that is already set QVERIFY(mAuthContext->addEffectiveAccessRight(AccessRight::READ_DG05)); checkChatSizes("05-03", 1, 0, 1); QVERIFY(mAuthContext->getRequiredAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("05-04", 0, 0); // Try to remove an required access right QVERIFY(!mAuthContext->removeEffectiveAccessRight(AccessRight::READ_DG05)); checkChatSizes("05-05", 1, 0, 1); QVERIFY(mAuthContext->getRequiredAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("05-06", 0, 0); // Try to remove an access right that is not included in optional or required access rights QVERIFY(mAuthContext->removeEffectiveAccessRight(AccessRight::AGE_VERIFICATION)); checkChatSizes("05-07", 1, 0, 1); QVERIFY(mAuthContext->getRequiredAccessRights().contains(AccessRight::READ_DG05)); QVERIFY(mAuthContext->getEffectiveAccessRights().contains(AccessRight::READ_DG05)); checkAndClearSignals("05-08", 0, 0); } void test_ErrorReportedToServer() { AuthContext context(nullptr); QVERIFY(!context.isErrorReportedToServer()); context.setErrorReportedToServer(true); QVERIFY(context.isErrorReportedToServer()); context.setErrorReportedToServer(false); QVERIFY(!context.isErrorReportedToServer()); } void test_DidAuthenticateEacResponse1() { AuthContext context(nullptr); const QSharedPointer eac(new DIDAuthenticateResponseEAC1()); QCOMPARE(context.getDidAuthenticateResponseEac1(), nullptr); context.setDidAuthenticateResponseEac1(eac); QCOMPARE(context.getDidAuthenticateResponseEac1(), eac); } void test_DidAuthenticateResponseEacAdditionalInputType() { AuthContext context(nullptr); const QSharedPointer eac(new DIDAuthenticateResponseEAC2()); QCOMPARE(context.getDidAuthenticateResponseEacAdditionalInputType(), nullptr); context.setDidAuthenticateResponseEacAdditionalInputType(eac); QCOMPARE(context.getDidAuthenticateResponseEacAdditionalInputType(), eac); } void test_DidAuthenticateEacAdditional() { AuthContext context(nullptr); const QSharedPointer eac(new DIDAuthenticateEACAdditional()); QCOMPARE(context.getDidAuthenticateEacAdditional(), nullptr); context.setDidAuthenticateEacAdditional(eac); QCOMPARE(context.getDidAuthenticateEacAdditional(), eac); } void test_DidAuthenticateResponseEac2() { AuthContext context(nullptr); const QSharedPointer eac(new DIDAuthenticateResponseEAC2()); QCOMPARE(context.getDidAuthenticateResponseEac2(), nullptr); context.setDidAuthenticateResponseEac2(eac); QCOMPARE(context.getDidAuthenticateResponseEac2(), eac); } void test_DidList() { AuthContext context(nullptr); const QByteArray data("data"); const QSharedPointer list(new DIDList(data)); QCOMPARE(context.getDidList(), nullptr); context.setDidList(list); QCOMPARE(context.getDidList(), list); } void test_DidListResponse() { AuthContext context(nullptr); const QSharedPointer response(new DIDListResponse()); QCOMPARE(context.getDidListResponse(), nullptr); context.setDidListResponse(response); QCOMPARE(context.getDidListResponse(), response); } void test_Disconnect() { AuthContext context(nullptr); const QByteArray data("disconnect"); const QSharedPointer discnnct(new Disconnect(data)); QCOMPARE(context.getDisconnect(), nullptr); context.setDisconnect(discnnct); QCOMPARE(context.getDisconnect(), discnnct); } void test_DisconnectResponse() { AuthContext context(nullptr); const QSharedPointer response(new DisconnectResponse()); QCOMPARE(context.getDisconnectResponse(), nullptr); context.setDisconnectResponse(response); QCOMPARE(context.getDisconnectResponse(), response); } void test_TransmitResponses() { AuthContext context(nullptr); QSharedPointer response(new TransmitResponse()); QVERIFY(context.getTransmitResponses().isEmpty()); context.addTransmitResponse(response); QVERIFY(context.getTransmitResponses().contains(response)); } void test_Transmits() { AuthContext context(nullptr); const QSharedPointer transmit(new Transmit()); QVERIFY(context.getTransmits().isEmpty()); context.addTransmit(transmit); QVERIFY(context.getTransmits().contains(transmit)); } void test_StartPaos() { AuthContext context(nullptr); const QByteArray data("paos"); const QSharedPointer paos(new StartPaos(data)); QCOMPARE(context.getStartPaos(), nullptr); context.setStartPaos(paos); QCOMPARE(context.getStartPaos(), paos); } void test_SslSession() { AuthContext context(nullptr); const QByteArray session("session"); context.setSslSession(session); QCOMPARE(context.getSslSession(), session); } }; QTEST_GUILESS_MAIN(test_AuthContext) #include "test_AuthContext.moc"