summaryrefslogtreecommitdiffstats
path: root/tests/auto/installer/clientserver/tst_clientserver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/installer/clientserver/tst_clientserver.cpp')
-rw-r--r--tests/auto/installer/clientserver/tst_clientserver.cpp151
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);