diff options
Diffstat (limited to 'tests/auto/installer/clientserver/tst_clientserver.cpp')
-rw-r--r-- | tests/auto/installer/clientserver/tst_clientserver.cpp | 326 |
1 files changed, 326 insertions, 0 deletions
diff --git a/tests/auto/installer/clientserver/tst_clientserver.cpp b/tests/auto/installer/clientserver/tst_clientserver.cpp new file mode 100644 index 000000000..7b1764285 --- /dev/null +++ b/tests/auto/installer/clientserver/tst_clientserver.cpp @@ -0,0 +1,326 @@ +/************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include <protocol.h> +#include <qprocesswrapper.h> +#include <qsettingswrapper.h> +#include <remoteclient.h> +#include <remotefileengine.h> +#include <remoteserver.h> + +#include <QHostAddress> +#include <QSettings> +#include <QTcpSocket> +#include <QTemporaryFile> +#include <QTest> +#include <QSignalSpy> + +using namespace QInstaller; + +class tst_ClientServer : public QObject +{ + Q_OBJECT + +private slots: + void testServerConnection() + { + RemoteServer server; + server.init(39999, QHostAddress::LocalHost, Protocol::Mode::Debug); + server.start(); + + QTcpSocket socket; + socket.connectToHost(QHostAddress::LocalHost, 39999); + QVERIFY2(socket.waitForConnected(), "Could not connect to server."); + } + + void testClientConnection() + { + RemoteServer server; + server.init(39999, QHostAddress::LocalHost, Protocol::Mode::Debug); + server.start(); + + QTcpSocket socket; + RemoteClient::instance().init(39999, QHostAddress::LocalHost, Protocol::Mode::Debug); + QVERIFY2(RemoteClient::instance().connect(&socket), "Could not connect to server."); + } + + void testQSettingsWrapper() + { + RemoteServer server; + server.init(39999, QHostAddress::LocalHost, Protocol::Mode::Debug); + server.start(); + + QSettingsWrapper wrapper("digia", "clientserver"); + QCOMPARE(wrapper.isConnectedToServer(), false); + wrapper.clear(); + QCOMPARE(wrapper.isConnectedToServer(), true); + wrapper.sync(); + wrapper.setFallbacksEnabled(false); + + QSettings settings("digia", "clientserver"); + settings.setFallbacksEnabled(false); + + QCOMPARE(settings.fileName(), wrapper.fileName()); + QCOMPARE(int(settings.format()), int(wrapper.format())); + QCOMPARE(int(settings.scope()), int(wrapper.scope())); + QCOMPARE(settings.organizationName(), wrapper.organizationName()); + QCOMPARE(settings.applicationName(), wrapper.applicationName()); + QCOMPARE(settings.fallbacksEnabled(), wrapper.fallbacksEnabled()); + + wrapper.setValue("key", "value"); + wrapper.setValue("contains", "value"); + wrapper.sync(); + + QCOMPARE(wrapper.value("key").toString(), QLatin1String("value")); + QCOMPARE(settings.value("key").toString(), QLatin1String("value")); + + QCOMPARE(wrapper.contains("contains"), true); + QCOMPARE(settings.contains("contains"), true); + wrapper.remove("contains"); + wrapper.sync(); + QCOMPARE(wrapper.contains("contains"), false); + QCOMPARE(settings.contains("contains"), false); + + wrapper.clear(); + wrapper.sync(); + QCOMPARE(wrapper.contains("key"), false); + QCOMPARE(settings.contains("key"), false); + + wrapper.beginGroup("group"); + wrapper.setValue("key", "value"); + wrapper.endGroup(); + wrapper.sync(); + + wrapper.beginGroup("group"); + settings.beginGroup("group"); + QCOMPARE(wrapper.value("key").toString(), QLatin1String("value")); + QCOMPARE(settings.value("key").toString(), QLatin1String("value")); + QCOMPARE(wrapper.group(), QLatin1String("group")); + QCOMPARE(settings.group(), QLatin1String("group")); + settings.endGroup(); + wrapper.endGroup(); + + wrapper.beginWriteArray("array"); + wrapper.setArrayIndex(0); + wrapper.setValue("key", "value"); + wrapper.endArray(); + wrapper.sync(); + + wrapper.beginReadArray("array"); + settings.beginReadArray("array"); + wrapper.setArrayIndex(0); + settings.setArrayIndex(0); + QCOMPARE(wrapper.value("key").toString(), QLatin1String("value")); + QCOMPARE(settings.value("key").toString(), QLatin1String("value")); + settings.endArray(); + wrapper.endArray(); + + wrapper.setValue("fridge/color", 3); + wrapper.setValue("fridge/size", QSize(32, 96)); + wrapper.setValue("sofa", true); + wrapper.setValue("tv", false); + + wrapper.remove("group"); + wrapper.remove("array"); + wrapper.sync(); + + QStringList keys = wrapper.allKeys(); + QCOMPARE(keys.count(), 4); + QCOMPARE(keys.contains("fridge/color"), true); + QCOMPARE(keys.contains("fridge/size"), true); + QCOMPARE(keys.contains("sofa"), true); + QCOMPARE(keys.contains("tv"), true); + + wrapper.beginGroup("fridge"); + keys = wrapper.allKeys(); + QCOMPARE(keys.count(), 2); + QCOMPARE(keys.contains("color"), true); + QCOMPARE(keys.contains("size"), true); + wrapper.endGroup(); + + keys = wrapper.childKeys(); + QCOMPARE(keys.count(), 2); + QCOMPARE(keys.contains("sofa"), true); + QCOMPARE(keys.contains("tv"), true); + + wrapper.beginGroup("fridge"); + keys = wrapper.childKeys(); + QCOMPARE(keys.count(), 2); + QCOMPARE(keys.contains("color"), true); + QCOMPARE(keys.contains("size"), true); + wrapper.endGroup(); + + QStringList groups = wrapper.childGroups(); + QCOMPARE(groups.count(), 1); + QCOMPARE(groups.contains("fridge"), true); + + wrapper.beginGroup("fridge"); + groups = wrapper.childGroups(); + QCOMPARE(groups.count(), 0); + wrapper.endGroup(); + } + + void testQProcessWrapper() + { + RemoteServer server; + server.init(39999, QHostAddress::LocalHost, Protocol::Mode::Debug); + server.start(); + + { + QProcess process; + QProcessWrapper wrapper; + + QCOMPARE(wrapper.isConnectedToServer(), false); + QCOMPARE(int(wrapper.state()), int(QProcessWrapper::NotRunning)); + QCOMPARE(wrapper.isConnectedToServer(), true); + + QCOMPARE(process.workingDirectory(), wrapper.workingDirectory()); + process.setWorkingDirectory(QDir::tempPath()); + wrapper.setWorkingDirectory(QDir::tempPath()); + QCOMPARE(process.workingDirectory(), wrapper.workingDirectory()); + + QCOMPARE(process.environment(), wrapper.environment()); + process.setEnvironment(QProcess::systemEnvironment()); + wrapper.setEnvironment(QProcess::systemEnvironment()); + QCOMPARE(process.environment(), wrapper.environment()); + + QCOMPARE(int(process.readChannel()), int(wrapper.readChannel())); + process.setReadChannel(QProcess::StandardError); + wrapper.setReadChannel(QProcessWrapper::StandardError); + QCOMPARE(int(process.readChannel()), int(wrapper.readChannel())); + + QCOMPARE(int(process.processChannelMode()), int(wrapper.processChannelMode())); + process.setProcessChannelMode(QProcess::ForwardedChannels); + wrapper.setProcessChannelMode(QProcessWrapper::ForwardedChannels); + QCOMPARE(int(process.processChannelMode()), int(wrapper.processChannelMode())); + } + + { + QProcessWrapper wrapper; + + QCOMPARE(wrapper.isConnectedToServer(), false); + QCOMPARE(int(wrapper.exitCode()), 0); + QCOMPARE(wrapper.isConnectedToServer(), true); + + QCOMPARE(int(wrapper.state()), int(QProcessWrapper::NotRunning)); + QCOMPARE(int(wrapper.exitStatus()), int(QProcessWrapper::NormalExit)); + + QString fileName; + { + QTemporaryFile file(QDir::tempPath() + +#ifdef Q_OS_WIN + QLatin1String("/XXXXXX.bat") +#else + QLatin1String("/XXXXXX.sh") +#endif + ); + file.setAutoRemove(false); + QCOMPARE(file.open(), true); +#ifdef Q_OS_WIN + file.write("@echo off\necho Mega test output!"); +#else + file.write("#!/bin/bash\necho Mega test output!"); +#endif + file.setPermissions(file.permissions() | QFile::ExeOther | QFile::ExeGroup + | QFile::ExeUser); + fileName = file.fileName(); + } + + QSignalSpy spy(&wrapper, SIGNAL(started())); + QSignalSpy spy2(&wrapper, SIGNAL(finished(int))); + QSignalSpy spy3(&wrapper, SIGNAL(finished(int, QProcess::ExitStatus))); + +#ifdef Q_OS_WIN + wrapper.start(fileName); +#else + wrapper.start("sh", QStringList() << fileName); +#endif + QCOMPARE(wrapper.waitForStarted(), true); + QCOMPARE(int(wrapper.state()), int(QProcessWrapper::Running)); + QCOMPARE(wrapper.waitForFinished(), true); + QCOMPARE(int(wrapper.state()), int(QProcessWrapper::NotRunning)); + QCOMPARE(wrapper.readAll().trimmed(), QByteArray("Mega test output!")); + + QTest::qWait(500); + + QCOMPARE(spy.count(), 1); + QCOMPARE(spy2.count(), 1); + QList<QVariant> arguments = spy2.takeFirst(); + QCOMPARE(arguments.first().toInt(), 0); + + QCOMPARE(spy3.count(), 1); + arguments = spy3.takeFirst(); + QCOMPARE(arguments.first().toInt(), 0); + QCOMPARE(arguments.last().toInt(), int(QProcessWrapper::NormalExit)); + + QFile::remove(fileName); + } + } + + void testRemoteFileEngine() + { + RemoteServer server; + server.init(39999, QHostAddress::LocalHost, Protocol::Mode::Debug); + server.start(); + + QString filename; + { + QTemporaryFile file; + file.setAutoRemove(false); + QCOMPARE(file.open(), true); + file.write(QProcess::systemEnvironment().join(QLatin1String("\n")).toLocal8Bit()); + filename = file.fileName(); + } + + RemoteFileEngineHandler handler; + + QFile file; + file.setFileName(filename); + file.open(QIODevice::ReadWrite); + const QByteArray ba = file.readLine(); + file.seek(0); + QCOMPARE(file.atEnd(), false); + + QByteArray ba2(32 * 1024 * 1024, '\0'); + file.readLine(ba2.data(), ba2.size()); + + file.resize(0); + file.write(QProcess::systemEnvironment().join(QLatin1String("\n")).toLocal8Bit()); + QCOMPARE(file.atEnd(), true); + } +}; + +QTEST_MAIN(tst_ClientServer) + +#include "tst_clientserver.moc" |