Mercurial > trustbridge
diff ui/tests/cinstprocesstest.cpp @ 100:8fa273791242
Add test for cinstprocess
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Fri, 21 Mar 2014 12:15:29 +0000 |
parents | |
children | 5ed770c41a73 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ui/tests/cinstprocesstest.cpp Fri Mar 21 12:15:29 2014 +0000 @@ -0,0 +1,122 @@ +#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);