AusweisApp2/test/qt/core/controller/test_ChangePinController.cpp

161 lines
3.8 KiB
C++
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*!
* \brief Test for the Change PIN functionality.
*
2019-05-22 10:08:38 +02:00
* \copyright Copyright (c) 2014-2019 Governikus GmbH & Co. KG, Germany
2017-07-03 09:30:10 +02:00
*/
#include "controller/ChangePinController.h"
2017-12-20 14:54:05 +01:00
#include "context/ChangePinContext.h"
2017-09-15 10:23:30 +02:00
#include "PersoSimController.h"
#include "ReaderManager.h"
2017-12-20 14:54:05 +01:00
#include "states/AbstractState.h"
#include "states/StateUpdateRetryCounter.h"
#include <QSharedPointer>
#include <QtTest>
#ifdef PERSOSIM_TESTS_ENABLED
Q_IMPORT_PLUGIN(PcscReaderManagerPlugIn)
#endif
2017-07-03 09:30:10 +02:00
using namespace governikus;
class test_ChangePinController
: public QObject
{
Q_OBJECT
private:
QScopedPointer<PersoSimController> mPersoSim;
QSharedPointer<ChangePinContext> mChangePinContext;
QScopedPointer<WorkflowController> mChangePinController;
2017-12-20 14:54:05 +01:00
bool mRetryCounterUpdated = false;
void onCardInserted(const QString& pReaderName)
{
2019-01-03 15:06:22 +01:00
if (Env::getSingleton<ReaderManager>()->getReaderInfo(pReaderName).hasEidCard())
2017-12-20 14:54:05 +01:00
{
Q_EMIT fireEidCardInserted();
}
}
void onStateChanged(const QString& pNextState)
{
if (mRetryCounterUpdated)
{
mRetryCounterUpdated = false;
if (mChangePinContext->getLastPaceResult() != CardReturnCode::OK)
{
QCOMPARE(mChangePinContext->getLastPaceResult(), CardReturnCode::INVALID_PIN);
Q_EMIT mChangePinContext->fireCancelWorkflow();
return;
}
}
if (AbstractState::isState<StateUpdateRetryCounter>(pNextState))
{
mRetryCounterUpdated = true;
}
mChangePinContext->setStateApproved();
}
2017-07-03 09:30:10 +02:00
private Q_SLOTS:
void initTestCase()
{
mPersoSim.reset(new PersoSimController);
2017-12-20 14:54:05 +01:00
if (!mPersoSim->isEnabled())
{
QSKIP("PersoSim tests not enabled");
}
2017-07-03 09:30:10 +02:00
QVERIFY(mPersoSim->init());
2017-12-20 14:54:05 +01:00
QSignalSpy eidCardDetected(this, &test_ChangePinController::fireEidCardInserted);
2019-01-03 15:06:22 +01:00
const auto readerManager = Env::getSingleton<ReaderManager>();
connect(readerManager, &ReaderManager::fireCardInserted, this, &test_ChangePinController::onCardInserted);
readerManager->init();
2017-12-20 14:54:05 +01:00
QVERIFY(eidCardDetected.wait(20000));
2017-07-03 09:30:10 +02:00
}
void cleanupTestCase()
{
2019-01-03 15:06:22 +01:00
const auto readerManager = Env::getSingleton<ReaderManager>();
readerManager->shutdown();
disconnect(readerManager, &ReaderManager::fireCardInserted, this, &test_ChangePinController::onCardInserted);
2017-12-20 14:54:05 +01:00
QVERIFY(mPersoSim->shutdown());
mPersoSim.reset();
}
void init()
{
mChangePinContext.reset(new ChangePinContext());
mChangePinContext->setReaderPlugInTypes({ReaderManagerPlugInType::PCSC});
connect(mChangePinContext.data(), &WorkflowContext::fireStateChanged, this, &test_ChangePinController::onStateChanged);
mChangePinController.reset(new ChangePinController(mChangePinContext));
mRetryCounterUpdated = false;
2017-07-03 09:30:10 +02:00
}
void cleanup()
{
2017-12-20 14:54:05 +01:00
disconnect(mChangePinContext.data(), &WorkflowContext::fireStateChanged, this, &test_ChangePinController::onStateChanged);
2017-07-03 09:30:10 +02:00
mChangePinController.reset();
mChangePinContext.reset();
}
void testSuccess()
{
2017-12-20 14:54:05 +01:00
qDebug() << "START: testSuccess";
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
mChangePinContext->setPin("123456");
mChangePinContext->setNewPin("123456");
2017-07-03 09:30:10 +02:00
QSignalSpy controllerFinishedSpy(mChangePinController.data(), &ChangePinController::fireComplete);
mChangePinController->run();
2017-12-20 14:54:05 +01:00
QVERIFY(controllerFinishedSpy.wait());
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
QCOMPARE(mChangePinContext->getStatus().getStatusCode(), GlobalStatus::Code::No_Error);
2017-07-03 09:30:10 +02:00
}
void testWrongPin()
{
2017-12-20 14:54:05 +01:00
mChangePinContext->setPin("111111");
mChangePinContext->setNewPin("111111");
2017-07-03 09:30:10 +02:00
QSignalSpy controllerFinishedSpy(mChangePinController.data(), &ChangePinController::fireComplete);
mChangePinController->run();
2017-12-20 14:54:05 +01:00
QVERIFY(controllerFinishedSpy.wait());
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
QCOMPARE(mChangePinContext->getStatus().getStatusCode(), GlobalStatus::Code::Workflow_Cancellation_By_User);
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
Q_SIGNALS:
void fireEidCardInserted();
2017-07-03 09:30:10 +02:00
};
QTEST_GUILESS_MAIN(test_ChangePinController)
#include "test_ChangePinController.moc"