Mercurial > trustbridge
view ui/tests/downloadertest.cpp @ 48:3f8c2d46ded6
Add test for no connection handling
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Mon, 17 Mar 2014 11:20:37 +0000 |
parents | 7e37c6033c81 |
children | a7b8cb29f1f6 |
line wrap: on
line source
#include "downloadertest.h" #include "downloader.h" #include <QTextStream> #include <QFile> #include <QVariant> #include "unistd.h" void DownloaderTest::startServer(QString additionalOptions) { QFile serverConfig(serverConfigDir.path() + "/" + "hiawatha.conf"); QFile mimeConfig(serverConfigDir.path() + "/" + "mimetype.conf"); if (serverProc.state() == QProcess::Running) { serverProc.close(); } serverConfig.open(QIODevice::WriteOnly); mimeConfig.open(QIODevice::WriteOnly); mimeConfig.close(); /* just an empty file */ QTextStream configStream(&serverConfig); qDebug() << "Config file name: " << serverConfig.fileName(); configStream << "Binding { " << endl << "Port = 44443 " << endl << "SSLcertFile = " << SOURCE_DIR << "/data/valid_ssl_bp_priv.pem" << endl << "Interface = 127.0.0.1" << endl << "}" << endl << "Hostname = 127.0.0.1" << endl << "WebsiteRoot = " << SOURCE_DIR << "/data" << endl; configStream.flush(); serverConfig.close(); serverProc.start(); serverProc.waitForStarted(); } void DownloaderTest::initTestCase() { QStringList arguments; serverProc.setProgram(HIAWATHA_EXECUTABLE); arguments << "-d" << "-c" << serverConfigDir.path(); serverProc.setArguments(arguments); qRegisterMetaType<SSLConnection::ErrorCode>("SSLConnection::ErrorCode"); startServer(); QTest::qWait(1000); /* Wait for the server to settle */ } void DownloaderTest::downloaderError(const QString &message, SSLConnection::ErrorCode error) { qDebug() << "Downloader Error: " << error << " Msg: " << message; } bool filesEqual(QString filename1, QString filename2) { bool retval = false; QFile file1(filename1); QFile file2(filename2); file1.open(QIODevice::ReadOnly); file2.open(QIODevice::ReadOnly); retval = (file1.readAll() == file2.readAll()); file1.close(); file2.close(); return retval; } void DownloaderTest::testNoConnection() { Downloader* downloader = new Downloader(this, QString::fromLatin1("https://foobar.intevation.de")); QSignalSpy newListAvailable(downloader, SIGNAL(newListAvailable(const QString&, const QDateTime&))); QSignalSpy newSoftwareAvailable(downloader, SIGNAL(newSoftwareAvailable(const QString&, const QDateTime&))); QSignalSpy errors(downloader, SIGNAL(error(const QString &, SSLConnection::ErrorCode))); downloader->start(); int waited = 0; while (newListAvailable.count() == 0 && errors.count() == 0 && waited < 20) { QTest::qWait(200); waited++; } QVERIFY(waited != 20); QList<QVariant> arguments = errors.takeFirst(); int error = arguments.at(1).toInt(); QVERIFY(error == SSLConnection::NoConnection); } void DownloaderTest::testNewList() { QFile validCert(QString::fromLatin1(SOURCE_DIR) + "/data/valid_ssl_bp.pem"); validCert.open(QIODevice::ReadOnly); Downloader* downloader = new Downloader(this, QString::fromLatin1("https://localhost:44443"), validCert.readAll(), QDateTime::currentDateTime(), // Last installed SW QDateTime::fromString("2010", "YYYY"), "/random_2MB", "/list-valid.txt"); validCert.close(); QSignalSpy newListAvailable(downloader, SIGNAL(newListAvailable(const QString&, const QDateTime&))); QSignalSpy newSoftwareAvailable(downloader, SIGNAL(newSoftwareAvailable(const QString&, const QDateTime&))); QSignalSpy errors(downloader, SIGNAL(error(const QString &, SSLConnection::ErrorCode))); connect(downloader, SIGNAL(error(const QString &, SSLConnection::ErrorCode)), this, SLOT(downloaderError(const QString &, SSLConnection::ErrorCode))); downloader->start(); int waited = 0; while (newListAvailable.count() == 0 && errors.count() == 0 && waited < 20) { QTest::qWait(200); waited++; } QVERIFY(waited != 20); QVERIFY(newListAvailable.count() == 1); QVERIFY(newSoftwareAvailable.count() == 0); QVERIFY(errors.count() == 0); QList<QVariant> arguments = newListAvailable.takeFirst(); QVERIFY(filesEqual(QString::fromLatin1(SOURCE_DIR) + "/data/list-valid.txt", arguments.at(0).toString())); delete downloader; } void DownloaderTest::cleanupTestCase() { if (serverProc.state() == QProcess::Running) { serverProc.close(); } } QTEST_GUILESS_MAIN (DownloaderTest);