summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-10-19 14:45:13 +0300
committerArttu Tarkiainen <arttu.tarkiainen@qt.io>2022-10-21 15:21:24 +0300
commit2dbb8c19ea19b9cef28e29899e50b788eded6f4d (patch)
tree410463f11d6cb3d56557a703c4cd55b3fd22602d /tests/auto
parentf5dff60486e4d6ef355e1420226f1d059b0e441d (diff)
Add possibility to synchronize metadata cache manually
The contents of the cache subdirectories and manifest.json may mismatch if the installer process is killed after the metadata fetch, because the manifest file is normally synchronized only when the cache object gets destroyed. While this is a recoverable error, it creates unnecessary overhead of discarding broken items and downloading them again. Add support for synchronizing the cache by the caller and do so each time the cache is updated by Metadatajob. Task-number: QTIFW-2817 Change-Id: Ia4cd3de44d57e8d732d11dc26968aa87323ada0f Reviewed-by: Katja Marttila <katja.marttila@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/installer/metadatacache/tst_metadatacache.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/auto/installer/metadatacache/tst_metadatacache.cpp b/tests/auto/installer/metadatacache/tst_metadatacache.cpp
index 46e4d1dfe..f3ab1b98e 100644
--- a/tests/auto/installer/metadatacache/tst_metadatacache.cpp
+++ b/tests/auto/installer/metadatacache/tst_metadatacache.cpp
@@ -86,6 +86,24 @@ private:
}
}
+ QStringList itemsFromManifest(const QString &manifestPath)
+ {
+ QFile manifestFile(manifestPath);
+ if (!manifestFile.open(QIODevice::ReadOnly))
+ return QStringList();
+
+ const QByteArray manifestData = manifestFile.readAll();
+ const QJsonDocument manifestJsonDoc(QJsonDocument::fromJson(manifestData));
+ const QJsonObject docJsonObject = manifestJsonDoc.object();
+ const QJsonArray itemsJsonArray = docJsonObject.value(QLatin1String("items")).toArray();
+
+ QStringList items;
+ for (const auto &itemJsonValue : itemsJsonArray)
+ items << itemJsonValue.toString();
+
+ return items;
+ }
+
QByteArray checksumFromUpdateFile(const QString &directory)
{
QFile updateFile(directory + QDir::separator() + QLatin1String("Updates.xml"));
@@ -130,6 +148,9 @@ private slots:
metadata = cache.itemByChecksum(m_newMetadataItemChecksum);
QVERIFY(metadata);
QVERIFY(metadata->isValid());
+ QVERIFY(!QFileInfo::exists(m_cachePath + "/manifest.json"));
+ QVERIFY(cache.sync());
+ QVERIFY(itemsFromManifest(m_cachePath + "/manifest.json").contains(QLatin1String(m_newMetadataItemChecksum)));
QVERIFY(cache.clear());
QVERIFY(!QFileInfo::exists(m_cachePath));
@@ -141,11 +162,16 @@ private slots:
GenericDataCache<Metadata> cache(m_cachePath, "Metadata", "1.0.0");
Metadata *metadata = new Metadata(":/data/local-temp-repository/");
+ QVERIFY(itemsFromManifest(m_cachePath + "/manifest.json").contains(QLatin1String(m_oldMetadataItemChecksum)));
QVERIFY(cache.registerItem(metadata));
metadata = cache.itemByChecksum(m_newMetadataItemChecksum);
QVERIFY(metadata);
QVERIFY(metadata->isValid());
+ QVERIFY(cache.sync());
+ const QStringList manifestItems = itemsFromManifest(m_cachePath + "/manifest.json");
+ QVERIFY(manifestItems.contains(QLatin1String(m_oldMetadataItemChecksum)));
+ QVERIFY(manifestItems.contains(QLatin1String(m_newMetadataItemChecksum)));
QVERIFY(cache.clear());
QVERIFY(!QFileInfo::exists(m_cachePath));