diff options
Diffstat (limited to 'tests/auto/tools')
23 files changed, 250 insertions, 125 deletions
diff --git a/tests/auto/tools/repotest/settings.qrc b/tests/auto/tools/repotest/settings.qrc index e731af222..a0b5743fe 100644 --- a/tests/auto/tools/repotest/settings.qrc +++ b/tests/auto/tools/repotest/settings.qrc @@ -31,5 +31,29 @@ <file>repository_unite/C/1.0.0content.7z.sha1</file> <file>repository_unite/2020-11-10-0931_meta.7z</file> <file>repository_unite/Updates.xml</file> + + <file>test_package_versions/repository_1/A/2.0.0content.7z</file> + <file>test_package_versions/repository_1/A/2.0.0content.7z.sha1</file> + <file>test_package_versions/repository_1/A/2.0.0meta.7z</file> + <file>test_package_versions/repository_1/B/1.0.0content.7z</file> + <file>test_package_versions/repository_1/B/1.0.0content.7z.sha1</file> + <file>test_package_versions/repository_1/B/1.0.0meta.7z</file> + <file>test_package_versions/repository_1/Updates.xml</file> + + <file>test_package_versions/repository_2/A/1.0.0content.7z</file> + <file>test_package_versions/repository_2/A/1.0.0content.7z.sha1</file> + <file>test_package_versions/repository_2/A/1.0.0meta.7z</file> + <file>test_package_versions/repository_2/B/1.0.0content.7z</file> + <file>test_package_versions/repository_2/B/1.0.0content.7z.sha1</file> + <file>test_package_versions/repository_2/B/1.0.0meta.7z</file> + <file>test_package_versions/repository_2/Updates.xml</file> + + <file>test_package_versions/repository_3/A/1.0.0content.7z</file> + <file>test_package_versions/repository_3/A/1.0.0content.7z.sha1</file> + <file>test_package_versions/repository_3/A/1.0.0meta.7z</file> + <file>test_package_versions/repository_3/B/3.0.0content.7z</file> + <file>test_package_versions/repository_3/B/3.0.0content.7z.sha1</file> + <file>test_package_versions/repository_3/B/3.0.0meta.7z</file> + <file>test_package_versions/repository_3/Updates.xml</file> </qresource> </RCC> diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z Binary files differnew file mode 100644 index 000000000..46e2c9124 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f
\ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z Binary files differnew file mode 100644 index 000000000..af0863696 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..46e2c9124 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f
\ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z Binary files differnew file mode 100644 index 000000000..e5be1148e --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml b/tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml new file mode 100644 index 000000000..dfae8c8bd --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml @@ -0,0 +1,28 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>true</Checksum> + <PackageUpdate> + <Name>A</Name> + <DisplayName>A</DisplayName> + <Description>Example component A</Description> + <Version>2.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> + <Script>script2.0.0.qs</Script> + <UpdateFile UncompressedSize="40" CompressedSize="72" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>da6dae55a8cc3fb9f012e33fa7b9c187a823aa9a</SHA1> + </PackageUpdate> + <PackageUpdate> + <Name>B</Name> + <DisplayName>B</DisplayName> + <Description>Example component B</Description> + <Version>1.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> + <UpdateFile UncompressedSize="40" CompressedSize="72" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>d88b373458b4bbec38132692061bf1e7aa68e7f7</SHA1> + </PackageUpdate> +</Updates> diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..46e2c9124 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f
\ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z Binary files differnew file mode 100644 index 000000000..c4da482bf --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..46e2c9124 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f
\ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z Binary files differnew file mode 100644 index 000000000..e5be1148e --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml b/tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml new file mode 100644 index 000000000..ac12fba4b --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml @@ -0,0 +1,28 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>true</Checksum> + <PackageUpdate> + <Name>A</Name> + <DisplayName>A</DisplayName> + <Description>Example component A</Description> + <Version>1.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> + <Script>script1.0.0.qs</Script> + <UpdateFile UncompressedSize="40" CompressedSize="72" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>da6dae55a8cc3fb9f012e33fa7b9c187a823aa9a</SHA1> + </PackageUpdate> + <PackageUpdate> + <Name>B</Name> + <DisplayName>B</DisplayName> + <Description>Example component B</Description> + <Version>1.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> + <UpdateFile UncompressedSize="40" CompressedSize="72" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>d88b373458b4bbec38132692061bf1e7aa68e7f7</SHA1> + </PackageUpdate> +</Updates> diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..46e2c9124 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f
\ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z Binary files differnew file mode 100644 index 000000000..3706e8dd8 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z Binary files differnew file mode 100644 index 000000000..46e2c9124 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 new file mode 100644 index 000000000..53010cea2 --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha1 @@ -0,0 +1 @@ +059e5ed8cd3a1fbca08cccfa4075265192603e3f
\ No newline at end of file diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z Binary files differnew file mode 100644 index 000000000..e5be1148e --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z diff --git a/tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml b/tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml new file mode 100644 index 000000000..40d86538c --- /dev/null +++ b/tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml @@ -0,0 +1,28 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>true</Checksum> + <PackageUpdate> + <Name>A</Name> + <DisplayName>A</DisplayName> + <Description>Example component A</Description> + <Version>1.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> + <Script>script1.0.0.qs</Script> + <UpdateFile UncompressedSize="40" CompressedSize="72" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>da6dae55a8cc3fb9f012e33fa7b9c187a823aa9a</SHA1> + </PackageUpdate> + <PackageUpdate> + <Name>B</Name> + <DisplayName>B</DisplayName> + <Description>Example component B</Description> + <Version>3.0.0</Version> + <ReleaseDate>2020-01-01</ReleaseDate> + <Default>true</Default> + <UpdateFile UncompressedSize="40" CompressedSize="72" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>d88b373458b4bbec38132692061bf1e7aa68e7f7</SHA1> + </PackageUpdate> +</Updates> diff --git a/tests/auto/tools/repotest/tst_repotest.cpp b/tests/auto/tools/repotest/tst_repotest.cpp index 5aa614454..02594f400 100644 --- a/tests/auto/tools/repotest/tst_repotest.cpp +++ b/tests/auto/tools/repotest/tst_repotest.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -39,114 +39,63 @@ class tst_repotest : public QObject { Q_OBJECT private: - // TODO generateRepo() is almost direct copy from repogen.cpp. - // Move the needed parts of repogen.cpp to a usable function for easier maintenance. - void generateRepo(bool createSplitMetadata, bool createUnifiedMetadata, bool updateNewComponents) + void generateRepo(bool createSplitMetadata, bool createUnifiedMetadata, bool updateNewComponents, + QStringList packagesUpdatedWithSha = QStringList()) { QStringList filteredPackages; - QInstallerTools::FilterType filterType = QInstallerTools::Exclude; - QInstallerTools::PackageInfoVector precompressedPackages = QInstallerTools::createListOfRepositoryPackages - (m_repositoryDirectories, &filteredPackages, filterType); - m_packages.append(precompressedPackages); - - QInstallerTools::PackageInfoVector preparedPackages = QInstallerTools::createListOfPackages(m_packagesDirectories, - &filteredPackages, filterType); - m_packages.append(preparedPackages); - - if (updateNewComponents) - QInstallerTools::filterNewComponents(m_repositoryDir, m_packages); - QHash<QString, QString> pathToVersionMapping = QInstallerTools::buildPathToVersionMapping(m_packages); - - foreach (const QInstallerTools::PackageInfo &package, m_packages) { - const QFileInfo fi(m_repositoryDir, package.name); - if (fi.exists()) - removeDirectory(fi.absoluteFilePath()); - } + m_packages = QInstallerTools::collectPackages(m_repoInfo, + &filteredPackages, QInstallerTools::Exclude, updateNewComponents, packagesUpdatedWithSha); if (updateNewComponents) { //Verify that component B exists as that is not updated if (createSplitMetadata) { - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/B", QStringList() << "1.0.0content.7z" + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/B", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1" << "1.0.0meta.7z"); } else { - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/B", QStringList() << "1.0.0content.7z" + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/B", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1"); } } else { - QDir dir(m_repositoryDir + "/B"); + QDir dir(m_repoInfo.repositoryDir + "/B"); QVERIFY(!dir.exists()); } - QStringList directories; - directories.append(m_packagesDirectories); - directories.append(m_repositoryDirectories); - - QStringList unite7zFiles; - foreach (const QString &repositoryDirectory, m_repositoryDirectories) { - QDirIterator it(repositoryDirectory, QStringList(QLatin1String("*_meta.7z")) - , QDir::Files | QDir::CaseSensitive); - while (it.hasNext()) { - it.next(); - unite7zFiles.append(it.fileInfo().absoluteFilePath()); - } - } - - QInstallerTools::copyComponentData(directories, m_repositoryDir, &m_packages); - QInstallerTools::copyMetaData(m_tmpMetaDir, m_repositoryDir, m_packages, QLatin1String("{AnyApplication}"), - QLatin1String("1.0.0"), unite7zFiles); - QString existing7z = QInstallerTools::existingUniteMeta7z(m_repositoryDir); - if (!existing7z.isEmpty()) - existing7z = m_repositoryDir + QDir::separator() + existing7z; - QInstallerTools::compressMetaDirectories(m_tmpMetaDir, existing7z, pathToVersionMapping, - createSplitMetadata, createUnifiedMetadata); - QDirIterator it(m_repositoryDir, QStringList(QLatin1String("Updates*.xml")) - << QLatin1String("*_meta.7z"), QDir::Files | QDir::CaseSensitive); - while (it.hasNext()) { - it.next(); - QFile::remove(it.fileInfo().absoluteFilePath()); - } - QInstaller::moveDirectoryContents(m_tmpMetaDir, m_repositoryDir); - } - - void generateTempMetaDir() - { - if (!m_tmpMetaDir.isEmpty()) - m_tempDirDeleter.releaseAndDelete(m_tmpMetaDir); QTemporaryDir tmp; tmp.setAutoRemove(false); - m_tmpMetaDir = tmp.path(); - m_tempDirDeleter.add(m_tmpMetaDir); + const QString tmpMetaDir = tmp.path(); + QInstallerTools::createRepository(m_repoInfo, &m_packages, tmpMetaDir, createSplitMetadata, + createUnifiedMetadata); + QInstaller::removeDirectory(tmpMetaDir, true); } void clearData() { - generateTempMetaDir(); - m_packagesDirectories.clear(); - m_repositoryDirectories.clear(); + m_repoInfo.packages.clear(); + m_repoInfo.repositoryPackages.clear(); m_packages.clear(); } void initRepoUpdate() { clearData(); - m_packagesDirectories << ":///packages_update"; + m_repoInfo.packages << ":///packages_update"; } - void initRepoUpdateFromRepository(const QString &repository) + void initRepoUpdateFromRepositories(const QStringList &repositories) { clearData(); - m_repositoryDirectories << repository; + m_repoInfo.repositoryPackages << repositories; } void verifyUniteMetadata(const QString &scriptVersion) { - QString fileContent = VerifyInstaller::fileContent(m_repositoryDir + QDir::separator() + QString fileContent = VerifyInstaller::fileContent(m_repoInfo.repositoryDir + QDir::separator() + "Updates.xml"); QRegularExpression re("<MetadataName>(.*)<.MetadataName>"); QStringList matches = re.match(fileContent).capturedTexts(); - QString existingUniteMeta7z = QInstallerTools::existingUniteMeta7z(m_repositoryDir); + QString existingUniteMeta7z = QInstallerTools::existingUniteMeta7z(m_repoInfo.repositoryDir); QCOMPARE(2, matches.count()); QCOMPARE(existingUniteMeta7z, matches.at(1)); - QFile file(m_repositoryDir + QDir::separator() + matches.at(1)); + QFile file(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 @@ -159,35 +108,35 @@ private: QCOMPARE(qPrintable(fileName.arg(scriptVersion)), fileIt->path); } - VerifyInstaller::verifyFileExistence(m_repositoryDir, QStringList() << "Updates.xml" + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir, QStringList() << "Updates.xml" << matches.at(1)); - VerifyInstaller::verifyFileContent(m_repositoryDir + QDir::separator() + "Updates.xml", + VerifyInstaller::verifyFileContent(m_repoInfo.repositoryDir + QDir::separator() + "Updates.xml", "SHA1"); - VerifyInstaller::verifyFileContent(m_repositoryDir + QDir::separator() + "Updates.xml", + VerifyInstaller::verifyFileContent(m_repoInfo.repositoryDir + QDir::separator() + "Updates.xml", "MetadataName"); } - void verifyComponentRepository(const QString &componentAVersion, bool hasComponentMeta) + void verifyComponentRepository(const QString &componentAVersion, const QString &componentBVersion, bool hasComponentMeta) { const QString content = "%1content.7z"; - const QString contentSha = "%1content.7z.sha1"; + const QString contentSha1 = "%1content.7z.sha1"; const QString meta = "%1meta.7z"; QStringList componentA; QStringList componentB; - componentA << qPrintable(content.arg(componentAVersion)) << qPrintable(contentSha.arg(componentAVersion)); - componentB << "1.0.0content.7z" << "1.0.0content.7z.sha1"; + componentA << qPrintable(content.arg(componentAVersion)) << qPrintable(contentSha1.arg(componentAVersion)); + componentB << qPrintable(content.arg(componentBVersion)) << qPrintable(contentSha1.arg(componentBVersion)); if (hasComponentMeta) { componentA << qPrintable(meta.arg(componentAVersion)); - componentB << "1.0.0meta.7z"; + componentB << qPrintable(meta.arg(componentBVersion)); } - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/A", componentA); - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/B", componentB); + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/A", componentA); + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/B", componentB); } void verifyComponentMetaUpdatesXml() { - VerifyInstaller::verifyFileExistence(m_repositoryDir, QStringList() << "Updates.xml"); - VerifyInstaller::verifyFileHasNoContent(m_repositoryDir + QDir::separator() + "Updates.xml", + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir, QStringList() << "Updates.xml"); + VerifyInstaller::verifyFileHasNoContent(m_repoInfo.repositoryDir + QDir::separator() + "Updates.xml", "MetadataName"); } @@ -216,18 +165,18 @@ private: foreach (const QString &fileName, contentFiles) { message = "Copying file from \":///%5/%1/%2%4\" to \"%3/%1/%2%4\""; QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(component).arg(version) - .arg(m_repositoryDir).arg(fileName).arg(repository))); + .arg(m_repoInfo.repositoryDir).arg(fileName).arg(repository))); } } - void ignoreMessageForCollectingRepository(const QString &repository) + void ignoreMessageForCollectingRepository(const QStringList &repositories) { const QString message = "Process repository \"%2\""; QTest::ignoreMessage(QtDebugMsg, "Collecting information about available repository packages..."); - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(repository))); + for (auto &repo : repositories) + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(repo))); QTest::ignoreMessage(QtDebugMsg, "Collecting information about available packages..."); QTest::ignoreMessage(QtDebugMsg, "No available packages found at the specified location."); - QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); } void ignoreMessagesForCopyMetadata(const QString &component, bool hasMeta, bool update) @@ -303,9 +252,23 @@ private: void ignoreMessageForUpdateComponent() { QString message = "Update component \"A\" in \"%1\" ."; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repositoryDir))); + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); message = "Update component \"C\" in \"%1\" ."; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repositoryDir))); + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); + } + + void verifyComponentShaUpdate(int shaUpdateComponents) + { + QString updatesXmlFile(m_repoInfo.repositoryDir + QDir::separator() + "Updates.xml"); + QFile file(updatesXmlFile); + QDomDocument dom; + + QVERIFY(file.open(QIODevice::ReadOnly)); + QVERIFY(dom.setContent(&file)); + file.close(); + QCOMPARE(dom.elementsByTagName("ContentSha1").count(), shaUpdateComponents); + VerifyInstaller::verifyFileContent(updatesXmlFile, + "<ContentSha1>059e5ed8cd3a1fbca08cccfa4075265192603e3f</ContentSha1>"); } private slots: @@ -313,11 +276,10 @@ private slots: { ignoreMessageForCollectingPackages("1.0.0", "1.0.0"); - m_repositoryDir = QInstallerTools::makePathAbsolute(QInstaller::generateTemporaryFileName()); - m_tempDirDeleter.add(m_repositoryDir); - generateTempMetaDir(); + m_repoInfo.repositoryDir = QInstallerTools::makePathAbsolute(QInstaller::generateTemporaryFileName()); + m_tempDirDeleter.add(m_repoInfo.repositoryDir); - m_packagesDirectories << ":///packages"; + m_repoInfo.packages << ":///packages"; ignoreMessagesForComponentHash(QStringList() << "A" << "B", false); ignoreMessagesForCopyMetadata("A", true, false); //Only A has metadata @@ -334,7 +296,7 @@ private slots: ignoreMessagesForComponentSha(QStringList () << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -344,7 +306,7 @@ private slots: ignoreMessagesForUniteMeta(false); generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); verifyUniteMetadata("1.0.0"); } @@ -353,16 +315,36 @@ private slots: ignoreMessagesForUniteMeta(false); generateRepo(false, true, false); - verifyComponentRepository("1.0.0", false); + verifyComponentRepository("1.0.0", "1.0.0", false); verifyUniteMetadata("1.0.0"); } + void testWithComponentShaUpdate() + { + ignoreMessagesForComponentSha(QStringList () << "A" << "B", false); + generateRepo(true, false, false, QStringList () << "A"); + + verifyComponentRepository("1.0.0", "1.0.0", true); + verifyComponentMetaUpdatesXml(); + verifyComponentShaUpdate(1); + } + + void testWithTwoComponentsShaUpdate() + { + ignoreMessagesForComponentSha(QStringList () << "A" << "B", false); + generateRepo(true, false, false, QStringList () << "A" << "B"); + + verifyComponentRepository("1.0.0", "1.0.0", true); + verifyComponentMetaUpdatesXml(); + verifyComponentShaUpdate(2); + } + void testUpdateNewComponents() { // Create 'base' repository which will be updated ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); // Update the 'base' repository initRepoUpdate(); @@ -371,9 +353,9 @@ private slots: ignoreMessagesForComponentHash(QStringList() << "A", true); ignoreMessagesForCopyMetadata("A", true, true); const QString &message = "Update component \"A\" in \"%1\" ."; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repositoryDir))); + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.repositoryDir))); generateRepo(true, false, true); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -381,12 +363,12 @@ private slots: { ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0",true); + verifyComponentRepository("1.0.0", "1.0.0", true); initRepoUpdate(); ignoreMessagesForUpdateComponents(); generateRepo(true, false, false); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -395,13 +377,13 @@ private slots: ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); ignoreMessagesForUniteMeta(false); generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); initRepoUpdate(); ignoreMessagesForUpdateComponents(); ignoreMessagesForUniteMeta(true); generateRepo(true, true, false); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); verifyUniteMetadata("2.0.0"); } @@ -409,7 +391,7 @@ private slots: { ignoreMessagesForUniteMeta(false); generateRepo(false, true, false); - verifyComponentRepository("1.0.0", false); + verifyComponentRepository("1.0.0", "1.0.0", false); initRepoUpdate(); ignoreMessageForCollectingPackages("2.0.0", "1.0.0"); @@ -418,7 +400,7 @@ private slots: ignoreMessagesForCopyMetadata("B", false, true); ignoreMessagesForUniteMeta(true); generateRepo(false, true, false); - verifyComponentRepository("2.0.0", false); + verifyComponentRepository("2.0.0", "1.0.0", false); verifyUniteMetadata("2.0.0"); } @@ -426,17 +408,47 @@ private slots: { ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); generateRepo(true, false, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepository(":///repository_component"); - ignoreMessageForCollectingRepository("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\""); ignoreMessagesForCopyRepository("B", "1.0.0", "repository_component"); ignoreMessagesForCopyRepository("A", "2.0.0", "repository_component"); ignoreMessagesForComponentSha(QStringList() << "A" << "B", true); generateRepo(true, false, false); - verifyComponentRepository("2.0.0", true); + verifyComponentRepository("2.0.0", "1.0.0", true); + verifyComponentMetaUpdatesXml(); + } + + void testUpdateComponentsFromMultipleRepositories() + { + ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); + 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"); + + ignoreMessageForCollectingRepository(QStringList() + << "repository_1" << "repository_2" << "repository_3"); + + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"A\" - \"2.0.0\""); + QTest::ignoreMessage(QtDebugMsg, "- it provides the package \"B\" - \"1.0.0\""); + + QTest::ignoreMessage(QtDebugMsg, "- it provides an old version of the package \"A\" - \"1.0.0\" - ignored"); + QTest::ignoreMessage(QtDebugMsg, "- it provides an old version of the package \"B\" - \"1.0.0\" - ignored"); + + QTest::ignoreMessage(QtDebugMsg, "- it provides an old version of the package \"A\" - \"1.0.0\" - ignored"); + QTest::ignoreMessage(QtDebugMsg, "- it provides a new version of the package \"B\" - \"3.0.0\" - replaced"); + + ignoreMessagesForCopyRepository("B", "3.0.0", "test_package_versions/repository_3"); + ignoreMessagesForCopyRepository("A", "2.0.0", "test_package_versions/repository_1"); + ignoreMessagesForComponentSha(QStringList() << "A" << "B", true); + generateRepo(true, false, false); + verifyComponentRepository("2.0.0", "3.0.0", true); verifyComponentMetaUpdatesXml(); } @@ -445,10 +457,11 @@ private slots: ignoreMessagesForComponentSha(QStringList() << "A" << "B", false); ignoreMessagesForUniteMeta(false); generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); + verifyComponentRepository("1.0.0", "1.0.0", true); - initRepoUpdateFromRepository(":///repository_componentAndUnite"); - ignoreMessageForCollectingRepository("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\""); ignoreMessageForUpdateComponent(); ignoreMessagesForCopyRepository("A", "2.0.0", "repository_componentAndUnite"); @@ -457,8 +470,8 @@ private slots: ignoreMessagesForComponentSha(QStringList() << "A" << "C", true); generateRepo(true, true, true); - verifyComponentRepository("2.0.0", true); - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/C", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1" << "1.0.0meta.7z"); + verifyComponentRepository("2.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("2.0.0"); } @@ -466,10 +479,11 @@ private slots: { ignoreMessagesForUniteMeta(false); generateRepo(false, true, false); - verifyComponentRepository("1.0.0", false); + verifyComponentRepository("1.0.0", "1.0.0", false); - initRepoUpdateFromRepository(":///repository_unite"); - ignoreMessageForCollectingRepository("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\""); ignoreMessageForUpdateComponent(); ignoreMessagesForCopyRepository("A", "2.0.0", "repository_unite"); @@ -477,24 +491,21 @@ private slots: ignoreMessagesForUniteMeta(true); generateRepo(false, true, true); - verifyComponentRepository("2.0.0", false); - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/C", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1"); + verifyComponentRepository("2.0.0", "1.0.0", false); + VerifyInstaller::verifyFileExistence(m_repoInfo.repositoryDir + "/C", QStringList() << "1.0.0content.7z" << "1.0.0content.7z.sha1"); verifyUniteMetadata("2.0.0"); } void cleanup() { m_tempDirDeleter.releaseAndDeleteAll(); - m_packagesDirectories.clear(); + m_repoInfo.packages.clear(); m_packages.clear(); - m_repositoryDirectories.clear(); + m_repoInfo.repositoryPackages.clear(); } private: - QString m_tmpMetaDir; - QString m_repositoryDir; - QStringList m_packagesDirectories; - QStringList m_repositoryDirectories; + QInstallerTools::RepositoryInfo m_repoInfo; QInstallerTools::PackageInfoVector m_packages; TempDirDeleter m_tempDirDeleter; }; |