summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2020-09-05 12:26:54 +0200
committerMichał Górny <mgorny@gentoo.org>2020-09-05 12:26:54 +0200
commit20f6d86a50ee2bc3b46541fa430d89d37728475f (patch)
tree06216c1ba117ee0c50dc6de18a83bb634a289837 /tests
parent473fa5444186143f58dffbf1d14982a8905b1fc8 (diff)
downloadgemato-20f6d86a50ee2bc3b46541fa430d89d37728475f.tar.gz
Handle invalid compressed files when collecting Manifests
Fix load_unregistered_manifests() not to crash on 'Manifest*' files that do not contain valid compressed data. Instead, treat them as unknown files, similarly how Manifests with invalid data are handled. Signed-off-by: Michał Górny <mgorny@gentoo.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/test_recursiveloader.py69
1 files changed, 59 insertions, 10 deletions
diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py
index 37bfae9..42b2821 100644
--- a/tests/test_recursiveloader.py
+++ b/tests/test_recursiveloader.py
@@ -568,14 +568,32 @@ class StrayInvalidCompressedManifestLayout(BaseLayout):
'sub/test': '',
}
+ COMPRESSION_SUFFIX = 'gz'
+
@classmethod
def create(cls, tmp_path):
super().create(tmp_path)
- with open(tmp_path / 'sub/Manifest.gz', 'w') as f:
+ with open(tmp_path / f'sub/Manifest.{cls.COMPRESSION_SUFFIX}',
+ 'w') as f:
# important: this is written uncompressed
f.write('I AM SOOO INVALID\n')
+class StrayInvalidCompressedManifestBz2Layout(
+ StrayInvalidCompressedManifestLayout):
+ COMPRESSION_SUFFIX = 'bz2'
+
+
+class StrayInvalidCompressedManifestLzmaLayout(
+ StrayInvalidCompressedManifestLayout):
+ COMPRESSION_SUFFIX = 'lzma'
+
+
+class StrayInvalidCompressedManifestXzLayout(
+ StrayInvalidCompressedManifestLayout):
+ COMPRESSION_SUFFIX = 'xz'
+
+
class FilenameWhitespaceLayout(BaseLayout):
FILENAME = ' foo bar '
MANIFESTS = {
@@ -767,6 +785,9 @@ FLAT_LAYOUTS = [
StrayCompressedManifestLayout,
StrayInvalidManifestLayout,
StrayInvalidCompressedManifestLayout,
+ StrayInvalidCompressedManifestBz2Layout,
+ StrayInvalidCompressedManifestLzmaLayout,
+ StrayInvalidCompressedManifestXzLayout,
FilenameWhitespaceLayout,
FilenameBackslashLayout,
NonexistingDirectoryLayout,
@@ -1725,17 +1746,46 @@ def test_update_entry_for_path_no_hash_specified(layout_factory):
'DATA sub/Manifest 19 MD5 1c0817af3a5def5d5c90b139988727a7\n'
'DATA sub/test 0 MD5 d41d8cd98f00b204e9800998ecf8427e\n',
}),
- pytest.param(
- StrayInvalidCompressedManifestLayout,
+ (StrayInvalidCompressedManifestLayout,
+ ['MD5'],
+ ManifestRecursiveLoader.update_entries_for_directory,
+ '',
+ None,
+ None,
+ {'Manifest':
+ 'DATA sub/Manifest.gz 18 MD5 f937f0ff743477e4f70ef2b79672c9bc\n'
+ 'DATA sub/test 0 MD5 d41d8cd98f00b204e9800998ecf8427e\n',
+ }),
+ (StrayInvalidCompressedManifestBz2Layout,
+ ['MD5'],
+ ManifestRecursiveLoader.update_entries_for_directory,
+ '',
+ None,
+ None,
+ {'Manifest':
+ 'DATA sub/Manifest.bz2 18 MD5 f937f0ff743477e4f70ef2b79672c9bc\n'
+ 'DATA sub/test 0 MD5 d41d8cd98f00b204e9800998ecf8427e\n',
+ }),
+ (StrayInvalidCompressedManifestLzmaLayout,
+ ['MD5'],
+ ManifestRecursiveLoader.update_entries_for_directory,
+ '',
+ None,
+ None,
+ {'Manifest':
+ 'DATA sub/Manifest.lzma 18 MD5 f937f0ff743477e4f70ef2b79672c9bc\n'
+ 'DATA sub/test 0 MD5 d41d8cd98f00b204e9800998ecf8427e\n',
+ }),
+ (StrayInvalidCompressedManifestXzLayout,
['MD5'],
ManifestRecursiveLoader.update_entries_for_directory,
'',
None,
None,
{'Manifest':
- 'DATA sub/test 0 MD5 d41d8cd98f00b204e9800998ecf8427e\n'
- 'DATA sub/Manifest.gz 18 MD5 f937f0ff743477e4f70ef2b79672c9bc\n',
- }, marks=pytest.mark.xfail),
+ 'DATA sub/Manifest.xz 18 MD5 f937f0ff743477e4f70ef2b79672c9bc\n'
+ 'DATA sub/test 0 MD5 d41d8cd98f00b204e9800998ecf8427e\n',
+ }),
(FilenameWhitespaceLayout,
['MD5'],
ManifestRecursiveLoader.update_entries_for_directory,
@@ -1983,16 +2033,15 @@ def test_update_entry_and_discard(layout_factory):
'TIMESTAMP\n',
},
'TIMESTAMP'),
- pytest.param(
- StrayInvalidCompressedManifestLayout,
+ (StrayInvalidCompressedManifestLayout,
'',
{'Manifest':
- 'DATA sub/test 0 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709\n'
'DATA sub/Manifest.gz 18 SHA1 '
'6af661c09147db2a2b51ae7c3cf2834d88884596\n'
+ 'DATA sub/test 0 SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709\n'
'TIMESTAMP\n',
},
- 'TIMESTAMP', marks=pytest.mark.xfail),
+ 'TIMESTAMP'),
(FilenameWhitespaceLayout,
'',
{'Manifest':