diff options
Diffstat (limited to 'tests/auto/installer/clientserver/tst_clientserver.cpp')
-rw-r--r-- | tests/auto/installer/clientserver/tst_clientserver.cpp | 151 |
1 files changed, 146 insertions, 5 deletions
diff --git a/tests/auto/installer/clientserver/tst_clientserver.cpp b/tests/auto/installer/clientserver/tst_clientserver.cpp index 23442d5fa..7b3e65c4a 100644 --- a/tests/auto/installer/clientserver/tst_clientserver.cpp +++ b/tests/auto/installer/clientserver/tst_clientserver.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -26,12 +26,20 @@ ** **************************************************************************/ +#include "../shared/verifyinstaller.h" +#include "../shared/packagemanager.h" + #include <protocol.h> #include <qprocesswrapper.h> #include <qsettingswrapper.h> #include <remoteclient.h> #include <remotefileengine.h> #include <remoteserver.h> +#include <fileutils.h> + +#ifdef IFW_LIBARCHIVE +#include <libarchivewrapper_p.h> +#endif #include <QBuffer> #include <QSettings> @@ -44,6 +52,17 @@ using namespace QInstaller; +class MyRemoteObject : public RemoteObject +{ +public: + MyRemoteObject() + : RemoteObject(QLatin1String("MyRemoteObject")) {}; + + ~MyRemoteObject() = default; + + bool connectToServer() { return RemoteObject::connectToServer(); } +}; + class tst_ClientServer : public QObject { Q_OBJECT @@ -71,7 +90,7 @@ private: } private slots: - void initTestCase() + void init() { RemoteClient::instance().setActive(true); } @@ -262,8 +281,48 @@ private slots: } } + void testCreateDestroyRemoteObject() + { + RemoteServer server; + QString socketName = QUuid::createUuid().toString(); + server.init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Production); + server.start(); + + RemoteClient::instance().init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Debug, + Protocol::StartAs::User); + + // Look for warnings on connection and disconnection.. + qInstallMessageHandler(exitOnWarningMessageHandler); + + MyRemoteObject *object = new MyRemoteObject; + QVERIFY(!object->isConnectedToServer()); + delete object; + + object = new MyRemoteObject; + QVERIFY(object->connectToServer()); + QVERIFY(object->isConnectedToServer()); + delete object; + + object = new MyRemoteObject; + QVERIFY(object->connectToServer()); + QVERIFY(object->isConnectedToServer()); + + RemoteClient::instance().setActive(false); + QVERIFY(!object->isConnectedToServer()); + delete object; + } + + void testQSettingsWrapper_data() + { + QTest::addColumn<QSettings::Format>("format"); + QTest::newRow("Native format") << QSettings::NativeFormat; + QTest::newRow("INI format") << QSettings::IniFormat; + } + void testQSettingsWrapper() { + QFETCH(QSettings::Format, format); + RemoteServer server; QString socketName = QUuid::createUuid().toString(); server.init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Production); @@ -272,14 +331,15 @@ private slots: RemoteClient::instance().init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Debug, Protocol::StartAs::User); - QSettingsWrapper wrapper("digia", "clientserver"); + QSettingsWrapper wrapper(format, QSettingsWrapper::UserScope, "digia", "clientserver"); + QCOMPARE(wrapper.isConnectedToServer(), false); wrapper.clear(); QCOMPARE(wrapper.isConnectedToServer(), true); wrapper.sync(); wrapper.setFallbacksEnabled(false); - QSettings settings("digia", "clientserver"); + QSettings settings(format, QSettings::UserScope, "digia", "clientserver"); settings.setFallbacksEnabled(false); QCOMPARE(settings.fileName(), wrapper.fileName()); @@ -308,6 +368,29 @@ private slots: QCOMPARE(wrapper.contains("key"), false); QCOMPARE(settings.contains("key"), false); + const QDateTime dateTime = QDateTime::currentDateTimeUtc(); + // The wrapper does not support this method, but assume: + // QCOMPARE(wrapper.iniCodec(), QTextCodec::codecForName("UTF-8")); + wrapper.setValue("dateTime", dateTime); + wrapper.sync(); + QCOMPARE(wrapper.value("dateTime").toDateTime(), dateTime); + QCOMPARE(settings.value("dateTime").toDateTime(), dateTime); + + wrapper.remove("dateTime"); + wrapper.sync(); + QCOMPARE(wrapper.contains("dateTime"), false); + QCOMPARE(settings.contains("dateTime"), false); + + settings.setValue("dateTime", dateTime); + settings.sync(); + QCOMPARE(wrapper.value("dateTime").toDateTime(), dateTime); + QCOMPARE(settings.value("dateTime").toDateTime(), dateTime); + + settings.remove("dateTime"); + settings.sync(); + QCOMPARE(wrapper.contains("dateTime"), false); + QCOMPARE(settings.contains("dateTime"), false); + wrapper.beginGroup("group"); wrapper.setValue("key", "value"); wrapper.endGroup(); @@ -384,6 +467,9 @@ private slots: void testQProcessWrapper() { + #ifdef Q_OS_LINUX + QSKIP("This test failes in CI redhat"); + #endif RemoteServer server; QString socketName = QUuid::createUuid().toString(); server.init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Production); @@ -501,7 +587,7 @@ private slots: QFile file; file.setFileName(filename); file.open(QIODevice::ReadWrite); - const QByteArray ba = file.readLine(); + file.readLine(); file.seek(0); QCOMPARE(file.atEnd(), false); @@ -513,6 +599,61 @@ private slots: QCOMPARE(file.atEnd(), true); } + void testArchiveWrapper_data() + { + QTest::addColumn<QString>("suffix"); + QTest::newRow("ZIP archive") << ".zip"; + QTest::newRow("uncompressed tar archive") << ".tar"; + QTest::newRow("gzip compressed tar archive") << ".tar.gz"; + QTest::newRow("bzip2 compressed tar archive") << ".tar.bz2"; + QTest::newRow("xz compressed tar archive") << ".tar.xz"; + QTest::newRow("7zip archive") << ".7z"; + } + + void testArchiveWrapper() + { +#ifndef IFW_LIBARCHIVE + QSKIP("Installer Framework built without libarchive support"); +#else + QFETCH(QString, suffix); + + const QString archiveName = generateTemporaryFileName() + suffix; + const QString targetName = QDir::tempPath() + "/tst_archivewrapper/"; + + QTemporaryFile source; + source.open(); + source.write("Source File"); + source.setAutoRemove(false); + + RemoteServer server; + QString socketName = QUuid::createUuid().toString(); + server.init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Production); + server.start(); + + RemoteClient::instance().init(socketName, QLatin1String("SomeKey"), Protocol::Mode::Debug, + Protocol::StartAs::User); + + LibArchiveWrapperPrivate archive; + QCOMPARE(archive.isConnectedToServer(), false); + archive.setFilename(archiveName); + QCOMPARE(archive.isConnectedToServer(), true); + + QVERIFY(archive.open(QIODevice::ReadWrite)); + QVERIFY(archive.create(QStringList() << source.fileName())); + QVERIFY(QFileInfo::exists(archiveName)); + + QVERIFY(archive.extract(targetName, 1)); + const QString sourceFilename = QFileInfo(source.fileName()).fileName(); + QVERIFY(QFileInfo::exists(targetName + sourceFilename)); + VerifyInstaller::verifyFileContent(targetName + sourceFilename, source.readAll()); + archive.close(); + + QVERIFY(source.remove()); + QVERIFY(QFile::remove(archiveName)); + removeDirectory(targetName); +#endif + } + void cleanupTestCase() { RemoteClient::instance().setActive(false); |