Mercurial > trustbridge
annotate ui/tests/downloadertest.cpp @ 49:c389915fd55e
Add an RSA key for testing
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Mon, 17 Mar 2014 11:26:23 +0000 |
parents | 3f8c2d46ded6 |
children | a7b8cb29f1f6 |
rev | line source |
---|---|
43 | 1 #include "downloadertest.h" |
2 #include "downloader.h" | |
3 | |
4 #include <QTextStream> | |
5 #include <QFile> | |
48
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
6 #include <QVariant> |
43 | 7 #include "unistd.h" |
8 | |
9 void DownloaderTest::startServer(QString additionalOptions) | |
10 { | |
11 QFile serverConfig(serverConfigDir.path() + "/" + "hiawatha.conf"); | |
12 QFile mimeConfig(serverConfigDir.path() + "/" + "mimetype.conf"); | |
13 if (serverProc.state() == QProcess::Running) { | |
14 serverProc.close(); | |
15 } | |
16 serverConfig.open(QIODevice::WriteOnly); | |
17 mimeConfig.open(QIODevice::WriteOnly); | |
18 mimeConfig.close(); /* just an empty file */ | |
19 | |
20 QTextStream configStream(&serverConfig); | |
21 qDebug() << "Config file name: " << serverConfig.fileName(); | |
22 configStream << | |
23 "Binding { " << endl << | |
24 "Port = 44443 " << endl << | |
25 "SSLcertFile = " << SOURCE_DIR << | |
26 "/data/valid_ssl_bp_priv.pem" << endl << | |
27 "Interface = 127.0.0.1" << endl << | |
28 "}" << endl << | |
29 "Hostname = 127.0.0.1" << endl << | |
46
d28e2624c1d5
Reset connection before the next request.
Andre Heinecke <aheinecke@intevation.de>
parents:
45
diff
changeset
|
30 "WebsiteRoot = " << SOURCE_DIR << "/data" << endl; |
43 | 31 configStream.flush(); |
32 | |
33 serverConfig.close(); | |
34 serverProc.start(); | |
35 serverProc.waitForStarted(); | |
36 } | |
37 | |
38 void DownloaderTest::initTestCase() { | |
39 QStringList arguments; | |
40 serverProc.setProgram(HIAWATHA_EXECUTABLE); | |
41 arguments << "-d" << "-c" << serverConfigDir.path(); | |
42 serverProc.setArguments(arguments); | |
45
c6125d73faf4
Move SSLConnection into it's own class
Andre Heinecke <aheinecke@intevation.de>
parents:
43
diff
changeset
|
43 qRegisterMetaType<SSLConnection::ErrorCode>("SSLConnection::ErrorCode"); |
43 | 44 startServer(); |
45 QTest::qWait(1000); /* Wait for the server to settle */ | |
46 } | |
47 | |
45
c6125d73faf4
Move SSLConnection into it's own class
Andre Heinecke <aheinecke@intevation.de>
parents:
43
diff
changeset
|
48 void DownloaderTest::downloaderError(const QString &message, SSLConnection::ErrorCode error) |
43 | 49 { |
50 qDebug() << "Downloader Error: " << error << " Msg: " << message; | |
51 } | |
52 | |
47
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
53 bool filesEqual(QString filename1, QString filename2) |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
54 { |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
55 bool retval = false; |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
56 QFile file1(filename1); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
57 QFile file2(filename2); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
58 file1.open(QIODevice::ReadOnly); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
59 file2.open(QIODevice::ReadOnly); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
60 |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
61 retval = (file1.readAll() == file2.readAll()); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
62 file1.close(); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
63 file2.close(); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
64 return retval; |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
65 } |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
66 |
48
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
67 void DownloaderTest::testNoConnection() |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
68 { |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
69 Downloader* downloader = new Downloader(this, |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
70 QString::fromLatin1("https://foobar.intevation.de")); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
71 QSignalSpy newListAvailable(downloader, |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
72 SIGNAL(newListAvailable(const QString&, const QDateTime&))); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
73 QSignalSpy newSoftwareAvailable(downloader, |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
74 SIGNAL(newSoftwareAvailable(const QString&, const QDateTime&))); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
75 QSignalSpy errors(downloader, SIGNAL(error(const QString &, |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
76 SSLConnection::ErrorCode))); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
77 downloader->start(); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
78 |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
79 int waited = 0; |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
80 while (newListAvailable.count() == 0 && |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
81 errors.count() == 0 && waited < 20) { |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
82 QTest::qWait(200); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
83 waited++; |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
84 } |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
85 QVERIFY(waited != 20); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
86 |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
87 QList<QVariant> arguments = errors.takeFirst(); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
88 |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
89 int error = arguments.at(1).toInt(); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
90 |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
91 QVERIFY(error == SSLConnection::NoConnection); |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
92 } |
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
93 |
43 | 94 void DownloaderTest::testNewList() |
95 { | |
96 QFile validCert(QString::fromLatin1(SOURCE_DIR) + | |
97 "/data/valid_ssl_bp.pem"); | |
98 validCert.open(QIODevice::ReadOnly); | |
99 | |
100 Downloader* downloader = new Downloader(this, | |
101 QString::fromLatin1("https://localhost:44443"), | |
102 validCert.readAll(), | |
103 QDateTime::currentDateTime(), // Last installed SW | |
104 QDateTime::fromString("2010", "YYYY"), | |
46
d28e2624c1d5
Reset connection before the next request.
Andre Heinecke <aheinecke@intevation.de>
parents:
45
diff
changeset
|
105 "/random_2MB", |
d28e2624c1d5
Reset connection before the next request.
Andre Heinecke <aheinecke@intevation.de>
parents:
45
diff
changeset
|
106 "/list-valid.txt"); |
43 | 107 validCert.close(); |
108 | |
109 QSignalSpy newListAvailable(downloader, | |
110 SIGNAL(newListAvailable(const QString&, const QDateTime&))); | |
111 QSignalSpy newSoftwareAvailable(downloader, | |
112 SIGNAL(newSoftwareAvailable(const QString&, const QDateTime&))); | |
113 QSignalSpy errors(downloader, SIGNAL(error(const QString &, | |
45
c6125d73faf4
Move SSLConnection into it's own class
Andre Heinecke <aheinecke@intevation.de>
parents:
43
diff
changeset
|
114 SSLConnection::ErrorCode))); |
c6125d73faf4
Move SSLConnection into it's own class
Andre Heinecke <aheinecke@intevation.de>
parents:
43
diff
changeset
|
115 connect(downloader, SIGNAL(error(const QString &, SSLConnection::ErrorCode)), |
c6125d73faf4
Move SSLConnection into it's own class
Andre Heinecke <aheinecke@intevation.de>
parents:
43
diff
changeset
|
116 this, SLOT(downloaderError(const QString &, SSLConnection::ErrorCode))); |
43 | 117 |
118 downloader->start(); | |
119 | |
120 int waited = 0; | |
121 while (newListAvailable.count() == 0 && | |
122 errors.count() == 0 && waited < 20) { | |
48
3f8c2d46ded6
Add test for no connection handling
Andre Heinecke <aheinecke@intevation.de>
parents:
47
diff
changeset
|
123 QTest::qWait(200); |
43 | 124 waited++; |
125 } | |
126 QVERIFY(waited != 20); | |
127 QVERIFY(newListAvailable.count() == 1); | |
128 QVERIFY(newSoftwareAvailable.count() == 0); | |
129 QVERIFY(errors.count() == 0); | |
47
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
130 |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
131 QList<QVariant> arguments = newListAvailable.takeFirst(); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
132 |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
133 QVERIFY(filesEqual(QString::fromLatin1(SOURCE_DIR) + "/data/list-valid.txt", |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
134 arguments.at(0).toString())); |
7e37c6033c81
Verify that the downloaded file matches the served one
Andre Heinecke <aheinecke@intevation.de>
parents:
46
diff
changeset
|
135 |
43 | 136 delete downloader; |
137 } | |
138 | |
139 void DownloaderTest::cleanupTestCase() { | |
140 if (serverProc.state() == QProcess::Running) { | |
141 serverProc.close(); | |
142 } | |
143 } | |
144 | |
145 QTEST_GUILESS_MAIN (DownloaderTest); | |
146 |