AusweisApp2/test/helper/PersoSimController.cpp

128 lines
2.0 KiB
C++
Raw Normal View History

2017-07-03 09:30:10 +02:00
/*!
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 "PersoSimController.h"
2017-12-20 14:54:05 +01:00
#include <QHostAddress>
#include <QThread>
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
#ifdef PERSOSIM_EXECUTABLE
#define PERSOSIM_TESTS_ENABLED
#else
#define PERSOSIM_EXECUTABLE ""
#endif
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
using namespace governikus;
2017-07-03 09:30:10 +02:00
PersoSimController::PersoSimController()
: QObject()
, mProcess(nullptr)
2017-12-20 14:54:05 +01:00
, mSocket(new QTcpSocket)
2017-07-03 09:30:10 +02:00
{
}
2017-12-20 14:54:05 +01:00
bool PersoSimController::isEnabled() const
2017-07-03 09:30:10 +02:00
{
#ifdef PERSOSIM_TESTS_ENABLED
2017-12-20 14:54:05 +01:00
return true;
2017-07-03 09:30:10 +02:00
#else
2017-12-20 14:54:05 +01:00
return false;
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
#endif
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
bool PersoSimController::init()
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
if (!isEnabled())
{
qDebug() << "PersoSim tests not enabled";
return false;
}
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
return startProcess();
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
bool PersoSimController::write(const QByteArray& pData)
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
qDebug() << "TO PersoSim:" << pData;
bool success = mSocket->write(pData) == pData.size();
if (!success)
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
qDebug() << "Write failed";
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
mSocket->flush();
return success;
}
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
bool PersoSimController::shutdown()
{
if (mProcess != nullptr)
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
write("shutdown\n");
mSocket->close();
if (!mProcess->waitForFinished(-1))
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
qDebug() << "Failed:" << mProcess->errorString();
return false;
2017-07-03 09:30:10 +02:00
}
}
2017-12-20 14:54:05 +01:00
return true;
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
bool PersoSimController::startProcess()
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
if (mProcess != nullptr)
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
return false;
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
mProcess = new QProcess;
mProcess->setProcessChannelMode(QProcess::ForwardedErrorChannel);
connect(mSocket.data(), &QTcpSocket::readyRead, this, &PersoSimController::newData);
mProcess->start(QStringLiteral(PERSOSIM_EXECUTABLE));
if (!mProcess->waitForStarted(-1))
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
qDebug() << PERSOSIM_EXECUTABLE;
return false;
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
if (mProcess->state() != QProcess::Running)
{
return false;
}
2017-07-03 09:30:10 +02:00
2017-12-20 14:54:05 +01:00
for (int i = 0; i < 10; i++)
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
mSocket->connectToHost(QHostAddress(QHostAddress::LocalHost), 9091);
if (!mSocket->waitForConnected(500))
{
qWarning() << "Error(" << i << "):" << mSocket->errorString();
QThread::msleep(500);
continue;
}
write("select-reader basic\n");
return true;
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
return false;
2017-07-03 09:30:10 +02:00
}
2017-12-20 14:54:05 +01:00
void PersoSimController::newData()
2017-07-03 09:30:10 +02:00
{
2017-12-20 14:54:05 +01:00
qDebug() << "FROM PersoSim:" << mSocket->readAll();
2017-07-03 09:30:10 +02:00
}