summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools/repotest/tst_repotest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/tools/repotest/tst_repotest.cpp')
-rw-r--r--tests/auto/tools/repotest/tst_repotest.cpp159
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)