annotate ui/tests/cinstprocesstest.cpp @ 856:797aa8d9c785

(issue48) Fallback to HKEY_USERS on hive load failure If the hive can not be loaded it might mean that the user is currently logged on. In that case we can access his registry via HKEY_USERS.
author Andre Heinecke <andre.heinecke@intevation.de>
date Thu, 31 Jul 2014 12:56:26 +0200
parents c88090a15ae4
children f89b41fa7048
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
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 QProcess *installerProcess = new QProcess();
294
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
36 installerProcess->setArguments(args);
d95fd88f6616 Prepare cinstprocesstest to be executed on Windows
Andre Heinecke <aheinecke@intevation.de>
parents: 249
diff changeset
37 installerProcess->setProgram(processPath);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 installerProcess->start();
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39 installerProcess->waitForStarted();
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
40 return installerProcess;
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
43 #define VERIFY_PROC_DEBUG(x) \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
44 if (! x ) { \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
45 qDebug() << "Stdout:" << proc->readAllStandardOutput(); \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
46 qDebug() << "Stderr:" << proc->readAllStandardError(); \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
47 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
48 qDebug() << "Exit status: " << proc->exitStatus(); \
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
49 } \
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
50 QVERIFY(x)
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
51
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52 void finishVerify(QProcess *proc, int exitCode) {
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
53 proc->closeWriteChannel();
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
54 proc->waitForFinished();
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
55 VERIFY_PROC_DEBUG(proc->exitStatus() == QProcess::NormalExit);
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
56 VERIFY_PROC_DEBUG(proc->exitCode() == exitCode);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
57 delete proc;
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
58 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
59
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 void CinstProcessTest::testValidInput() {
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
61 QStringList args;
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
62 args << "list=" + validListFile.fileName();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
63
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
64 QTemporaryFile instructions;
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
65 instructions.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
66 foreach (const Certificate &cert, validList.getCertificates()) {
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
67 instructions.write(cert.base64Line().toLatin1());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
68 instructions.write("\n");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
69 }
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
70 instructions.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
71
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
72 args << "choices=" + instructions.fileName();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
73
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
74 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
75 finishVerify(installerProcess, ERR_NO_ERROR);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
76 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
77
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
78 void CinstProcessTest::initTestCase() {
295
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
79 QFile valid(":/list-valid-signed.txt");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
80 valid.open(QIODevice::ReadOnly);
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
81 validListFile.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
82 validListFile.write(valid.readAll());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
83 valid.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
84 validListFile.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
85 validList = CertificateList(validListFile.fileName().toLocal8Bit().data());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
86
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
87 QVERIFY(validList.isValid());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
88
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
89 QFile invalid(":/list-invalid-signed.txt");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
90 invalid.open(QIODevice::ReadOnly);
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
91 invalidListFile.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
92 invalidListFile.write(invalid.readAll());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
93 invalid.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
94 invalidListFile.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
95 invalidList = CertificateList(invalidListFile.fileName().toLocal8Bit().data());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
96
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
97 QVERIFY(!invalidList.isValid());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
98
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
99 QFile other(":/list-valid-other-signature.txt");
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
100 other.open(QIODevice::ReadOnly);
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
101 otherListFile.open();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
102 otherListFile.write(other.readAll());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
103 other.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
104 otherListFile.close();
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
105 otherList = CertificateList(otherListFile.fileName().toLocal8Bit().data());
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
106
02df89a275a6 Fix cinstprocesstest testValid with usage of arguments
Andre Heinecke <aheinecke@intevation.de>
parents: 294
diff changeset
107 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
108
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
109 /* Set HOME or APPDATA so that nss stores are not touched
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
110 * 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
111 #ifdef WIN32
313
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
112 {
314
5e4ae994a320 Make buffer size for fakeHome environment variable dynamic.
Andre Heinecke <aheinecke@intevation.de>
parents: 313
diff changeset
113 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
114 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
115 "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
116 QVERIFY(_putenv (buf) != -1);
f17226aa2e09 Temporary build fix for windows. Also Use putenv in test
Andre Heinecke <aheinecke@intevation.de>
parents: 306
diff changeset
117 }
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
118 #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
119 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
120 #endif
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
121 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
122
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
123 void CinstProcessTest::testNoList() {
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
124 /* No list */
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
125 QTemporaryFile emptyFile;
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
126 emptyFile.open();
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
127 emptyFile.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
128
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
129 QStringList args;
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
130 args << "list=" + emptyFile.fileName();
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
131
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
132 QTemporaryFile instructions;
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
133 instructions.open();
249
6a7eb102716d Remove code duplication by unifying the certificatelist.
Andre Heinecke <aheinecke@intevation.de>
parents: 159
diff changeset
134 foreach (const Certificate &cert, validList.getCertificates()) {
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
135 instructions.write(cert.base64Line().toLatin1());
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
136 instructions.write("\n");
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
137 }
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
138 instructions.close();
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
139
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
140 args << "choices=" + instructions.fileName();
296
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
141
0b1453070561 Fix test no list
Andre Heinecke <aheinecke@intevation.de>
parents: 295
diff changeset
142 QProcess* installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
143 finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
144 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
145
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
146 void CinstProcessTest::testGarbageInput() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
147 QStringList args;
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
148
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
149 QString garbage = getRandomDataFile(21*1024*1024);
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
150 args << "list=" + garbage;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
151
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
152 QTemporaryFile instructions;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
153 instructions.open();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
154 foreach (const Certificate &cert, validList.getCertificates()) {
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
155 instructions.write(cert.base64Line().toLatin1());
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
156 instructions.write("\n");
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
157 }
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
158 instructions.close();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
159
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
160 args << "choices=" + instructions.fileName();
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
161
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
162 QProcess* installerProcess = startCinstProcess(args);
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
163 /* 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
164 finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST);
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
165 QVERIFY(QFile::remove(garbage));
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
166 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
167
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
168 void CinstProcessTest::testNoInput() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
169 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
170 args << "list=foobazbuf";
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
171 args << "choices=bazbuffoo";
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
172 QProcess* installerProcess;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
173 installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
174 finishVerify(installerProcess, ERR_INVALID_INPUT_NO_LIST);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
175 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
176
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
177
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
178 void CinstProcessTest::testNoInstructions() {
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
179 /* No instructions */
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
180 QTemporaryFile emptyFile;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
181 emptyFile.open();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
182 emptyFile.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
183
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
184 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
185 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
186 args << "choices=" + emptyFile.fileName();
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
187
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
188 QProcess* installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
189 finishVerify(installerProcess, ERR_NO_INSTRUCTIONS);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
190 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
191
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
192 void CinstProcessTest::testInvalidInstruction() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
193 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
194 args << "list=" + validListFile.fileName();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
195
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
196 QTemporaryFile instructions;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
197 instructions.open();
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
198 foreach (const Certificate &cert, validList.getCertificates()) {
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
199 instructions.write(cert.base64Line().toLatin1());
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
200 instructions.write("\n");
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
201 }
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
202 instructions.write("I:ABCDEF\n");
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
203 instructions.close();
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
204
439
c88090a15ae4 Fix cinstprocesstest for new arguments. Handle errno on write errors
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
205 args << "choices=" + instructions.fileName();
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
206
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
207 QProcess* installerProcess = startCinstProcess(args);
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
208
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
209 finishVerify(installerProcess, ERR_INVALID_INSTRUCTIONS);
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
210 }
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
211
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
212 void CinstProcessTest::testUninstall() {
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
213 QStringList args;
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
214 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
215 args << "choices=uninstall";
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
216
298
56507c3d5f1e Adapt remaining cinstprocesstest to new arg pattern
Andre Heinecke <aheinecke@intevation.de>
parents: 296
diff changeset
217 QProcess* installerProcess = startCinstProcess(args);
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
218
159
37c9653b8755 Rename NO_ERROR as NO_ERROR is already defined in windows.h
Andre Heinecke <aheinecke@intevation.de>
parents: 151
diff changeset
219 finishVerify(installerProcess, ERR_NO_ERROR);
151
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
220 }
0df62decff90 Test if uninstall is handled as instruction
Andre Heinecke <aheinecke@intevation.de>
parents: 150
diff changeset
221
100
8fa273791242 Add test for cinstprocess
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
222 QTEST_GUILESS_MAIN (CinstProcessTest);

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