diff options
Diffstat (limited to 'tests/auto')
72 files changed, 637 insertions, 170 deletions
diff --git a/tests/auto/installer/binaryformat/tst_binaryformat.cpp b/tests/auto/installer/binaryformat/tst_binaryformat.cpp index c9cd2b00f..7e0f5ed24 100644 --- a/tests/auto/installer/binaryformat/tst_binaryformat.cpp +++ b/tests/auto/installer/binaryformat/tst_binaryformat.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 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. @@ -51,7 +51,7 @@ struct Layout : public QInstaller::BinaryLayout class TestOperation : public KDUpdater::UpdateOperation { public: - TestOperation(const QString &name) + explicit TestOperation(const QString &name) : KDUpdater::UpdateOperation(nullptr) { setName(name); } diff --git a/tests/auto/installer/clientserver/tst_clientserver.cpp b/tests/auto/installer/clientserver/tst_clientserver.cpp index 23442d5fa..29d4283b9 100644 --- a/tests/auto/installer/clientserver/tst_clientserver.cpp +++ b/tests/auto/installer/clientserver/tst_clientserver.cpp @@ -501,7 +501,7 @@ private slots: QFile file; file.setFileName(filename); file.open(QIODevice::ReadWrite); - const QByteArray ba = file.readLine(); + file.readLine(); file.seek(0); QCOMPARE(file.atEnd(), false); diff --git a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z b/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z Binary files differdeleted file mode 100644 index 5a9383e7e..000000000 --- a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z.sha1 b/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z.sha1 deleted file mode 100644 index fd0bc548c..000000000 --- a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z.sha1 +++ /dev/null @@ -1 +0,0 @@ -643cb71b2337d5a49d57a5bc3c636ee9b84c0802
\ No newline at end of file diff --git a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1meta.7z b/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1meta.7z Binary files differdeleted file mode 100644 index 6ef0b7959..000000000 --- a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/AB/1.0.2-1meta.7z b/tests/auto/installer/cliinterface/data/repository/AB/1.0.2-1meta.7z Binary files differdeleted file mode 100644 index 6b5e5ac91..000000000 --- a/tests/auto/installer/cliinterface/data/repository/AB/1.0.2-1meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z b/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z Binary files differdeleted file mode 100644 index dfe41ad15..000000000 --- a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z.sha1 b/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z.sha1 deleted file mode 100644 index 50a632b49..000000000 --- a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z.sha1 +++ /dev/null @@ -1 +0,0 @@ -c7b9ab370efe036171dda7b71cd95021747cb101
\ No newline at end of file diff --git a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1meta.7z b/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1meta.7z Binary files differdeleted file mode 100644 index 12d54f94c..000000000 --- a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z b/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z Binary files differdeleted file mode 100644 index 7d03dca9c..000000000 --- a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z.sha1 b/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z.sha1 deleted file mode 100644 index 91ead97f0..000000000 --- a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z.sha1 +++ /dev/null @@ -1 +0,0 @@ -c8b7076fabaaf6b9d27f27350c577118c24f426b
\ No newline at end of file diff --git a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1meta.7z b/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1meta.7z Binary files differdeleted file mode 100644 index 46bae0179..000000000 --- a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/repository/Updates.xml b/tests/auto/installer/cliinterface/data/repository/Updates.xml index c7b11dc03..52707d09d 100644 --- a/tests/auto/installer/cliinterface/data/repository/Updates.xml +++ b/tests/auto/installer/cliinterface/data/repository/Updates.xml @@ -19,7 +19,7 @@ <Description>Example component B</Description> <Version>1.0.0-1</Version> <ReleaseDate>2015-01-01</ReleaseDate> - <Default>true</Default> + <Default>false</Default> <UpdateFile CompressedSize="222" OS="Any" UncompressedSize="72"/> <DownloadableArchives>content.7z</DownloadableArchives> <SHA1>9170d55a6af81c1a6a63d708a4ab6ed359775cd9</SHA1> @@ -35,6 +35,27 @@ <DownloadableArchives>content.7z</DownloadableArchives> <SHA1>5b3939da1af492382c68388fc796837e4c36b876</SHA1> </PackageUpdate> + <PackageUpdate> + <Name>C.virt</Name> + <DisplayName>Virtual subcomponent of C</DisplayName> + <Description>Example virtual component</Description> + <Version>1.0.0-1</Version> + <ReleaseDate>2015-01-01</ReleaseDate> + <Virtual>true</Virtual> + <UpdateFile CompressedSize="222" OS="Any" UncompressedSize="72"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>5b3939da1af492382c68388fc796837e4c36b876</SHA1> + </PackageUpdate> + <PackageUpdate> + <Name>C.virt.subcomponent</Name> + <DisplayName>Subcomponent of virtual component</DisplayName> + <Description>Example subcomponent of virtual component</Description> + <Version>1.0.0-1</Version> + <ReleaseDate>2015-01-01</ReleaseDate> + <UpdateFile CompressedSize="222" OS="Any" UncompressedSize="72"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>5b3939da1af492382c68388fc796837e4c36b876</SHA1> + </PackageUpdate> <PackageUpdate> <Name>AB</Name> <DisplayName>AB</DisplayName> diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z Binary files differdeleted file mode 100644 index d7fbf4d8e..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z.sha1 b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z.sha1 deleted file mode 100644 index c5825de47..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z.sha1 +++ /dev/null @@ -1 +0,0 @@ -f33d2028e1c61061f7f29e5189f7d66800361dc2
\ No newline at end of file diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0meta.7z b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0meta.7z Binary files differdeleted file mode 100644 index d783c7c1c..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/AB/1.0.2-1meta.7z b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/AB/1.0.2-1meta.7z Binary files differdeleted file mode 100644 index 20f2aca2d..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/AB/1.0.2-1meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z Binary files differdeleted file mode 100644 index bd0bc9352..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z.sha1 b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z.sha1 deleted file mode 100644 index e66535388..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z.sha1 +++ /dev/null @@ -1 +0,0 @@ -bb256f1eda0f452c7ab33d1f364a4fad062f0a73
\ No newline at end of file diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0meta.7z b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0meta.7z Binary files differdeleted file mode 100644 index f92853734..000000000 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0meta.7z +++ /dev/null diff --git a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/Updates.xml b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/Updates.xml index e0aedffdd..f0c724db8 100644 --- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/Updates.xml +++ b/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/Updates.xml @@ -37,4 +37,14 @@ <SHA1>cfa136fa1d7a4196896c90af72d510727ba799ae</SHA1> <Virtual>true</Virtual> </PackageUpdate> + <PackageUpdate> + <Name>B.subcomponent</Name> + <DisplayName>Subcomponent of B</DisplayName> + <Description>Example non-virtual subcomponent of B</Description> + <Version>2.0.0</Version> + <ReleaseDate>2015-01-01</ReleaseDate> + <UpdateFile CompressedSize="224" OS="Any" UncompressedSize="74"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <SHA1>cfa136fa1d7a4196896c90af72d510727ba799ae</SHA1> + </PackageUpdate> </Updates> diff --git a/tests/auto/installer/cliinterface/tst_cliinterface.cpp b/tests/auto/installer/cliinterface/tst_cliinterface.cpp index 550f45da2..d880310ac 100644 --- a/tests/auto/installer/cliinterface/tst_cliinterface.cpp +++ b/tests/auto/installer/cliinterface/tst_cliinterface.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. @@ -89,6 +89,33 @@ private slots: " <package name=\"C\" displayname=\"C\" version=\"1.0.0-1\"/>\n" "</availablepackages>\n"); core->listAvailablePackages(QLatin1String("^C")); + + // Test with filters + QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n" + " <package name=\"AB\" displayname=\"AB\" version=\"1.0.2-1\"/>\n" + " <package name=\"A\" displayname=\"A\" version=\"1.0.2-1\"/>\n" + "</availablepackages>\n"); + QHash<QString, QString> searchHash { + { "Version", "1.0.2" }, + { "DisplayName", "A" } + }; + core->listAvailablePackages(QString(), searchHash); + + QTest::ignoreMessage(QtDebugMsg, "<availablepackages>\n" + " <package name=\"B\" displayname=\"B\" version=\"1.0.0-1\"/>\n" + "</availablepackages>\n"); + searchHash.clear(); + searchHash.insert("Default", "false"); + core->listAvailablePackages(QString(), searchHash); + + // Need to change rules here to catch messages + QLoggingCategory::setFilterRules("ifw.* = true\n"); + + QTest::ignoreMessage(QtDebugMsg, "No matching packages found."); + core->listAvailablePackages(QLatin1String("C.virt")); + + QTest::ignoreMessage(QtDebugMsg, "No matching packages found."); + core->listAvailablePackages(QLatin1String("C.virt.subcomponent")); } void testInstallPackageFails() @@ -107,7 +134,7 @@ private slots: << QLatin1String("A"))); QTest::ignoreMessage(QtDebugMsg, "Preparing meta information download..."); - QTest::ignoreMessage(QtDebugMsg, "Cannot install component AB. Component is not checkable meaning you have to select one of the subcomponents.\n"); + QTest::ignoreMessage(QtDebugMsg, "Cannot install component AB. Component is not checkable, meaning you have to select one of the subcomponents.\n"); QCOMPARE(PackageManagerCore::Canceled, core->installSelectedComponentsSilently(QStringList() << QLatin1String("AB"))); @@ -117,6 +144,11 @@ private slots: << QLatin1String("B"))); QTest::ignoreMessage(QtDebugMsg, "Preparing meta information download..."); + QTest::ignoreMessage(QtDebugMsg, "Cannot install B.subcomponent. Component is a descendant of a virtual component B.\n"); + QCOMPARE(PackageManagerCore::Canceled, core->installSelectedComponentsSilently(QStringList() + << QLatin1String("B.subcomponent"))); + + QTest::ignoreMessage(QtDebugMsg, "Preparing meta information download..."); QTest::ignoreMessage(QtDebugMsg, "Cannot install MissingComponent. Component not found.\n"); QCOMPARE(PackageManagerCore::Canceled, core->installSelectedComponentsSilently(QStringList() << QLatin1String("MissingComponent"))); diff --git a/tests/auto/installer/contentshaupdate/contentshaupdate.pro b/tests/auto/installer/contentshaupdate/contentshaupdate.pro new file mode 100644 index 000000000..84402794f --- /dev/null +++ b/tests/auto/installer/contentshaupdate/contentshaupdate.pro @@ -0,0 +1,9 @@ +include(../../qttest.pri) + +QT += qml + +SOURCES += tst_contentshaupdate.cpp + +RESOURCES += \ + settings.qrc \ + ..\shared\config.qrc diff --git a/tests/auto/installer/contentshaupdate/data/repository/Updates.xml b/tests/auto/installer/contentshaupdate/data/repository/Updates.xml new file mode 100644 index 000000000..a83d41384 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repository/Updates.xml @@ -0,0 +1,48 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>false</Checksum> + <PackageUpdate> + <Name>componentA</Name> + <DisplayName>Component A</DisplayName> + <Description>This component does not depend on any other component.</Description> + <Version>1.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>100</SortingPriority> + <UpdateFile OS="Any" CompressedSize="283" UncompressedSize="101"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <ContentSha1>10</ContentSha1> + </PackageUpdate> + <PackageUpdate> + <Name>componentB</Name> + <DisplayName>Component B</DisplayName> + <Description>This component does not depend on any other component.</Description> + <Version>1.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>90</SortingPriority> + <UpdateFile OS="Any" CompressedSize="283" UncompressedSize="101"/> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> + <PackageUpdate> + <Name>componentC</Name> + <DisplayName>Component C</DisplayName> + <Description>Component C</Description> + <Version>1.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>80</SortingPriority> + <UpdateFile OS="Any" CompressedSize="283" UncompressedSize="101"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <ContentSha1>10</ContentSha1> + </PackageUpdate> + <PackageUpdate> + <Name>componentD</Name> + <DisplayName>Component D</DisplayName> + <Description>Component D</Description> + <Version>1.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>80</SortingPriority> + <UpdateFile CompressedSize="283" UncompressedSize="101" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <ContentSha1>10</ContentSha1> + </PackageUpdate> +</Updates> diff --git a/tests/auto/installer/contentshaupdate/data/repository/componentA/1.0.0content.7z b/tests/auto/installer/contentshaupdate/data/repository/componentA/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..46a9f1d1e --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repository/componentA/1.0.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repository/componentB/1.0.0content.7z b/tests/auto/installer/contentshaupdate/data/repository/componentB/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..5f1fb2e1b --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repository/componentB/1.0.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repository/componentC/1.0.0content.7z b/tests/auto/installer/contentshaupdate/data/repository/componentC/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..83e82b5a3 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repository/componentC/1.0.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repository/componentD/1.0.0content.7z b/tests/auto/installer/contentshaupdate/data/repository/componentD/1.0.0content.7z Binary files differnew file mode 100644 index 000000000..da50742a4 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repository/componentD/1.0.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repositoryUpdate/Updates.xml b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/Updates.xml new file mode 100644 index 000000000..87017cf91 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/Updates.xml @@ -0,0 +1,48 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <Checksum>false</Checksum> + <PackageUpdate> + <Name>componentA</Name> + <DisplayName>Component A</DisplayName> + <Description>Component A.</Description> + <Version>0.1.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>100</SortingPriority> + <UpdateFile CompressedSize="283" UncompressedSize="101" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <ContentSha1>5</ContentSha1> + </PackageUpdate> + <PackageUpdate> + <Name>componentB</Name> + <DisplayName>Component B</DisplayName> + <Description>Component B.</Description> + <Version>0.1.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>90</SortingPriority> + <UpdateFile CompressedSize="283" UncompressedSize="101" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <ContentSha1>10</ContentSha1> + </PackageUpdate> + <PackageUpdate> + <Name>componentC</Name> + <DisplayName>Component C</DisplayName> + <Description>Component C</Description> + <Version>2.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>80</SortingPriority> + <UpdateFile CompressedSize="283" UncompressedSize="101" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + <ContentSha1>10</ContentSha1> + </PackageUpdate> + <PackageUpdate> + <Name>componentD</Name> + <DisplayName>Component D</DisplayName> + <Description>Component D</Description> + <Version>2.0.0</Version> + <ReleaseDate>2014-08-25</ReleaseDate> + <SortingPriority>80</SortingPriority> + <UpdateFile UncompressedSize="101" CompressedSize="283" OS="Any"/> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> +</Updates> diff --git a/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentA/0.1.0content.7z b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentA/0.1.0content.7z Binary files differnew file mode 100644 index 000000000..bdbabc7fd --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentA/0.1.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentB/0.1.0content.7z b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentB/0.1.0content.7z Binary files differnew file mode 100644 index 000000000..1c1129b9f --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentB/0.1.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentC/2.0.0content.7z b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentC/2.0.0content.7z Binary files differnew file mode 100644 index 000000000..7f75bf503 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentC/2.0.0content.7z diff --git a/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentD/2.0.0content.7z b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentD/2.0.0content.7z Binary files differnew file mode 100644 index 000000000..4207dfbf2 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentD/2.0.0content.7z diff --git a/tests/auto/installer/contentshaupdate/settings.qrc b/tests/auto/installer/contentshaupdate/settings.qrc new file mode 100644 index 000000000..a5d045f46 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/settings.qrc @@ -0,0 +1,14 @@ +<RCC> + <qresource prefix="/"> + <file>data/repository/Updates.xml</file> + <file>data/repository/componentA/1.0.0content.7z</file> + <file>data/repository/componentB/1.0.0content.7z</file> + <file>data/repository/componentC/1.0.0content.7z</file> + <file>data/repository/componentD/1.0.0content.7z</file> + <file>data/repositoryUpdate/Updates.xml</file> + <file>data/repositoryUpdate/componentA/0.1.0content.7z</file> + <file>data/repositoryUpdate/componentB/0.1.0content.7z</file> + <file>data/repositoryUpdate/componentC/2.0.0content.7z</file> + <file>data/repositoryUpdate/componentD/2.0.0content.7z</file> + </qresource> +</RCC> diff --git a/tests/auto/installer/contentshaupdate/tst_contentshaupdate.cpp b/tests/auto/installer/contentshaupdate/tst_contentshaupdate.cpp new file mode 100644 index 000000000..d8d2f5377 --- /dev/null +++ b/tests/auto/installer/contentshaupdate/tst_contentshaupdate.cpp @@ -0,0 +1,108 @@ +/************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include "../shared/packagemanager.h" +#include "../shared/verifyinstaller.h" + +#include <QTest> + +using namespace QInstaller; + +class tst_ContentSha1Update : public QObject +{ + Q_OBJECT + +private: + void setRepository(const QString &repository) + { + core->reset(); + core->cancelMetaInfoJob(); //Call cancel to reset metadata so that update repositories are fetched + + QSet<Repository> repoList; + Repository repo = Repository::fromUserInput(repository); + repoList.insert(repo); + core->settings().setDefaultRepositories(repoList); + } + +private slots: + void initTestCase() + { + m_installDir = QInstaller::generateTemporaryFileName(); + core = PackageManager::getPackageManagerWithInit(m_installDir); + } + + void updateWithContentSha1_data() + { + QTest::addColumn<QString>("component"); + QTest::addColumn<QString>("content"); + QTest::addColumn<QString>("updatedContent"); + QTest::addColumn<PackageManagerCore::Status>("expectedStatusAfterInstall"); + QTest::addColumn<PackageManagerCore::Status>("expectedStatusAfterUpdate"); + + QTest::newRow("ContentSha1Change") << "componentA" << "1.0.0content.txt" << "0.1.0content.txt" << PackageManagerCore::Success << PackageManagerCore::Success; + QTest::newRow("NewContentSha1") << "componentB" << "1.0.0content.txt" << "0.1.0content.txt" << PackageManagerCore::Success << PackageManagerCore::Success; + QTest::newRow("SameContentSha1") << "componentC" << "1.0.0content.txt" << "1.0.0content.txt" << PackageManagerCore::Success << PackageManagerCore::Canceled; + QTest::newRow("Sha1RemovedFromRepo") << "componentD" << "1.0.0content.txt" << "2.0.0content.txt" << PackageManagerCore::Success << PackageManagerCore::Success; + } + + void updateWithContentSha1() + { + QFETCH(QString, component); + QFETCH(QString, content); + QFETCH(QString, updatedContent); + QFETCH(PackageManagerCore::Status, expectedStatusAfterInstall); + QFETCH(PackageManagerCore::Status, expectedStatusAfterUpdate); + + setRepository(":///data/repository"); + QCOMPARE(expectedStatusAfterInstall, core->installSelectedComponentsSilently(QStringList() << component)); + QCOMPARE(expectedStatusAfterInstall, core->status()); + VerifyInstaller::verifyInstallerResources(m_installDir, component, content); + + core->commitSessionOperations(); + core->setPackageManager(); + setRepository(":///data/repositoryUpdate"); + QCOMPARE(expectedStatusAfterUpdate, core->updateComponentsSilently(QStringList())); + VerifyInstaller::verifyInstallerResources(m_installDir, component, updatedContent); + } + + void cleanupTestCase() + { + QDir dir(m_installDir); + QVERIFY(dir.removeRecursively()); + delete core; + } + +private: + QString m_installDir; + PackageManagerCore *core; +}; + + +QTEST_MAIN(tst_ContentSha1Update) + +#include "tst_contentshaupdate.moc" diff --git a/tests/auto/installer/factory/tst_factory.cpp b/tests/auto/installer/factory/tst_factory.cpp index f44a6febe..eb7e2c36c 100644 --- a/tests/auto/installer/factory/tst_factory.cpp +++ b/tests/auto/installer/factory/tst_factory.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -82,7 +82,7 @@ public: : Food(amount) , m_expireDate(expireDate) { qDebug().nospace().noquote() << "Constructor."; } - QDate expireDate() const { + QDate expireDate() const Q_DECL_OVERRIDE { return m_expireDate; } private: @@ -92,7 +92,7 @@ private: class Butter : public Food { public: - QDate expireDate() const { + QDate expireDate() const Q_DECL_OVERRIDE { return m_expireDate; } static Food *create(int amount, const QDate expireDate) { @@ -117,7 +117,7 @@ public: : Food(amount) , m_expireDate(expireDate) { qDebug().nospace().noquote() << "Constructor."; } - QDate expireDate() const { + QDate expireDate() const Q_DECL_OVERRIDE { return m_expireDate; } diff --git a/tests/auto/installer/installer.pro b/tests/auto/installer/installer.pro index 114c43d7a..cb0438ab3 100644 --- a/tests/auto/installer/installer.pro +++ b/tests/auto/installer/installer.pro @@ -39,7 +39,8 @@ SUBDIRS += \ globalsettingsoperation \ elevatedexecuteoperation \ treename \ - createoffline + createoffline \ + contentshaupdate win32 { SUBDIRS += registerfiletypeoperation \ diff --git a/tests/auto/installer/metadatajob/data/config.xml b/tests/auto/installer/metadatajob/data/config.xml deleted file mode 100644 index 041ce5062..000000000 --- a/tests/auto/installer/metadatajob/data/config.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Installer> - <Name>Your application</Name> - <Version>1.2.3</Version> - <MaintenanceToolName></MaintenanceToolName> - <MaintenanceToolIniFile></MaintenanceToolIniFile> - <TargetConfigurationFile></TargetConfigurationFile> -</Installer> diff --git a/tests/auto/installer/metadatajob/settings.qrc b/tests/auto/installer/metadatajob/settings.qrc index c881f294b..6e56a7854 100644 --- a/tests/auto/installer/metadatajob/settings.qrc +++ b/tests/auto/installer/metadatajob/settings.qrc @@ -1,6 +1,5 @@ <RCC> <qresource prefix="/"> - <file>data/config.xml</file> <file>data/repository/Updates.xml</file> <file>data/repositoryActionAdd/Updates.xml</file> <file>data/repositoryActionRemove/Updates.xml</file> diff --git a/tests/auto/installer/metadatajob/tst_metadatajob.cpp b/tests/auto/installer/metadatajob/tst_metadatajob.cpp index ef7b42940..54609ab95 100644 --- a/tests/auto/installer/metadatajob/tst_metadatajob.cpp +++ b/tests/auto/installer/metadatajob/tst_metadatajob.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. @@ -47,7 +47,6 @@ class tst_MetaDataJob : public QObject private slots: void testRepository() { - Settings settings = Settings::fromFileAndPrefix(":///data/config.xml", ":///data"); PackageManagerCore core; core.setInstaller(); QSet<Repository> repoList; @@ -63,7 +62,6 @@ private slots: void testRepositoryUpdateActionAdd() { - Settings settings = Settings::fromFileAndPrefix(":///data/config.xml", ":///data"); PackageManagerCore core; core.setInstaller(); QSet<Repository> repoList; @@ -82,7 +80,6 @@ private slots: void testRepositoryUpdateActionRemove() { - Settings settings = Settings::fromFileAndPrefix(":///data/config.xml", ":///data"); PackageManagerCore core; core.setInstaller(); QSet<Repository> repoList; diff --git a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp index ae2c3b211..a3e86c2f8 100644 --- a/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp +++ b/tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2017 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. @@ -46,7 +46,7 @@ using namespace QInstaller; class DummyComponent : public Component { public: - DummyComponent(PackageManagerCore *core) + explicit DummyComponent(PackageManagerCore *core) : Component(core) { setCheckState(Qt::Checked); @@ -306,7 +306,7 @@ private slots: QTest::ignoreMessage(QtWarningMsg, re); QTest::ignoreMessage(QtDebugMsg, "No updates available."); - QCOMPARE(PackageManagerCore::Failure, core.updateComponentsSilently(QStringList())); + QCOMPARE(PackageManagerCore::Canceled, core.updateComponentsSilently(QStringList())); QVERIFY(QDir().rmdir(testDirectory)); } diff --git a/tests/auto/installer/registerfiletypeoperation/tst_registerfiletypeoperation.cpp b/tests/auto/installer/registerfiletypeoperation/tst_registerfiletypeoperation.cpp index 5a4377d7b..3e3005621 100644 --- a/tests/auto/installer/registerfiletypeoperation/tst_registerfiletypeoperation.cpp +++ b/tests/auto/installer/registerfiletypeoperation/tst_registerfiletypeoperation.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -80,7 +80,6 @@ private slots: QInstaller::init(); QString randomString = ""; const QString possible = "abcdefghijklmnopqrstuvwxyz0123456789"; - qsrand(QTime::currentTime().msec()); for (int i = 0; i < 5; i++) { int index = QRandomGenerator::global()->generate() % possible.length(); QChar nextChar = possible.at(index); diff --git a/tests/auto/installer/repository/data/compressedRepository/compressedRepository.7z b/tests/auto/installer/repository/data/compressedRepository/compressedRepository.7z Binary files differnew file mode 100644 index 000000000..fa75f2979 --- /dev/null +++ b/tests/auto/installer/repository/data/compressedRepository/compressedRepository.7z diff --git a/tests/auto/installer/repository/data/repository/A/1.0.2content.7z b/tests/auto/installer/repository/data/repository/A/1.0.2content.7z Binary files differnew file mode 100644 index 000000000..5531e9072 --- /dev/null +++ b/tests/auto/installer/repository/data/repository/A/1.0.2content.7z diff --git a/tests/auto/installer/repository/data/repository/Updates.xml b/tests/auto/installer/repository/data/repository/Updates.xml new file mode 100644 index 000000000..6fdfec9e5 --- /dev/null +++ b/tests/auto/installer/repository/data/repository/Updates.xml @@ -0,0 +1,13 @@ +<Updates> + <ApplicationName>{AnyApplication}</ApplicationName> + <ApplicationVersion>1.0.0</ApplicationVersion> + <PackageUpdate> + <Name>A</Name> + <DisplayName>A</DisplayName> + <Description>Example component A</Description> + <Version>1.0.2</Version> + <ReleaseDate>2015-01-01</ReleaseDate> + <Default>true</Default> + <DownloadableArchives>content.7z</DownloadableArchives> + </PackageUpdate> +</Updates> diff --git a/tests/auto/installer/repository/repository.pro b/tests/auto/installer/repository/repository.pro index 2d192eeaa..39d8df034 100644 --- a/tests/auto/installer/repository/repository.pro +++ b/tests/auto/installer/repository/repository.pro @@ -4,3 +4,7 @@ QT += network QT -= gui SOURCES += tst_repository.cpp + +RESOURCES += \ + settings.qrc \ + ..\shared\config.qrc diff --git a/tests/auto/installer/repository/settings.qrc b/tests/auto/installer/repository/settings.qrc new file mode 100644 index 000000000..ff628b482 --- /dev/null +++ b/tests/auto/installer/repository/settings.qrc @@ -0,0 +1,7 @@ +<RCC> + <qresource prefix="/"> + <file>data/repository/Updates.xml</file> + <file>data/repository/A/1.0.2content.7z</file> + <file>data/compressedRepository/compressedRepository.7z</file> + </qresource> +</RCC> diff --git a/tests/auto/installer/repository/tst_repository.cpp b/tests/auto/installer/repository/tst_repository.cpp index 7b8405baf..db538ba5d 100644 --- a/tests/auto/installer/repository/tst_repository.cpp +++ b/tests/auto/installer/repository/tst_repository.cpp @@ -1,3 +1,34 @@ +/************************************************************************** +** +** Copyright (C) 2021 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Installer Framework. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +**************************************************************************/ + +#include "../shared/packagemanager.h" +#include "../shared/verifyinstaller.h" + #include "repository.h" #include "repositorycategory.h" #include "settings.h" @@ -161,6 +192,24 @@ private slots: update.insert(QLatin1String("replace"), qMakePair(nonMatching, replacement)); QVERIFY(settings.updateRepositoryCategories(update) == Settings::NoUpdatesApplied); } + + void testCompressedRepositoryWithPriority() + { + // Compressed repository has higher priority than normal repository. + // If the versions match, compressed repository is used instead of normal repository. + QString installDir = QInstaller::generateTemporaryFileName(); + QVERIFY(QDir().mkpath(installDir)); + + PackageManagerCore *core = PackageManager::getPackageManagerWithInit(installDir, ":///data/repository"); + core->setTemporaryRepositories(QStringList() + << ":///data/compressedRepository/compressedRepository.7z", false, true); + core->installSelectedComponentsSilently(QStringList() << "A"); + VerifyInstaller::verifyFileExistence(installDir, QStringList() << "components.xml" << "A_from_compressed.txt"); + + QDir dir(installDir); + QVERIFY(dir.removeRecursively()); + core->deleteLater(); + } }; QTEST_MAIN(tst_Repository) diff --git a/tests/auto/installer/settingsoperation/tst_settingsoperation.cpp b/tests/auto/installer/settingsoperation/tst_settingsoperation.cpp index b7ea4fbc5..9b08d4f6f 100644 --- a/tests/auto/installer/settingsoperation/tst_settingsoperation.cpp +++ b/tests/auto/installer/settingsoperation/tst_settingsoperation.cpp @@ -90,7 +90,7 @@ private slots: UpdateOperation::InvalidArguments); compareString = "Current method argument calling \"Settings\" with arguments \"path=first; " "method=second; key=third; value=fourth\" is not supported. Please use set, remove, " - "add_array_value or remove_array_value."; + "add_array_value, or remove_array_value."; QCOMPARE(wrongMethodArgumentOperation.errorString(), compareString); // same for undo diff --git a/tests/auto/tools/repotest/settings.qrc b/tests/auto/tools/repotest/settings.qrc index f1156e8c2..5c0d0055a 100644 --- a/tests/auto/tools/repotest/settings.qrc +++ b/tests/auto/tools/repotest/settings.qrc @@ -33,5 +33,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 0e59dc786..637ca2a97 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,115 +39,60 @@ 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); - - QStringList packageDirectories; - if (!m_packagesDirectory.isEmpty()) - packageDirectories << m_packagesDirectory; - - QInstallerTools::PackageInfoVector preparedPackages = QInstallerTools::createListOfPackages( - packageDirectories, &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"); } } - QStringList directories; - directories.append(packageDirectories); - 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_packagesDirectory.clear(); - m_repositoryDirectories.clear(); + m_repoInfo.packages.clear(); + m_repoInfo.repositoryPackages.clear(); m_packages.clear(); } void initRepoUpdate() { clearData(); - m_packagesDirectory = ":///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 @@ -160,41 +105,41 @@ 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"); } void ignoreMessagesForComponentHash(const QStringList &components, bool update) { - QString packageDir = m_packagesDirectory; + QString packageDir = m_repoInfo.packages.first(); packageDir.remove("//"); // e.g. :///packages -> :/packages foreach (const QString component, components) { QString message = "Copying component data for \"%1\""; @@ -219,31 +164,31 @@ 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) { 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, 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 \"%1/%2/meta/script2.0.0.qs\""; else message = "Copying associated \"script\" file \"%1/%2/meta/script1.0.0.qs\""; - QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_packagesDirectory, component))); + QTest::ignoreMessage(QtDebugMsg, qPrintable(message.arg(m_repoInfo.packages.first(), component))); QTest::ignoreMessage(QtDebugMsg, "done."); } } @@ -312,9 +257,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: @@ -322,11 +281,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_packagesDirectory = ":///packages"; + m_repoInfo.packages << ":///packages"; ignoreMessagesForComponentHash(QStringList() << "A" << "B", false); ignoreMessagesForCopyMetadata("A", true, false); //Only A has metadata @@ -343,7 +301,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(); } @@ -353,7 +311,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"); } @@ -362,16 +320,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(); @@ -380,9 +358,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(); } @@ -390,12 +368,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(); } @@ -404,10 +382,10 @@ 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); clearData(); - m_packagesDirectory = ":///packages_new"; + m_repoInfo.packages << ":///packages_new"; { // ignore messages ignoreMessagesForUniteMeta(false); ignoreMessageForCollectingPackages(QString(), QString(), "1.0.0"); @@ -416,8 +394,8 @@ private slots: ignoreMessagesForComponentHash(QStringList() << "C", false); } generateRepo(true, true, false); - verifyComponentRepository("1.0.0", true); - VerifyInstaller::verifyFileExistence(m_repositoryDir + "/C", + 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"); } @@ -427,13 +405,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"); } @@ -441,7 +419,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"); @@ -450,7 +428,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"); } @@ -458,17 +436,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(); } @@ -477,10 +485,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"); @@ -489,8 +498,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"); } @@ -498,10 +507,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"); @@ -509,24 +519,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_packagesDirectory.clear(); + m_repoInfo.packages.clear(); m_packages.clear(); - m_repositoryDirectories.clear(); + m_repoInfo.repositoryPackages.clear(); } private: - QString m_tmpMetaDir; - QString m_repositoryDir; - QString m_packagesDirectory; - QStringList m_repositoryDirectories; + QInstallerTools::RepositoryInfo m_repoInfo; QInstallerTools::PackageInfoVector m_packages; TempDirDeleter m_tempDirDeleter; }; |