annotate ui/tests/cinstprocesstest.cpp @ 1119:5349e2354c48

(issue54) Merge branch runafterinstall There is now an NSIS Plugin that executes the Software after installation using COM in the shell of the current user. With the way over the shell there is no inheritance / token management required. As it is impossible to drop all privileges of a token granted by UAC and still be able to reelevate the Token again with another RunAs call later this round trip over the Shell was necessary.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 16 Sep 2014 19:48:22 +0200
parents 317ee9dc4684
children e3772d2810b3
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
7 */
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 #include "cinstprocesstest.h"
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 #include "certificatelist.h"
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10 #include "errorcodes.h"
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
11 #include "common.h"
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 #include <QDebug>
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14 #include <QDir>
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15 #include <QFile>
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 #include <QProcess>
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
17
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
18 #include <stdlib.h>
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
19
294
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
20 #define CINST_PATH_CANDIDATES "../../cinst/cinst" << \
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
21 "cinst" << "../../cinst/cinst.exe" << "cinst.exe";
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22
294
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
23 QProcess *CinstProcessTest::startCinstProcess(const QStringList& args) {
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
24 QStringList cinstCandidates;
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
25 cinstCandidates << CINST_PATH_CANDIDATES;
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
26 QString processPath;
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
27 foreach (const QString& candidate, cinstCandidates) {
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
28 QFileInfo fi(candidate);
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
29 if (fi.isExecutable()) {
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
30 processPath = candidate;
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
31 break;
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
32 }
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
33 }
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
34
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 904
diff changeset
35 QStringList newArgs = args;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 904
diff changeset
36 newArgs << "--debug";
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 904
diff changeset
37
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 QProcess *installerProcess = new QProcess();
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 904
diff changeset
39 installerProcess->setArguments(newArgs);
294
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
40 installerProcess->setProgram(processPath);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 installerProcess->start();
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42 installerProcess->waitForStarted();
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
43 return installerProcess;
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
45
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
46 #define VERIFY_PROC_DEBUG(x) \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
47 if (! x ) { \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
48 qDebug() << "Stdout:" << proc->readAllStandardOutput(); \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
49 qDebug() << "Stderr:" << proc->readAllStandardError(); \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
50 qDebug() << "Exit code: " << proc->exitCode(); \
305
4a3febc6d806 Some minor cleanups. Better debug output more Verify's
Andre Heinecke <andre.heinecke@intevation.de>
parents: 298
diff changeset
51 qDebug() << "Exit status: " << proc->exitStatus(); \
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
52 } \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
53 QVERIFY(x)
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
54
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
55 void finishVerify(QProcess *proc, int exitCode) {
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
56 proc->closeWriteChannel();
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
57 proc->waitForFinished();
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
58 VERIFY_PROC_DEBUG(proc->exitStatus() == QProcess::NormalExit);
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
59 VERIFY_PROC_DEBUG(proc->exitCode() == exitCode);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 delete proc;
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
61 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
62
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
63 void CinstProcessTest::testValidInput() {
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
64 QStringList args;
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
65 args << "list=" + validListFile.fileName();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
66
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
67 QTemporaryFile instructions;
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
68 instructions.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
69 foreach (const Certificate &cert, validList.getCertificates()) {
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
70 instructions.write(cert.base64Line().toLatin1());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
71 instructions.write("\n");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
72 }
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
73 instructions.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
74
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
75 args << "choices=" + instructions.fileName();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
76
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
77 QProcess* installerProcess = startCinstProcess(args);
159
37c9653b8755 Rename NO_ERROR as NO_ERROR is already defined in windows.h
Andre Heinecke <aheinecke@intevation.de>
parents: 151
diff changeset
78 finishVerify(installerProcess, ERR_NO_ERROR);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
79 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
80
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
81 void CinstProcessTest::initTestCase() {
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
82 QFile valid(":/list-valid-signed.txt");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
83 valid.open(QIODevice::ReadOnly);
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
84 validListFile.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
85 validListFile.write(valid.readAll());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
86 valid.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
87 validListFile.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
88 validList = CertificateList(validListFile.fileName().toLocal8Bit().data());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
89
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
90 QVERIFY(validList.isValid());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
91
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
92 QFile invalid(":/list-invalid-signed.txt");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
93 invalid.open(QIODevice::ReadOnly);
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
94 invalidListFile.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
95 invalidListFile.write(invalid.readAll());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
96 invalid.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
97 invalidListFile.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
98 invalidList = CertificateList(invalidListFile.fileName().toLocal8Bit().data());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
99
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
100 QVERIFY(!invalidList.isValid());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
101
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
102 QFile other(":/list-valid-other-signature.txt");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
103 other.open(QIODevice::ReadOnly);
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
104 otherListFile.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
105 otherListFile.write(other.readAll());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
106 other.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
107 otherListFile.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
108 otherList = CertificateList(otherListFile.fileName().toLocal8Bit().data());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
109
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
110 QVERIFY(!otherList.isValid());
306
9c5e6b142611 Set the home directory to a temporary location to avoid writing into real nss stores
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
111
904
f89b41fa7048 Fix whitespace errors
Andre Heinecke <andre.heinecke@intevation.de>
parents: 439
diff changeset
112 /* Set HOME or APPDATA so that nss stores are not touched
306
9c5e6b142611 Set the home directory to a temporary location to avoid writing into real nss stores
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
113 * see nsstest for the real test of that code */
9c5e6b142611 Set the home directory to a temporary location to avoid writing into real nss stores
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
114 #ifdef WIN32
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
115 {
314
5e4ae994a320 Make buffer size for fakeHome environment variable dynamic.
Andre Heinecke <aheinecke@intevation.de>
parents: 313
diff changeset
116 char buf[fakeHome.path().toLocal8Bit().size() + 9];
5e4ae994a320 Make buffer size for fakeHome environment variable dynamic.
Andre Heinecke <aheinecke@intevation.de>
parents: 313
diff changeset
117 snprintf(buf, fakeHome.path().toLocal8Bit().size() + 9,
5e4ae994a320 Make buffer size for fakeHome environment variable dynamic.
Andre Heinecke <aheinecke@intevation.de>
parents: 313
diff changeset
118 "APPDATA=%s",fakeHome.path().toLocal8Bit().constData());
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
119 QVERIFY(_putenv (buf) != -1);
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
120 }
306
9c5e6b142611 Set the home directory to a temporary location to avoid writing into real nss stores
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
121 #else
9c5e6b142611 Set the home directory to a temporary location to avoid writing into real nss stores
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
122 QVERIFY(!setenv ("HOME", fakeHome.path().toLocal8Bit().constData(), 1));
9c5e6b142611 Set the home directory to a temporary location to avoid writing into real nss stores
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
123 #endif
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
124 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
125
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
126 void CinstProcessTest::testNoList() {
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
127 /* No list */
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
128 QTemporaryFile emptyFile;
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
129 emptyFile.open();
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
130 emptyFile.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
131
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
132 QStringList args;
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
133 args << "list=" + emptyFile.fileName();
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
134
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
135 QTemporaryFile instructions;
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
136 instructions.open();
249
6a7eb102716d Remove code duplication by unifying the certificatelist.
Andre Heinecke <aheinecke@intevation.de>
parents: 159
diff changeset
137 foreach (const Certificate &cert, validList.getCertificates()) {
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
138 instructions.write(cert.base64Line().toLatin1());
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
139 instructions.write("\n");
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
140 }
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
141 instructions.close();
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
142
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
143 args << "choices=" + instructions.fileName();
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
144
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
145 QProcess* installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
146 finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
147 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
148
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
149 void CinstProcessTest::testGarbageInput() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
150 QStringList args;
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
151
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
152 QString garbage = getRandomDataFile(21*1024*1024);
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
153 args << "list=" + garbage;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
154
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
155 QTemporaryFile instructions;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
156 instructions.open();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
157 foreach (const Certificate &cert, validList.getCertificates()) {
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
158 instructions.write(cert.base64Line().toLatin1());
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
159 instructions.write("\n");
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
160 }
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
161 instructions.close();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
162
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
163 args << "choices=" + instructions.fileName();
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
164
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
165 QProcess* installerProcess = startCinstProcess(args);
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
166 /* If the following failed there may be leftovers in /tmp */
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
167 finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST);
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
168 QVERIFY(QFile::remove(garbage));
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
169 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
170
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
171 void CinstProcessTest::testNoInput() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
172 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
173 args << "list=foobazbuf";
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
174 args << "choices=bazbuffoo";
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
175 QProcess* installerProcess;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
176 installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
177 finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
178 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
179
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
180
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
181 void CinstProcessTest::testNoInstructions() {
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
182 /* No instructions */
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
183 QTemporaryFile emptyFile;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
184 emptyFile.open();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
185 emptyFile.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
186
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
187 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
188 args << "list=" + validListFile.fileName();
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
189 args << "choices=" + emptyFile.fileName();
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
190
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
191 QProcess* installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
192 finishVerify(installerProcess, ERR_NO_INSTRUCTIONS);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
193 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
194
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
195 void CinstProcessTest::testInvalidInstruction() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
196 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
197 args << "list=" + validListFile.fileName();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
198
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
199 QTemporaryFile instructions;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
200 instructions.open();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
201 foreach (const Certificate &cert, validList.getCertificates()) {
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
202 instructions.write(cert.base64Line().toLatin1());
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
203 instructions.write("\n");
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
204 }
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
205 instructions.write("I:ABCDEF\n");
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
206 instructions.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
207
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
208 args << "choices=" + instructions.fileName();
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
209
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
210 QProcess* installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
211
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
212 finishVerify(installerProcess, ERR_INVALID_INSTRUCTIONS);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
213 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
214
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
215 void CinstProcessTest::testUninstall() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
216 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
217 args << "list=" + validListFile.fileName();
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
218 args << "choices=uninstall";
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
219
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
220 QProcess* installerProcess = startCinstProcess(args);
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
221
159
37c9653b8755 Rename NO_ERROR as NO_ERROR is already defined in windows.h
Andre Heinecke <aheinecke@intevation.de>
parents: 151
diff changeset
222 finishVerify(installerProcess, ERR_NO_ERROR);
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
223 }
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
224
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
225 QTEST_GUILESS_MAIN (CinstProcessTest);

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