summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/installer/binaryformat/tst_binaryformat.cpp4
-rw-r--r--tests/auto/installer/clientserver/tst_clientserver.cpp2
-rw-r--r--tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7zbin182 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z.sha11
-rw-r--r--tests/auto/installer/cliinterface/data/repository/A/1.0.2-1meta.7zbin106 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/AB/1.0.2-1meta.7zbin114 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7zbin182 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z.sha11
-rw-r--r--tests/auto/installer/cliinterface/data/repository/B/1.0.0-1meta.7zbin106 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7zbin182 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z.sha11
-rw-r--r--tests/auto/installer/cliinterface/data/repository/C/1.0.0-1meta.7zbin106 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/repository/Updates.xml23
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7zbin184 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z.sha11
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0meta.7zbin106 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/AB/1.0.2-1meta.7zbin114 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7zbin184 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z.sha11
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0meta.7zbin106 -> 0 bytes
-rw-r--r--tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/Updates.xml10
-rw-r--r--tests/auto/installer/cliinterface/tst_cliinterface.cpp36
-rw-r--r--tests/auto/installer/contentshaupdate/contentshaupdate.pro9
-rw-r--r--tests/auto/installer/contentshaupdate/data/repository/Updates.xml48
-rw-r--r--tests/auto/installer/contentshaupdate/data/repository/componentA/1.0.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repository/componentB/1.0.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repository/componentC/1.0.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repository/componentD/1.0.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repositoryUpdate/Updates.xml48
-rw-r--r--tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentA/0.1.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentB/0.1.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentC/2.0.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentD/2.0.0content.7zbin0 -> 243 bytes
-rw-r--r--tests/auto/installer/contentshaupdate/settings.qrc14
-rw-r--r--tests/auto/installer/contentshaupdate/tst_contentshaupdate.cpp108
-rw-r--r--tests/auto/installer/factory/tst_factory.cpp8
-rw-r--r--tests/auto/installer/installer.pro3
-rw-r--r--tests/auto/installer/metadatajob/data/config.xml8
-rw-r--r--tests/auto/installer/metadatajob/settings.qrc1
-rw-r--r--tests/auto/installer/metadatajob/tst_metadatajob.cpp5
-rw-r--r--tests/auto/installer/packagemanagercore/tst_packagemanagercore.cpp6
-rw-r--r--tests/auto/installer/registerfiletypeoperation/tst_registerfiletypeoperation.cpp3
-rw-r--r--tests/auto/installer/repository/data/compressedRepository/compressedRepository.7zbin0 -> 542 bytes
-rw-r--r--tests/auto/installer/repository/data/repository/A/1.0.2content.7zbin0 -> 165 bytes
-rw-r--r--tests/auto/installer/repository/data/repository/Updates.xml13
-rw-r--r--tests/auto/installer/repository/repository.pro4
-rw-r--r--tests/auto/installer/repository/settings.qrc7
-rw-r--r--tests/auto/installer/repository/tst_repository.cpp49
-rw-r--r--tests/auto/installer/settingsoperation/tst_settingsoperation.cpp2
-rw-r--r--tests/auto/tools/repotest/settings.qrc24
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7zbin0 -> 32 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z.sha11
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7zbin0 -> 209 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7zbin0 -> 32 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z.sha11
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7zbin0 -> 106 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_1/Updates.xml28
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7zbin0 -> 32 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z.sha11
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7zbin0 -> 221 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7zbin0 -> 32 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z.sha11
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7zbin0 -> 106 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_2/Updates.xml28
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7zbin0 -> 32 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z.sha11
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7zbin0 -> 221 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7zbin0 -> 32 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z.sha11
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7zbin0 -> 106 bytes
-rw-r--r--tests/auto/tools/repotest/test_package_versions/repository_3/Updates.xml28
-rw-r--r--tests/auto/tools/repotest/tst_repotest.cpp277
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
deleted file mode 100644
index 5a9383e7e..000000000
--- a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1content.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 6ef0b7959..000000000
--- a/tests/auto/installer/cliinterface/data/repository/A/1.0.2-1meta.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 6b5e5ac91..000000000
--- a/tests/auto/installer/cliinterface/data/repository/AB/1.0.2-1meta.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index dfe41ad15..000000000
--- a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1content.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 12d54f94c..000000000
--- a/tests/auto/installer/cliinterface/data/repository/B/1.0.0-1meta.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 7d03dca9c..000000000
--- a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1content.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 46bae0179..000000000
--- a/tests/auto/installer/cliinterface/data/repository/C/1.0.0-1meta.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index d7fbf4d8e..000000000
--- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0content.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index d783c7c1c..000000000
--- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/A/2.0.0meta.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 20f2aca2d..000000000
--- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/AB/1.0.2-1meta.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index bd0bc9352..000000000
--- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0content.7z
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index f92853734..000000000
--- a/tests/auto/installer/cliinterface/data/uninstallableComponentsRepository/B/2.0.0meta.7z
+++ /dev/null
Binary files differ
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
new file mode 100644
index 000000000..46a9f1d1e
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repository/componentA/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..5f1fb2e1b
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repository/componentB/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..83e82b5a3
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repository/componentC/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..da50742a4
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repository/componentD/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..bdbabc7fd
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentA/0.1.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..1c1129b9f
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentB/0.1.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..7f75bf503
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentC/2.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..4207dfbf2
--- /dev/null
+++ b/tests/auto/installer/contentshaupdate/data/repositoryUpdate/componentD/2.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..fa75f2979
--- /dev/null
+++ b/tests/auto/installer/repository/data/compressedRepository/compressedRepository.7z
Binary files differ
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
new file mode 100644
index 000000000..5531e9072
--- /dev/null
+++ b/tests/auto/installer/repository/data/repository/A/1.0.2content.7z
Binary files differ
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
new file mode 100644
index 000000000..46e2c9124
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..af0863696
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_1/A/2.0.0meta.7z
Binary files differ
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
new file mode 100644
index 000000000..46e2c9124
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..e5be1148e
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_1/B/1.0.0meta.7z
Binary files differ
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
new file mode 100644
index 000000000..46e2c9124
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..c4da482bf
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_2/A/1.0.0meta.7z
Binary files differ
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
new file mode 100644
index 000000000..46e2c9124
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..e5be1148e
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_2/B/1.0.0meta.7z
Binary files differ
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
new file mode 100644
index 000000000..46e2c9124
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..3706e8dd8
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_3/A/1.0.0meta.7z
Binary files differ
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
new file mode 100644
index 000000000..46e2c9124
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0content.7z
Binary files differ
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
new file mode 100644
index 000000000..e5be1148e
--- /dev/null
+++ b/tests/auto/tools/repotest/test_package_versions/repository_3/B/3.0.0meta.7z
Binary files differ
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;
};