summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-11-12 10:06:42 +0200
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-11-12 10:06:42 +0200
commit8feea98f9c51efa4effa37e86d02ffcc44961709 (patch)
tree8eeaf8035cd77ba15efca2431a1599848d1d150b /tests
parent3ad787d0dd580a8cfb37f4e56b55f1889e24727b (diff)
parente0b1a21917d052919bfda6f49980a6a7afd3998b (diff)
Merge remote-tracking branch 'origin/4.2'
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/installer/cliinterface/tst_cliinterface.cpp112
-rw-r--r--tests/auto/installer/libarchivearchive/tst_libarchivearchive.cpp68
2 files changed, 117 insertions, 63 deletions
diff --git a/tests/auto/installer/cliinterface/tst_cliinterface.cpp b/tests/auto/installer/cliinterface/tst_cliinterface.cpp
index d880310ac..25910cd9c 100644
--- a/tests/auto/installer/cliinterface/tst_cliinterface.cpp
+++ b/tests/auto/installer/cliinterface/tst_cliinterface.cpp
@@ -34,6 +34,9 @@
#include <QLoggingCategory>
#include <QTest>
+#include <iostream>
+#include <sstream>
+
using namespace QInstaller;
class tst_CLIInterface : public QObject
@@ -43,8 +46,7 @@ class tst_CLIInterface : public QObject
private slots:
void testListAvailablePackages()
{
- QString loggingRules = (QLatin1String("ifw.* = false\n"
- "ifw.package.* = true\n"));
+ QString loggingRules = (QLatin1String("ifw.* = false\n"));
QTest::ignoreMessage(QtDebugMsg, "Operations sanity check succeeded.");
@@ -52,61 +54,52 @@ private slots:
(m_installDir, ":///data/repository");
QLoggingCategory::setFilterRules(loggingRules);
+ auto func = &PackageManagerCore::listAvailablePackages;
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
- " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
- " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
- " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n"
- "</availablepackages>\n");
- core->listAvailablePackages(QLatin1String("."));
-
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
- " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
- "</availablepackages>\n");
- core->listAvailablePackages(QLatin1String("A"));
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
+ " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
+ " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
+ " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n"
+ "</availablepackages>\n"), func, QLatin1String("."), QHash<QString, QString>());
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
+ " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
+ "</availablepackages>\n"), func, QLatin1String("A"), QHash<QString, QString>());
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
- " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
- "</availablepackages>\n");
- core->listAvailablePackages(QLatin1String("A.*"));
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
+ " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
+ "</availablepackages>\n"), func, QLatin1String("A.*"), QHash<QString, QString>());
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
+ "</availablepackages>\n"), func, QLatin1String("^B"), QHash<QString, QString>());
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
- "</availablepackages>\n");
- core->listAvailablePackages(QLatin1String("^B"));
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
+ "</availablepackages>\n"), func, QLatin1String("^B.*"), QHash<QString, QString>());
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
- "</availablepackages>\n");
- core->listAvailablePackages(QLatin1String("^B.*"));
-
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n"
- "</availablepackages>\n");
- core->listAvailablePackages(QLatin1String("^C"));
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n"
+ "</availablepackages>\n"), func, QLatin1String("^C"), QHash<QString, QString>());
// Test with filters
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
- " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
- "</availablepackages>\n");
QHash<QString, QString> searchHash {
{ "Version", "1.0.2" },
{ "DisplayName", "A" }
};
- core->listAvailablePackages(QString(), searchHash);
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n"
+ " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n"
+ "</availablepackages>\n"), func, QString(), searchHash);
- QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n"
- " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
- "</availablepackages>\n");
searchHash.clear();
searchHash.insert("Default", "false");
- core->listAvailablePackages(QString(), searchHash);
+ verifyListPackagesMessage(core, QLatin1String("<availablepackages>\n"
+ " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n"
+ "</availablepackages>\n"), func, QString(), searchHash);
// Need to change rules here to catch messages
QLoggingCategory::setFilterRules("ifw.* = true\n");
@@ -190,11 +183,11 @@ private slots:
void testListInstalledPackages()
{
- QString loggingRules = (QLatin1String("ifw.* = false\n"
- "ifw.package.* = true\n"));
+ QString loggingRules = (QLatin1String("ifw.* = false\n"));
PackageManagerCore core;
core.setPackageManager();
QLoggingCategory::setFilterRules(loggingRules);
+ auto func = &PackageManagerCore::listInstalledPackages;
const QString testDirectory = QInstaller::generateTemporaryFileName();
QVERIFY(QDir().mkpath(testDirectory));
@@ -202,16 +195,14 @@ private slots:
core.setValue(scTargetDir, testDirectory);
- QTest::ignoreMessage(QtDebugMsg, "<localpackages>\n"
- " <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n"
- " <package name=\"B\" displayname=\"B Title\" version=\"1.0.0-1\"/>\n"
- "</localpackages>\n");
- core.listInstalledPackages();
+ verifyListPackagesMessage(&core, QLatin1String("<localpackages>\n"
+ " <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n"
+ " <package name=\"B\" displayname=\"B Title\" version=\"1.0.0-1\"/>\n"
+ "</localpackages>\n"), func, QString());
- QTest::ignoreMessage(QtDebugMsg, "<localpackages>\n"
- " <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n"
- "</localpackages>\n");
- core.listInstalledPackages(QLatin1String("A"));
+ verifyListPackagesMessage(&core, QLatin1String("<localpackages>\n"
+ " <package name=\"A\" displayname=\"A Title\" version=\"1.0.2-1\"/>\n"
+ "</localpackages>\n"), func, QLatin1String("A"));
QDir dir(testDirectory);
QVERIFY(dir.removeRecursively());
@@ -533,6 +524,21 @@ private slots:
}
private:
+ template <typename Func, typename... Args>
+ void verifyListPackagesMessage(PackageManagerCore *core, const QString &message,
+ Func func, Args... args)
+ {
+ std::ostringstream stream;
+ std::streambuf *buf = std::cout.rdbuf();
+ std::cout.rdbuf(stream.rdbuf());
+
+ (core->*func)(std::forward<Args>(args)...);
+
+ std::cout.rdbuf(buf);
+ QVERIFY(stream && stream.str() == message.toStdString());
+ }
+
+private:
QString m_installDir;
};
diff --git a/tests/auto/installer/libarchivearchive/tst_libarchivearchive.cpp b/tests/auto/installer/libarchivearchive/tst_libarchivearchive.cpp
index f12de22a4..a1f5a1994 100644
--- a/tests/auto/installer/libarchivearchive/tst_libarchivearchive.cpp
+++ b/tests/auto/installer/libarchivearchive/tst_libarchivearchive.cpp
@@ -26,6 +26,8 @@
**
**************************************************************************/
+#include "../shared/verifyinstaller.h"
+
#include <libarchivearchive.h>
#include <fileutils.h>
@@ -44,6 +46,7 @@ private slots:
void initTestCase()
{
m_file.path = "valid";
+ m_file.permissions_mode = 0666;
m_file.compressedSize = 0; // unused
m_file.uncompressedSize = 5242880;
m_file.isDirectory = false;
@@ -79,7 +82,7 @@ private slots:
QVector<ArchiveEntry> files = archive.list();
QCOMPARE(files.count(), 1);
- QVERIFY(entriesMatch(files.first(), m_file));
+ QCOMPARE(files.first(), m_file);
}
void testCreateArchive_data()
@@ -148,6 +151,60 @@ private slots:
QVERIFY(QFile(QDir::tempPath() + QString("/valid")).remove());
}
+ void testCreateExtractWithSymlink_data()
+ {
+ archiveSuffixesTestData();
+ }
+
+ void testCreateExtractWithSymlink()
+ {
+ QFETCH(QString, suffix);
+
+ const QString workingDir = generateTemporaryFileName() + "/";
+ const QString archiveName = workingDir + "archive" + suffix;
+ const QString targetName = workingDir + "target/";
+#ifdef Q_OS_WIN
+ const QString linkName = workingDir + "link.lnk";
+#else
+ const QString linkName = workingDir + "link";
+#endif
+
+ QVERIFY(QDir().mkpath(targetName));
+
+ QFile source(workingDir + "file");
+ QVERIFY(source.open(QIODevice::ReadWrite));
+ QVERIFY(source.write("Source File"));
+
+ // Creates a shortcut on Windows, a symbolic link on Unix
+ QVERIFY(QFile::link(source.fileName(), linkName));
+
+ LibArchiveArchive archive(archiveName);
+ QVERIFY(archive.open(QIODevice::ReadWrite));
+ QVERIFY(archive.create(QStringList() << source.fileName() << linkName));
+ QVERIFY(QFileInfo::exists(archiveName));
+
+ QVERIFY(archive.extract(targetName));
+ const QString sourceFilename = QFileInfo(source.fileName()).fileName();
+ const QString linkFilename = QFileInfo(linkName).fileName();
+ QVERIFY(QFileInfo::exists(targetName + sourceFilename));
+ QVERIFY(QFileInfo::exists(targetName + linkFilename));
+
+ VerifyInstaller::verifyFileContent(targetName + sourceFilename, source.readAll());
+ const QString sourceFilePath = workingDir + sourceFilename;
+ QCOMPARE(QFile::symLinkTarget(targetName + linkFilename), sourceFilePath);
+
+ archive.close();
+
+ QVERIFY(source.remove());
+ QVERIFY(QFile::remove(archiveName));
+ QVERIFY(QFile::remove(linkName));
+ QVERIFY(QFile::remove(targetName + sourceFilename));
+ QVERIFY(QFile::remove(targetName + linkFilename));
+
+ removeDirectory(targetName, true);
+ removeDirectory(workingDir, true);
+ }
+
private:
void archiveFilenamesTestData()
{
@@ -167,15 +224,6 @@ private:
QTest::newRow("xz compressed tar archive") << ".tar.xz";
}
- bool entriesMatch(const ArchiveEntry &lhs, const ArchiveEntry &rhs)
- {
- return lhs.path == rhs.path
- && lhs.utcTime == rhs.utcTime
- && lhs.isDirectory == rhs.isDirectory
- && lhs.compressedSize == rhs.compressedSize
- && lhs.uncompressedSize == rhs.uncompressedSize;
- }
-
QString tempSourceFile(const QByteArray &data, const QString &templateName = QString())
{
QTemporaryFile source;