summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-10-24 22:25:04 +0200
committerMichał Górny <mgorny@gentoo.org>2017-10-24 22:25:04 +0200
commit25cb3dacc7c414b2540767acef7e2cc06c0375e1 (patch)
tree05061a13bf2de726307b29e79782ab283dea705a
parent1336959230029c42c9550ac6c39fa4d3ab62b0aa (diff)
downloadgemato-25cb3dacc7c414b2540767acef7e2cc06c0375e1.tar.gz
recursiveloader: Support running verification in non-strict mode
-rw-r--r--gemato/recursiveloader.py24
-rw-r--r--tests/test_recursiveloader.py47
2 files changed, 65 insertions, 6 deletions
diff --git a/gemato/recursiveloader.py b/gemato/recursiveloader.py
index b007121..07b0d0e 100644
--- a/gemato/recursiveloader.py
+++ b/gemato/recursiveloader.py
@@ -205,12 +205,26 @@ class ManifestRecursiveLoader(object):
out[fullpath] = e
return out
- def assert_directory_verifies(self, path=''):
+ def _verify_one_file(self, path, e, strict):
+ try:
+ gemato.verify.assert_path_verifies(path, e)
+ except gemato.verify.ManifestMismatch:
+ if strict:
+ raise
+ # skip MISC/OPTIONAL in non-strict mode
+ # TODO: provide a way to deliver warnings?
+ if (not isinstance(e, gemato.manifest.ManifestEntryOPTIONAL)
+ and not isinstance(e, gemato.manifest.ManifestEntryMISC)):
+ raise
+
+ def assert_directory_verifies(self, path='', strict=True):
"""
Verify the complete directory tree starting at @path (relative
to top Manifest directory). Includes testing for stray files.
Raises an exception if any of the files does not pass
verification.
+
+ If @strict is False, MISC/OPTIONAL mismatches will be ignored.
"""
entry_dict = self.get_file_entry_dict(path)
@@ -239,8 +253,7 @@ class ManifestRecursiveLoader(object):
if isinstance(de, gemato.manifest.ManifestEntryIGNORE):
skip_dirs.append(d)
else:
- gemato.verify.assert_path_verifies(
- os.path.join(dirpath, d), de)
+ self._verify_one_file(os.path.join(dirpath, d), de, strict)
# skip scanning ignored directories
for d in skip_dirs:
@@ -257,10 +270,9 @@ class ManifestRecursiveLoader(object):
if fpath == 'Manifest':
continue
fe = entry_dict.pop(fpath, None)
- gemato.verify.assert_path_verifies(
- os.path.join(dirpath, f), fe)
+ self._verify_one_file(os.path.join(dirpath, f), fe, strict)
# check for missing files
for relpath, e in entry_dict.items():
syspath = os.path.join(self.root_directory, relpath)
- gemato.verify.assert_path_verifies(syspath, e)
+ self._verify_one_file(syspath, e, strict)
diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py
index 2483030..8257691 100644
--- a/tests/test_recursiveloader.py
+++ b/tests/test_recursiveloader.py
@@ -658,3 +658,50 @@ IGNORE bar
m = gemato.recursiveloader.ManifestRecursiveLoader(
os.path.join(self.dir, 'Manifest'))
m.assert_directory_verifies('')
+
+
+class ManifestMiscEntryTest(TempDirTestCase):
+ """
+ Test for a Manifest file with MISC.
+ """
+
+ FILES = {
+ 'Manifest': u'''
+MISC foo 0 MD5 d41d8cd98f00b204e9800998ecf8427e
+''',
+ }
+
+ def test_assert_directory_verifies(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertRaises(gemato.verify.ManifestMismatch,
+ m.assert_directory_verifies, '')
+
+ def test_assert_directory_verifies_nonstrict(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ m.assert_directory_verifies('', strict=False)
+
+
+class ManifestOptionalEntryTest(TempDirTestCase):
+ """
+ Test for a Manifest file with OPTIONAL.
+ """
+
+ FILES = {
+ 'Manifest': u'''
+OPTIONAL foo
+''',
+ 'foo': u'test',
+ }
+
+ def test_assert_directory_verifies(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertRaises(gemato.verify.ManifestMismatch,
+ m.assert_directory_verifies, '')
+
+ def test_assert_directory_verifies_nonstrict(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ m.assert_directory_verifies('', strict=False)