Mercurial > trustbridge
view ui/tests/cinstprocesstest.cpp @ 113:02ad0922c01f
Start over (only leave comments).
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Fri, 21 Mar 2014 17:12:53 +0100 |
parents | 8fa273791242 |
children | 5ed770c41a73 |
line wrap: on
line source
#include "cinstprocesstest.h" #include "certificatelist.h" #include "errorcodes.h" #include <QDebug> #include <QDir> #include <QFile> #include <QProcess> #include <QTest> #define RELATIVE_CINST_PATH "../../cinst/cinst" QProcess *CinstProcessTest::startCinstProcess() { QProcess *installerProcess = new QProcess(); installerProcess->setProgram(RELATIVE_CINST_PATH); installerProcess->start(); installerProcess->waitForStarted(); return installerProcess; } void finishVerify(QProcess *proc, int exitCode) { proc->closeWriteChannel(); proc->waitForFinished(); QVERIFY(proc->exitStatus() == QProcess::NormalExit); QVERIFY(proc->exitCode() == exitCode); delete proc; } void CinstProcessTest::testValidInput() { QProcess* installerProcess = startCinstProcess(); QVERIFY(installerProcess->state() == QProcess::Running); installerProcess->write("-----BEGIN CERTIFICATE LIST-----\r\n"); installerProcess->write(validList.rawData().toLatin1()); installerProcess->write("-----END CERTIFICATE LIST-----\r\n"); foreach (const Certificate &cert, validList.getInstallCertificates()) { installerProcess->write(cert.base64Line().toLatin1()); installerProcess->write("\r\n"); } finishVerify(installerProcess, 0); } void CinstProcessTest::initTestCase() { QDir dataDir = QDir(SOURCE_DIR"/data/"); QString fileName = dataDir.absoluteFilePath("list-valid-signed.txt"); validList = CertificateList(fileName.toLocal8Bit().data()); } void CinstProcessTest::testNoList() { /* No list */ QProcess* installerProcess = startCinstProcess(); QVERIFY(installerProcess->state() == QProcess::Running); installerProcess->write("-----BEGIN CERTIFICATE LIST-----\r\n"); installerProcess->write("-----END CERTIFICATE LIST-----\r\n"); foreach (const Certificate &cert, validList.getInstallCertificates()) { installerProcess->write(cert.base64Line().toLatin1()); installerProcess->write("\r\n"); } finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST); } void CinstProcessTest::testGarbageInput() { QProcess* installerProcess = startCinstProcess(); QVERIFY(installerProcess->state() == QProcess::Running); /* Garbage */ installerProcess = startCinstProcess(); installerProcess->write("-----BEGIN CERTIFICATE LIST-----\r\n"); int retval=0; int bytesWritten=0; do { char garbage[1030]; for (int i = 0; i < 1030; i++) { garbage[i] = (char) qrand() % 255; } retval = installerProcess->write(garbage, 1030); bytesWritten += retval; } while (retval != -1 && bytesWritten < 100 *1024 *1024 ); QVERIFY (bytesWritten < 100 *1024 *1024); finishVerify(installerProcess, ERR_TOO_MUCH_INPUT); } void CinstProcessTest::testNoInput() { QProcess* installerProcess = startCinstProcess(); QVERIFY(installerProcess->state() == QProcess::Running); /* Nothing */ installerProcess = startCinstProcess(); finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST); } void CinstProcessTest::testNoInstructions() { /* No instructions */ QProcess* installerProcess = startCinstProcess(); QVERIFY(installerProcess->state() == QProcess::Running); installerProcess->write("-----BEGIN CERTIFICATE LIST-----\r\n"); installerProcess->write(validList.rawData().toLatin1()); installerProcess->write("-----END CERTIFICATE LIST-----\r\n"); finishVerify(installerProcess, ERR_NO_INSTRUCTIONS); } void CinstProcessTest::testInvalidInstruction() { QProcess* installerProcess = startCinstProcess(); QVERIFY(installerProcess->state() == QProcess::Running); /* foobar as instruction */ installerProcess->write("-----BEGIN CERTIFICATE LIST-----\r\n"); installerProcess->write(validList.rawData().toLatin1()); installerProcess->write("-----END CERTIFICATE LIST-----\r\n"); installerProcess->write("foobar"); finishVerify(installerProcess, ERR_INVALID_INSTRUCTIONS); } QTEST_GUILESS_MAIN (CinstProcessTest);