diff options
Diffstat (limited to 'tests/auto/tools/repotest/tst_repotest.cpp')
-rw-r--r-- | tests/auto/tools/repotest/tst_repotest.cpp | 159 |
1 files changed, 113 insertions, 46 deletions
diff --git a/tests/auto/tools/repotest/tst_repotest.cpp b/tests/auto/tools/repotest/tst_repotest.cpp index 02594f400..f1c0ae9dd 100644 --- a/tests/auto/tools/repotest/tst_repotest.cpp +++ b/tests/auto/tools/repotest/tst_repotest.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2021 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. @@ -30,6 +30,11 @@ #include <repositorygen.h> #include <repositorygen.cpp> #include <init.h> +#include <archivefactory.h> + +#ifdef IFW_LIB7Z +#include <lib7z_facade.h> +#endif #include <QFile> #include <QTest> @@ -55,15 +60,12 @@ private: VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/B", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1"); } - } else { - QDir dir(m_repoInfo.repositoryDir + "/B"); - QVERIFY(!dir.exists()); } QTemporaryDir tmp; tmp.setAutoRemove(false); const QString tmpMetaDir = tmp.path(); QInstallerTools::createRepository(m_repoInfo, &m_packages, tmpMetaDir, createSplitMetadata, - createUnifiedMetadata); + createUnifiedMetadata, QLatin1String("7z")); QInstaller::removeDirectory(tmpMetaDir, true); } @@ -77,7 +79,7 @@ private: void initRepoUpdate() { clearData(); - m_repoInfo.packages << ":///packages_update"; + m_repoInfo.packages << "packages_update"; } void initRepoUpdateFromRepositories(const QStringList &repositories) @@ -95,12 +97,13 @@ private: QString existingUniteMeta7z = QInstallerTools::existingUniteMeta7z(m_repoInfo.repositoryDir); QCOMPARE(2, matches.count()); QCOMPARE(existingUniteMeta7z, matches.at(1)); - QFile file(m_repoInfo.repositoryDir + QDir::separator() + matches.at(1)); - QVERIFY(file.open(QIODevice::ReadOnly)); + QScopedPointer<AbstractArchive> file(ArchiveFactory::instance() + .create(m_repoInfo.repositoryDir + QDir::separator() + matches.at(1))); + QVERIFY(file->open(QIODevice::ReadOnly)); //We have script<version>.qs for package A in the unite metadata - QVector<Lib7z::File>::const_iterator fileIt; - const QVector<Lib7z::File> files = Lib7z::listArchive(&file); + QVector<ArchiveEntry>::const_iterator fileIt; + const QVector<ArchiveEntry> files = file->list(); for (fileIt = files.begin(); fileIt != files.end(); ++fileIt) { if (fileIt->isDirectory) continue; @@ -140,16 +143,13 @@ private: "MetadataName"); } - void ignoreMessagesForComponentHash(const QStringList &components, bool update) + void ignoreMessagesForComponentHash(const QStringList &components) { + QString packageDir = m_repoInfo.packages.first(); foreach (const QString component, components) { QString message = "Copying component data for \"%1\""; QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component))); - if (update) - message = "Compressing files found in data directory: (\":/packages_update/%1/data/%1_update.txt\")"; - else - message = "Compressing files found in data directory: (\":/packages/%1/data/%1.txt\")"; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component))); + QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Compressing files found in data directory: *")); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Hash is stored in *")); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Creating hash of archive *")); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Generated sha1 hash: *")); @@ -163,7 +163,7 @@ private: QString message = "Copying component data for \"%1\""; QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component))); foreach (const QString &fileName, contentFiles) { - message = "Copying file from \":///%5/%1/%2%4\" to \"%3/%1/%2%4\""; + message = "Copying file from \"%5/%1/%2%4\" to \"%3/%1/%2%4\""; QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component).arg(version) .arg(m_repoInfo.repositoryDir).arg(fileName).arg(repository))); } @@ -181,19 +181,15 @@ private: void ignoreMessagesForCopyMetadata(const QString &component, bool hasMeta, bool update) { - QString message; - if (update) - message = "Copy meta data for package \"%1\" using \":///packages_update/%1/meta/package.xml\""; - else - message = "Copy meta data for package \"%1\" using \":///packages/%1/meta/package.xml\""; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component))); + QString message = "Copy meta data for package \"%2\" using \"%1/%2/meta/package.xml\""; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.packages.first(), component))); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("calculate size of directory *")); if (hasMeta) { if (update) - message = "Copying associated \"script\" file \":///packages_update/%1/meta/script2.0.0.qs\""; + message = "Copying associated \"script\" file \"%1/%2/meta/script2.0.0.qs\""; else - message = "Copying associated \"script\" file \":///packages/%1/meta/script1.0.0.qs\""; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component))); + message = "Copying associated \"script\" file \"%1/%2/meta/script1.0.0.qs\""; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.packages.first(), component))); QTest::ignoreMessage(QtDebugMsg, "done."); } } @@ -218,16 +214,26 @@ private: QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Updating the metadata node with name *")); } - void ignoreMessageForCollectingPackages(const QString &versionA, const QString &versionB) + void ignoreMessageForCollectingPackages(const QString &versionA = QString(), + const QString &versionB = QString(), const QString &versionC = QString()) { QTest::ignoreMessage(QtDebugMsg, "Collecting information about available repository packages..."); QTest::ignoreMessage(QtDebugMsg, "Collecting information about available packages..."); - QTest::ignoreMessage(QtDebugMsg, "Found subdirectory \"A\""); - QString message = "- it provides the package \"A\" - \"%1\""; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(versionA))); - QTest::ignoreMessage(QtDebugMsg, "Found subdirectory \"B\""); - message = "- it provides the package \"B\" - \"%1\""; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(versionB))); + if (!versionA.isEmpty()) { + QTest::ignoreMessage(QtDebugMsg, "Found subdirectory \"A\""); + const QString message = "- it provides the package \"A\" - \"%1\""; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(versionA))); + } + if (!versionB.isEmpty()) { + QTest::ignoreMessage(QtDebugMsg, "Found subdirectory \"B\""); + const QString message = "- it provides the package \"B\" - \"%1\""; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(versionB))); + } + if (!versionC.isEmpty()) { + QTest::ignoreMessage(QtDebugMsg, "Found subdirectory \"C\""); + const QString message = "- it provides the package \"C\" - \"%1\""; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(versionC))); + } } void ignoreMessageForCollectingPackagesFromRepository(const QString &versionA, const QString &versionB) @@ -244,7 +250,7 @@ private: { ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); - ignoreMessagesForComponentHash(QStringList() << "A" << "B", true); + ignoreMessagesForComponentHash(QStringList() << "A" << "B"); ignoreMessagesForCopyMetadata("A", true, true); ignoreMessagesForCopyMetadata("B", false, true); } @@ -267,8 +273,6 @@ private: QVERIFY(dom.setContent(&file)); file.close(); QCOMPARE(dom.elementsByTagName("ContentSha1").count(), shaUpdateComponents); - VerifyInstaller::verifyFileContent(updatesXmlFile, - "<ContentSha1>059e5ed8cd3a1fbca08cccfa4075265192603e3f</ContentSha1>"); } private slots: @@ -279,16 +283,18 @@ private slots: m_repoInfo.repositoryDir = QInstallerTools::makePathAbsolute(QInstaller::generateTemporaryFileName()); m_tempDirDeleter.add(m_repoInfo.repositoryDir); - m_repoInfo.packages << ":///packages"; + m_repoInfo.packages << "packages"; - ignoreMessagesForComponentHash(QStringList() << "A" << "B", false); + ignoreMessagesForComponentHash(QStringList() << "A" << "B"); ignoreMessagesForCopyMetadata("A", true, false); //Only A has metadata ignoreMessagesForCopyMetadata("B", false, false); } void initTestCase() { +#ifdef IFW_LIB7Z Lib7z::initSevenZ(); +#endif } void testWithComponentMeta() @@ -350,7 +356,7 @@ private slots: initRepoUpdate(); ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); ignoreMessagesForComponentSha(QStringList() << "A", false); //Only A has update - ignoreMessagesForComponentHash(QStringList() << "A", true); + ignoreMessagesForComponentHash(QStringList() << "A"); ignoreMessagesForCopyMetadata("A", true, true); const QString &message = "Update component \"A\" in \"%1\" ."; QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); @@ -359,6 +365,44 @@ private slots: verifyComponentMetaUpdatesXml(); } + void testUpdateNewComponentsWithUniteMetadata() + { + ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); + ignoreMessagesForUniteMeta(false); + generateRepo(true, true, false); + verifyComponentRepository("1.0.0", "1.0.0", true); + + initRepoUpdate(); + ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); + ignoreMessagesForComponentSha(QStringList() << "A", false); //Only A has update + ignoreMessagesForComponentHash(QStringList() << "A"); + ignoreMessagesForCopyMetadata("A", true, true); + ignoreMessagesForUniteMeta(true); + const QString &message = "Update component \"A\" in \"%1\" ."; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); + generateRepo(true, true, true); + verifyComponentRepository("2.0.0", "1.0.0", true); + verifyUniteMetadata("2.0.0"); + } + + void testUpdateNewComponentsWithOnlyUniteMetadata() + { + ignoreMessagesForUniteMeta(false); + generateRepo(false, true, false); + verifyComponentRepository("1.0.0", "1.0.0", false); + + initRepoUpdate(); + ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); + ignoreMessagesForComponentHash(QStringList() << "A"); + ignoreMessagesForCopyMetadata("A", true, true); + ignoreMessagesForUniteMeta(true); + const QString &message = "Update component \"A\" in \"%1\" ."; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); + generateRepo(false, true, true); + verifyComponentRepository("2.0.0", "1.0.0", false); + verifyUniteMetadata("2.0.0"); + } + void testUpdateComponents() { ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); @@ -372,6 +416,29 @@ private slots: verifyComponentMetaUpdatesXml(); } + void testUpdateComponentsFromPartialPackageDir() + { + ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); + ignoreMessagesForUniteMeta(false); + generateRepo(true, true, false); + verifyComponentRepository("1.0.0", "1.0.0", true); + + clearData(); + m_repoInfo.packages << "packages_new"; + { // ignore messages + ignoreMessagesForUniteMeta(false); + ignoreMessageForCollectingPackages(QString(), QString(), "1.0.0"); + ignoreMessagesForComponentSha(QStringList() << "C", true); + ignoreMessagesForCopyMetadata("C", false, false); + ignoreMessagesForComponentHash(QStringList() << "C"); + } + generateRepo(true, true, false); + verifyComponentRepository("1.0.0", "1.0.0", true); + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/C", + QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1" << "1.0.0meta.7z"); + verifyUniteMetadata("1.0.0"); + } + void testUpdateComponentsWithUniteMetadata() { ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); @@ -395,7 +462,7 @@ private slots: initRepoUpdate(); ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); - ignoreMessagesForComponentHash(QStringList() << "A" << "B", true); + ignoreMessagesForComponentHash(QStringList() << "A" << "B"); ignoreMessagesForCopyMetadata("A", true, true); ignoreMessagesForCopyMetadata("B", false, true); ignoreMessagesForUniteMeta(true); @@ -410,7 +477,7 @@ private slots: generateRepo(true, false, false); verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepositories(QStringList() << ":///repository_component"); + initRepoUpdateFromRepositories(QStringList() << "repository_component"); ignoreMessageForCollectingRepository(QStringList() << "repository_component"); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"B\" - \"1.0.0\""); @@ -429,8 +496,8 @@ private slots: generateRepo(true, false, false); verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepositories(QStringList() << ":///test_package_versions/repository_1" - << ":///test_package_versions/repository_2" << ":///test_package_versions/repository_3"); + initRepoUpdateFromRepositories(QStringList() << "test_package_versions/repository_1" + << "test_package_versions/repository_2" << "test_package_versions/repository_3"); ignoreMessageForCollectingRepository(QStringList() << "repository_1" << "repository_2" << "repository_3"); @@ -459,7 +526,7 @@ private slots: generateRepo(true, true, false); verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepositories(QStringList() << ":///repository_componentAndUnite"); + initRepoUpdateFromRepositories(QStringList() << "repository_componentAndUnite"); ignoreMessageForCollectingRepository(QStringList() << "repository_componentAndUnite"); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"C\" - \"1.0.0\""); @@ -481,7 +548,7 @@ private slots: generateRepo(false, true, false); verifyComponentRepository("1.0.0", "1.0.0", false); - initRepoUpdateFromRepositories(QStringList() << ":///repository_unite"); + initRepoUpdateFromRepositories(QStringList() << "repository_unite"); ignoreMessageForCollectingRepository(QStringList() << "repository_unite"); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"C\" - \"1.0.0\""); @@ -507,7 +574,7 @@ private slots: private: QInstallerTools::RepositoryInfo m_repoInfo; QInstallerTools::PackageInfoVector m_packages; - TempDirDeleter m_tempDirDeleter; + TempPathDeleter m_tempDirDeleter; }; QTEST_MAIN(tst_repotest) |