annotate ui/tests/nsstest.cpp @ 1373:00fcb9c4d16b

(issue179) Handle SW verify failures and try to redownload the update
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 24 Nov 2014 16:46:08 +0100
parents 317ee9dc4684
children
rev   line source
404
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
1 /* Copyright (C) 2014 by Bundesamt für Sicherheit in der Informationstechnik
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
2 * Software engineering by Intevation GmbH
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
3 *
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
4 * This file is Free Software under the GNU GPL (v>=2)
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY!
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
6 * See LICENSE.txt for details.
17e1c8f37d72 Add License
Andre Heinecke <aheinecke@intevation.de>
parents: 371
diff changeset
7 */
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
8 #include <cert.h>
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
9 #include <certdb.h>
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
10 #include <certt.h>
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
11
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
12 #include <nss.h>
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
13 #include <pk11pub.h>
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
14
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
15 #include "nsstest.h"
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
16 #include "nssstore.h"
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
17 #include "strhelp.h"
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
18
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
19 #include <QTest>
330
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
20 #include <QTextCodec>
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
21
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
22 #ifdef WIN32
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
23 #define endl "\r\n"
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
24 #endif
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
25
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
26 QList<QByteArray> NSSTest::get_nss_certs (QTemporaryDir *nssDir)
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
27 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
28 CERTCertList *list;
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
29 CERTCertListNode *node;
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
30 QList<QByteArray> retval;
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
31
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
32 if (NSS_Initialize(nssDir->path().toLocal8Bit().constData(),
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
33 "", "", "secmod.db", NSS_INIT_READONLY)
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
34 == SECSuccess)
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
35 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
36 list = PK11_ListCerts(PK11CertListAll, NULL);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
37 for (node = CERT_LIST_HEAD(list); !CERT_LIST_END(node, list);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
38 node = CERT_LIST_NEXT(node)) {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
39 retval << QByteArray((const char*)node->cert->derCert.data,
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
40 (int)node->cert->derCert.len);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
41 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
42 CERT_DestroyCertList(list);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
43 NSS_Shutdown();
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
44 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
45 else
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
46 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
47 qDebug("Could not open nss certificate store!\n");
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
48 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
49 return retval;
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
50 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
51
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
52 void NSSTest::setupTestDir(QTemporaryDir *nssDir)
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
53 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
54 /* Copy the empty nss db in the temporary dir */
330
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
55 QVERIFY(QFile::copy(":/nss/cert8.db", nssDir->path() + "/" +"cert8.db"));
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
56 QVERIFY(QFile::copy(":/nss/key3.db", nssDir->path() + "/" +"key3.db"));
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
57 QVERIFY(QFile::copy(":/nss/secmod.db", nssDir->path() + "/" +"secmod.db"));
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
58
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
59 QVERIFY(QFile::setPermissions(nssDir->path() + "/" +"cert8.db",
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
60 QFileDevice::ReadOwner | QFileDevice::WriteOwner));
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
61 QVERIFY(QFile::setPermissions(nssDir->path() + "/" +"key3.db",
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
62 QFileDevice::ReadOwner | QFileDevice::WriteOwner));
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
63 QVERIFY(QFile::setPermissions(nssDir->path() + "/" +"secmod.db",
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
64 QFileDevice::ReadOwner | QFileDevice::WriteOwner));
346
a54925d41056 Enable autoremove again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 330
diff changeset
65 // nssDir->setAutoRemove(false);
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
66 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
67
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
68 void NSSTest::initTestCase() {
330
1e6d1eab8395 Fix NSS unit test for Windows and change how instructions are written
Andre Heinecke <aheinecke@intevation.de>
parents: 326
diff changeset
69 QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8")); /* use system default */
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
70
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
71 /* Set up a temporary list */
371
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
72 #ifdef RELEASE_BUILD
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
73 QFile res(":/list-valid-signed-release.txt");
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
74 #else
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
75 QFile res(":/list-valid-signed.txt");
371
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
76 #endif
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
77 res.open(QIODevice::ReadOnly);
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
78 validListFile.open();
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
79 validListFile.write(res.readAll());
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
80 validListFile.close();
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
81
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
82 setupTestDir(&ffNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
83 setupTestDir(&tbNSSDir);
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
84
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
85 validList = CertificateList(validListFile.fileName().toLocal8Bit().data());
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
86
371
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
87 QVERIFY(validList.isValid());
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
88
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
89 /* Create the profiles.ini `s set environment variables*/
346
a54925d41056 Enable autoremove again
Andre Heinecke <andre.heinecke@intevation.de>
parents: 330
diff changeset
90 // fakeHome.setAutoRemove(false);
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
91 #ifndef WIN32
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
92 fakeFirefoxDir = QDir(fakeHome.path() + "/.mozilla/firefox");
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
93 fakeThunderbirdDir = QDir(fakeHome.path() + "/.thunderbird");
492
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
94
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
95 /* Copy the current systems NSSSHARED db in the fake home for benchmark tests */
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
96 QDir fakeNSSSharedDir = fakeHome.path() + "/.pki/nssdb";
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
97 QVERIFY(fakeNSSSharedDir.mkpath(fakeNSSSharedDir.path()));
830
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
98 QVERIFY(QFile::copy(":/nss/pki-nssdb/cert9.db",
492
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
99 fakeNSSSharedDir.path() + "cert9.db"));
830
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
100 QVERIFY(QFile::copy(":/nss/pki-nssdb/key4.db",
492
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
101 fakeNSSSharedDir.path() + "key4.db"));
830
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
102 QFile pkcs11(":/nss/pki-nssdb/pkcs11.txt");
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
103 pkcs11.open(QIODevice::ReadOnly);
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
104
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
105 QString pkcs11content = pkcs11.readAll();
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
106 pkcs11.close();
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
107 pkcs11content.replace("TOREPLACE", fakeNSSSharedDir.path());
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
108 QFile p11outfile (fakeNSSSharedDir.path() + "pkcs11.txt");
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
109 p11outfile.open(QIODevice::WriteOnly);
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
110 p11outfile.write(pkcs11content.toUtf8());
344d15e23f6c Add nss shared db data and use it.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 534
diff changeset
111 p11outfile.close();
492
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
112
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
113 QVERIFY(!setenv ("HOME", fakeHome.path().toLocal8Bit().constData(), 1));
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
114 #else
326
ad28f6b60e6b Fix nsstest build for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
115 {
ad28f6b60e6b Fix nsstest build for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
116 char buf[fakeHome.path().toLocal8Bit().size() + 9];
ad28f6b60e6b Fix nsstest build for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
117 snprintf(buf, fakeHome.path().toLocal8Bit().size() + 9,
ad28f6b60e6b Fix nsstest build for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
118 "APPDATA=%s",fakeHome.path().toLocal8Bit().constData());
ad28f6b60e6b Fix nsstest build for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
119 QVERIFY(_putenv (buf) != -1);
ad28f6b60e6b Fix nsstest build for windows
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
120 }
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
121 fakeFirefoxDir = QDir(fakeHome.path() + "/Mozilla/firefox");
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
122 fakeThunderbirdDir = QDir(fakeHome.path() + "/Thunderbird");
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
123 #endif
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
124 QVERIFY(fakeFirefoxDir.mkpath(fakeFirefoxDir.path()));
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
125 QVERIFY(fakeThunderbirdDir.mkpath(fakeThunderbirdDir.path()));
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
126
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
127 QFile mozProfile(fakeFirefoxDir.absoluteFilePath("profiles.ini"));
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
128 QFile tbProfile(fakeThunderbirdDir.absoluteFilePath("profiles.ini"));
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
129
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
130 /* Write profiles */
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
131 QVERIFY(mozProfile.open(QIODevice::WriteOnly));
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
132 QTextStream ffStream(&mozProfile);
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
133 ffStream << endl << "[General]"<<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
134 "StartWithLastProfile=1" << endl <<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
135 "[Profile0]" << endl <<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
136 "Name=default" << endl <<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
137 "IsRelative=1" << endl <<
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
138 "Path=" << fakeFirefoxDir.relativeFilePath(ffNSSDir.path()) << endl;
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
139 ffStream.flush();
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
140 mozProfile.close();
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
141
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
142 QVERIFY(tbProfile.open(QIODevice::WriteOnly));
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
143 QTextStream tbStream(&tbProfile);
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
144 tbStream << endl << "[General]"<<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
145 "StartWithLastProfile=1" << endl <<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
146 "[Profile102]" << endl <<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
147 "Name=default" << endl <<
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
148 "IsRelative=0" << endl <<
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
149 "Path=" << tbNSSDir.path() << endl;
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
150 tbStream.flush();
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
151 tbProfile.close();
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
152 }
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
153
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
154 void NSSTest::testInstRemove() {
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
155 char ** to_install = NULL,
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
156 ** to_remove = NULL;
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
157
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
158 QList<Certificate> instList;
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
159
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
160 /* Install all certificates */
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
161 foreach (const Certificate &cert, validList.getCertificates()) {
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
162 if (!cert.isInstallCert())
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
163 continue;
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
164 instList << cert;
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
165 strv_append (&to_install, cert.base64Line().toLatin1().constData() + 2,
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
166 cert.base64Line().size() - 2);
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
167 }
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
168 QVERIFY((size_t) instList.size() == strv_length(to_install));
371
6b78a89c1e17 Fix NSS test in release build and add verify's to avoid segfault with invalid list.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 346
diff changeset
169 QVERIFY(strv_length(to_install) != 0);
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
170
305
4a3febc6d806 Some minor cleanups. Better debug output more Verify's
Andre Heinecke <andre.heinecke@intevation.de>
parents: 304
diff changeset
171 QVERIFY(write_stores_nss(to_install, to_remove) == 0);
4a3febc6d806 Some minor cleanups. Better debug output more Verify's
Andre Heinecke <andre.heinecke@intevation.de>
parents: 304
diff changeset
172
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
173 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
174 /* Verify that everything is installed */
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
175 QList<QByteArray> installedCertsFF = get_nss_certs(&ffNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
176 QList<QByteArray> installedCertsTB = get_nss_certs(&tbNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
177
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
178 QVERIFY(installedCertsFF.size() == instList.size());
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
179 QVERIFY(installedCertsFF == installedCertsTB);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
180
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
181 for (int i = 0; to_install[i]; i++) {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
182 QByteArray bai = QByteArray::fromBase64(to_install[i]);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
183 QVERIFY(installedCertsFF.contains(bai));
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
184 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
185 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
186
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
187 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
188 /* Remove one certificate */
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
189 QVERIFY(instList.size() > 2);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
190 strv_append (&to_remove, to_install[1], qstrlen(to_install[1]));
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
191
477
48161978c84c Add some more verifications
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
192 QList<QByteArray> beforeFF = get_nss_certs(&ffNSSDir);
48161978c84c Add some more verifications
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
193 QVERIFY(strv_length(to_remove) == 1);
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
194 QVERIFY(write_stores_nss(NULL, to_remove) == 0);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
195
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
196 QList<QByteArray> installedCertsFF = get_nss_certs(&ffNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
197 QList<QByteArray> installedCertsTB = get_nss_certs(&tbNSSDir);
477
48161978c84c Add some more verifications
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
198 QVERIFY(beforeFF.size() > 0);
48161978c84c Add some more verifications
Andre Heinecke <aheinecke@intevation.de>
parents: 404
diff changeset
199 QVERIFY(beforeFF.size() - 1 == installedCertsFF.size());
307
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
200
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
201 QVERIFY(installedCertsFF == installedCertsTB);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
202
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
203 QByteArray bai = QByteArray::fromBase64(to_install[1]);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
204 QVERIFY(!installedCertsTB.contains(bai));
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
205
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
206 QVERIFY((size_t)installedCertsTB.size() == strv_length(to_install) - 1);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
207
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
208 for (int i = 0; to_install[i]; i++) {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
209 if (i == 1) {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
210 continue;
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
211 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
212 QByteArray bai = QByteArray::fromBase64(to_install[i]);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
213 QVERIFY(installedCertsTB.contains(bai));
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
214 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
215 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
216
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
217 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
218 /* Readd all certificates check for duplication*/
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
219 QVERIFY(write_stores_nss(to_install, NULL) == 0);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
220
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
221 QList<QByteArray> installedCertsFF = get_nss_certs(&ffNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
222 QList<QByteArray> installedCertsTB = get_nss_certs(&tbNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
223
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
224 QVERIFY(installedCertsFF == installedCertsTB);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
225
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
226 QVERIFY((size_t)installedCertsTB.size() == strv_length(to_install));
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
227
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
228 for (int i = 0; to_install[i]; i++) {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
229 QByteArray bai = QByteArray::fromBase64(to_install[i]);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
230 QVERIFY(installedCertsTB.contains(bai));
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
231 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
232 }
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
233
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
234 {
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
235 /* Remove all certificates */
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
236 QVERIFY(write_stores_nss(NULL, to_install) == 0);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
237
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
238 QList<QByteArray> installedCertsFF = get_nss_certs(&ffNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
239 QList<QByteArray> installedCertsTB = get_nss_certs(&tbNSSDir);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
240
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
241 QVERIFY(installedCertsFF == installedCertsTB);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
242
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
243 QVERIFY(installedCertsTB.size() == 0);
2fd69803d219 Complete InstRemove NSS test
Andre Heinecke <andre.heinecke@intevation.de>
parents: 305
diff changeset
244 }
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
245 }
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
246
492
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
247 void NSSTest::benchmarkInstall()
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
248 {
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
249 char ** to_install = NULL,
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
250 ** to_remove = NULL;
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
251
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
252 QList<Certificate> instList;
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
253
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
254 /* Install all certificates */
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
255 foreach (const Certificate &cert, validList.getCertificates()) {
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
256 if (!cert.isInstallCert())
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
257 continue;
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
258 instList << cert;
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
259 strv_append (&to_install, cert.base64Line().toLatin1().constData() + 2,
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
260 cert.base64Line().size() - 2);
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
261 }
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
262 QVERIFY((size_t) instList.size() == strv_length(to_install));
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
263 QVERIFY(strv_length(to_install) != 0);
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
264
534
c262ee333c56 Only benchmark nss once
Andre Heinecke <aheinecke@intevation.de>
parents: 492
diff changeset
265 QBENCHMARK_ONCE {
492
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
266 write_stores_nss(to_install, to_remove);
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
267 }
dcb014e7d32f Add NSSShared to test environment and create benchmark
Andre Heinecke <aheinecke@intevation.de>
parents: 477
diff changeset
268 }
1060
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 830
diff changeset
269
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 830
diff changeset
270 bool g_debug = true;
317ee9dc4684 (issue46) Make debug output optional in cinst and mozilla and propagate its setting.
Andre Heinecke <andre.heinecke@intevation.de>
parents: 830
diff changeset
271
304
eecc06f714fd Add first nsstest.
Andre Heinecke <andre.heinecke@intevation.de>
parents:
diff changeset
272 QTEST_GUILESS_MAIN (NSSTest);

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