summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-08-10 14:03:13 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2021-08-16 12:48:51 +0300
commit2979370041ce9ba09194e9acce318054b833cf9f (patch)
tree77446ce9358febea5131ff2a18c73cdc350ef59f /tests
parent284fb7d87bc1f017c3f04e703749b367b24e505f (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.txt2
-rw-r--r--tests/auto/tools/repotest/packages_new/C/meta/package.xml8
-rw-r--r--tests/auto/tools/repotest/settings.qrc2
-rw-r--r--tests/auto/tools/repotest/tst_repotest.cpp92
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;