diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2021-11-12 10:06:42 +0200 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2021-11-12 10:06:42 +0200 |
commit | 8feea98f9c51efa4effa37e86d02ffcc44961709 (patch) | |
tree | 8eeaf8035cd77ba15efca2431a1599848d1d150b /tests | |
parent | 3ad787d0dd580a8cfb37f4e56b55f1889e24727b (diff) | |
parent | e0b1a21917d052919bfda6f49980a6a7afd3998b (diff) |
Merge remote-tracking branch 'origin/4.2'
Change-Id: Ib519ee5a92064a033f20609c95515dec45932cac
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/installer/cliinterface/tst_cliinterface.cpp | 112 | ||||
-rw-r--r-- | tests/auto/installer/libarchivearchive/tst_libarchivearchive.cpp | 68 |
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; |