364 lines
11 KiB
C++
364 lines
11 KiB
C++
/*!
|
|
* \brief Test for the chat administration in authentication context.
|
|
*
|
|
* \copyright Copyright (c) 2016-2019 Governikus GmbH & Co. KG, Germany
|
|
*/
|
|
|
|
#include "TestAuthContext.h"
|
|
|
|
#include <QSharedPointer>
|
|
#include <QSignalSpy>
|
|
#include <QtTest>
|
|
|
|
|
|
using namespace governikus;
|
|
|
|
|
|
class test_AuthContext
|
|
: public QObject
|
|
{
|
|
Q_OBJECT
|
|
|
|
private:
|
|
QScopedPointer<QSignalSpy> mEac1Changed;
|
|
QScopedPointer<QSignalSpy> mDataChanged;
|
|
QScopedPointer<QSignalSpy> mEffectiveSignal;
|
|
QScopedPointer<TestAuthContext> mAuthContext;
|
|
|
|
QSharedPointer<CHAT> getChat(const std::initializer_list<AccessRight>& pList)
|
|
{
|
|
auto chat = newObject<CHAT>();
|
|
chat->setAccessRights(QSet<AccessRight>(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<DIDAuthenticateResponseEAC1> eac(new DIDAuthenticateResponseEAC1());
|
|
|
|
QCOMPARE(context.getDidAuthenticateResponseEac1(), nullptr);
|
|
|
|
context.setDidAuthenticateResponseEac1(eac);
|
|
QCOMPARE(context.getDidAuthenticateResponseEac1(), eac);
|
|
}
|
|
|
|
|
|
void test_DidAuthenticateResponseEacAdditionalInputType()
|
|
{
|
|
AuthContext context(nullptr);
|
|
const QSharedPointer<DIDAuthenticateResponseEAC2> eac(new DIDAuthenticateResponseEAC2());
|
|
|
|
QCOMPARE(context.getDidAuthenticateResponseEacAdditionalInputType(), nullptr);
|
|
|
|
context.setDidAuthenticateResponseEacAdditionalInputType(eac);
|
|
QCOMPARE(context.getDidAuthenticateResponseEacAdditionalInputType(), eac);
|
|
}
|
|
|
|
|
|
void test_DidAuthenticateEacAdditional()
|
|
{
|
|
AuthContext context(nullptr);
|
|
const QSharedPointer<DIDAuthenticateEACAdditional> eac(new DIDAuthenticateEACAdditional());
|
|
|
|
QCOMPARE(context.getDidAuthenticateEacAdditional(), nullptr);
|
|
|
|
context.setDidAuthenticateEacAdditional(eac);
|
|
QCOMPARE(context.getDidAuthenticateEacAdditional(), eac);
|
|
}
|
|
|
|
|
|
void test_DidAuthenticateResponseEac2()
|
|
{
|
|
AuthContext context(nullptr);
|
|
const QSharedPointer<DIDAuthenticateResponseEAC2> 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<DIDList> list(new DIDList(data));
|
|
|
|
QCOMPARE(context.getDidList(), nullptr);
|
|
|
|
context.setDidList(list);
|
|
QCOMPARE(context.getDidList(), list);
|
|
}
|
|
|
|
|
|
void test_DidListResponse()
|
|
{
|
|
AuthContext context(nullptr);
|
|
const QSharedPointer<DIDListResponse> 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<Disconnect> discnnct(new Disconnect(data));
|
|
|
|
QCOMPARE(context.getDisconnect(), nullptr);
|
|
|
|
context.setDisconnect(discnnct);
|
|
QCOMPARE(context.getDisconnect(), discnnct);
|
|
}
|
|
|
|
|
|
void test_DisconnectResponse()
|
|
{
|
|
AuthContext context(nullptr);
|
|
const QSharedPointer<DisconnectResponse> response(new DisconnectResponse());
|
|
|
|
QCOMPARE(context.getDisconnectResponse(), nullptr);
|
|
|
|
context.setDisconnectResponse(response);
|
|
QCOMPARE(context.getDisconnectResponse(), response);
|
|
}
|
|
|
|
|
|
void test_TransmitResponses()
|
|
{
|
|
AuthContext context(nullptr);
|
|
QSharedPointer<TransmitResponse> response(new TransmitResponse());
|
|
|
|
QVERIFY(context.getTransmitResponses().isEmpty());
|
|
|
|
context.addTransmitResponse(response);
|
|
QVERIFY(context.getTransmitResponses().contains(response));
|
|
}
|
|
|
|
|
|
void test_Transmits()
|
|
{
|
|
AuthContext context(nullptr);
|
|
const QSharedPointer<Transmit> 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<StartPaos> 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"
|