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);

http://wald.intevation.org/projects/trustbridge/