diff options
author | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2021-08-10 14:03:13 +0300 |
---|---|---|
committer | Arttu Tarkiainen <arttu.tarkiainen@qt.io> | 2021-08-16 12:48:51 +0300 |
commit | 2979370041ce9ba09194e9acce318054b833cf9f (patch) | |
tree | 77446ce9358febea5131ff2a18c73cdc350ef59f /tests | |
parent | 284fb7d87bc1f017c3f04e703749b367b24e505f (diff) |
Repogen: Fix updating of repository from a partial package set directory
When collecting information about the paths to be compressed into
unified metadata, if the package directory used to update repository was
missing replacements for two or more components, it would reveal an
issue with the traversing of the existing repository directory.
Fix by adding the missing "cd up" after entering a component entry
directory. Add new test case.
Task-number: QTIFW-2287
Change-Id: Ica1228968398b6e987bdf89336f74f53fcd35d27
Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/tools/repotest/packages_new/C/data/C.txt | 2 | ||||
-rw-r--r-- | tests/auto/tools/repotest/packages_new/C/meta/package.xml | 8 | ||||
-rw-r--r-- | tests/auto/tools/repotest/settings.qrc | 2 | ||||
-rw-r--r-- | tests/auto/tools/repotest/tst_repotest.cpp | 92 |
4 files changed, 74 insertions, 30 deletions
diff --git a/tests/auto/tools/repotest/packages_new/C/data/C.txt b/tests/auto/tools/repotest/packages_new/C/data/C.txt new file mode 100644 index 000000000..b45c73606 --- /dev/null +++ b/tests/auto/tools/repotest/packages_new/C/data/C.txt @@ -0,0 +1,2 @@ +Example content for package C. + diff --git a/tests/auto/tools/repotest/packages_new/C/meta/package.xml b/tests/auto/tools/repotest/packages_new/C/meta/package.xml new file mode 100644 index 000000000..676f088be --- /dev/null +++ b/tests/auto/tools/repotest/packages_new/C/meta/package.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Package> + <DisplayName>C</DisplayName> + <Description>Example component C</Description> + <Version>1.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> +</Package> diff --git a/tests/auto/tools/repotest/settings.qrc b/tests/auto/tools/repotest/settings.qrc index e731af222..f1156e8c2 100644 --- a/tests/auto/tools/repotest/settings.qrc +++ b/tests/auto/tools/repotest/settings.qrc @@ -10,6 +10,8 @@ <file>packages_update/A/meta/script2.0.0.qs</file> <file>packages_update/B/data/B_update.txt</file> <file>packages_update/B/meta/package.xml</file> + <file>packages_new/C/data/C.txt</file> + <file>packages_new/C/meta/package.xml</file> <file>repository_component/A/2.0.0content.7z</file> <file>repository_component/A/2.0.0content.7z.sha1</file> <file>repository_component/A/2.0.0meta.7z</file> diff --git a/tests/auto/tools/repotest/tst_repotest.cpp b/tests/auto/tools/repotest/tst_repotest.cpp index 5aa614454..0e59dc786 100644 --- a/tests/auto/tools/repotest/tst_repotest.cpp +++ b/tests/auto/tools/repotest/tst_repotest.cpp @@ -50,8 +50,12 @@ private: (m_repositoryDirectories, &filteredPackages, filterType); m_packages.append(precompressedPackages); - QInstallerTools::PackageInfoVector preparedPackages = QInstallerTools::createListOfPackages(m_packagesDirectories, - &filteredPackages, filterType); + QStringList packageDirectories; + if (!m_packagesDirectory.isEmpty()) + packageDirectories << m_packagesDirectory; + + QInstallerTools::PackageInfoVector preparedPackages = QInstallerTools::createListOfPackages( + packageDirectories, &filteredPackages, filterType); m_packages.append(preparedPackages); if (updateNewComponents) @@ -72,12 +76,9 @@ private: VerifyInstaller::verifyFileExistence(m_repositoryDir + "/B", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1"); } - } else { - QDir dir(m_repositoryDir + "/B"); - QVERIFY(!dir.exists()); } QStringList directories; - directories.append(m_packagesDirectories); + directories.append(packageDirectories); directories.append(m_repositoryDirectories); QStringList unite7zFiles; @@ -120,7 +121,7 @@ private: void clearData() { generateTempMetaDir(); - m_packagesDirectories.clear(); + m_packagesDirectory.clear(); m_repositoryDirectories.clear(); m_packages.clear(); } @@ -128,7 +129,7 @@ private: void initRepoUpdate() { clearData(); - m_packagesDirectories << ":///packages_update"; + m_packagesDirectory = ":///packages_update"; } void initRepoUpdateFromRepository(const QString &repository) @@ -193,14 +194,16 @@ private: void ignoreMessagesForComponentHash(const QStringList &components, bool update) { + QString packageDir = m_packagesDirectory; + packageDir.remove("//"); // e.g. :///packages -> :/packages 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\")"; + message = "Compressing files found in data directory: (\"%1/%2/data/%2_update.txt\")"; else - message = "Compressing files found in data directory: (\":/packages/%1/data/%1.txt\")"; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component))); + message = "Compressing files found in data directory: (\"%1/%2/data/%2.txt\")"; + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(packageDir, component))); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Hash is stored in *")); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Creating hash of archive *")); QTest::ignoreMessage(QtDebugMsg, QRegularExpression("Generated sha1 hash: *")); @@ -232,19 +235,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_packagesDirectory, 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_packagesDirectory, component))); QTest::ignoreMessage(QtDebugMsg, "done."); } } @@ -269,16 +268,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) @@ -317,7 +326,7 @@ private slots: m_tempDirDeleter.add(m_repositoryDir); generateTempMetaDir(); - m_packagesDirectories << ":///packages"; + m_packagesDirectory = ":///packages"; ignoreMessagesForComponentHash(QStringList() << "A" << "B", false); ignoreMessagesForCopyMetadata("A", true, false); //Only A has metadata @@ -390,6 +399,29 @@ private slots: verifyComponentMetaUpdatesXml(); } + void testUpdateComponentsFromPartialPackageDir() + { + ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); + ignoreMessagesForUniteMeta(false); + generateRepo(true, true, false); + verifyComponentRepository("1.0.0",true); + + clearData(); + m_packagesDirectory = ":///packages_new"; + { // ignore messages + ignoreMessagesForUniteMeta(false); + ignoreMessageForCollectingPackages(QString(), QString(), "1.0.0"); + ignoreMessagesForComponentSha(QStringList() << "C", true); + ignoreMessagesForCopyMetadata("C", false, false); + ignoreMessagesForComponentHash(QStringList() << "C", false); + } + generateRepo(true, true, false); + verifyComponentRepository("1.0.0", true); + VerifyInstaller::verifyFileExistence(m_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); @@ -485,7 +517,7 @@ private slots: void cleanup() { m_tempDirDeleter.releaseAndDeleteAll(); - m_packagesDirectories.clear(); + m_packagesDirectory.clear(); m_packages.clear(); m_repositoryDirectories.clear(); } @@ -493,7 +525,7 @@ private slots: private: QString m_tmpMetaDir; QString m_repositoryDir; - QStringList m_packagesDirectories; + QString m_packagesDirectory; QStringList m_repositoryDirectories; QInstallerTools::PackageInfoVector m_packages; TempDirDeleter m_tempDirDeleter; |