summaryrefslogtreecommitdiff
path: root/tests/test_recursiveloader.py
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-10-29 09:25:27 +0100
committerMichał Górny <mgorny@gentoo.org>2017-10-29 09:25:27 +0100
commit8f78c62730a468baf4ff1e9328a89f57bbbfb246 (patch)
tree7ac53394a059aa033c0397bea24b95bd06cfd6a7 /tests/test_recursiveloader.py
parentf67c7a02467f0e5975905504995f8c599bc323e5 (diff)
downloadgemato-8f78c62730a468baf4ff1e9328a89f57bbbfb246.tar.gz
recursiveloader: Fix ordering compressed Manifests
Diffstat (limited to 'tests/test_recursiveloader.py')
-rw-r--r--tests/test_recursiveloader.py52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py
index ccab094..5631458 100644
--- a/tests/test_recursiveloader.py
+++ b/tests/test_recursiveloader.py
@@ -1895,3 +1895,55 @@ MANIFEST sub/Manifest.gz 78 MD5 9c158f87b2445279d7c8aac439612fba
self.assertNotEqual(f.read(),
base64.b64decode(self.SUB_MANIFEST))
m.assert_directory_verifies()
+
+
+class CompressedManifestOrderingTest(TempDirTestCase):
+ """
+ Compressed Manifest paths can be shorter than regular, resulting
+ in wrong sort order.
+ """
+
+ MANIFEST = b'''
+MANIFEST a/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e
+'''
+ DIRS = ['a']
+ FILES = {
+ 'a/Manifest': u'',
+ 'a/stray': u'',
+ }
+
+ def setUp(self):
+ super(CompressedManifestOrderingTest, self).setUp()
+ self.manifest_gz = os.path.join(self.dir, 'Manifest.gz')
+ with gzip.GzipFile(self.manifest_gz, 'wb') as f:
+ f.write(self.MANIFEST)
+
+ def tearDown(self):
+ os.unlink(self.manifest_gz)
+ super(CompressedManifestOrderingTest, self).tearDown()
+
+ def test__iter_manifests_for_path_order(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ self.manifest_gz)
+ m.load_manifests_for_path('', recursive=True)
+ self.assertListEqual([d for mpath, d, k
+ in m._iter_manifests_for_path('a')],
+ ['a', ''])
+
+ def test_update_entries_for_directory(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ self.manifest_gz)
+ m.update_entries_for_directory('', hashes=['SHA256', 'SHA512'])
+ self.assertIsInstance(m.find_path_entry('a/stray'),
+ gemato.manifest.ManifestEntryDATA)
+ m.save_manifests()
+ m.assert_directory_verifies()
+
+ def test_cli_update(self):
+ self.assertEqual(
+ gemato.cli.main(['gemato', 'update', '--hashes=SHA256 SHA512',
+ self.dir]),
+ 0)
+ self.assertEqual(
+ gemato.cli.main(['gemato', 'verify', self.dir]),
+ 0)