summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-10-23 23:09:17 +0200
committerMichał Górny <mgorny@gentoo.org>2017-10-23 23:09:17 +0200
commitbad53c86d171ed892df985ecc73aa5fdb8710d50 (patch)
tree9a97e0a6796055c407de294b0b144b3de9f0baa0
parentfa4af74b282483ba1ba88b6b2e8ad2a39d81e737 (diff)
downloadgemato-bad53c86d171ed892df985ecc73aa5fdb8710d50.tar.gz
recursiveloader: Add convenience methods for file verification
-rw-r--r--gemato/recursiveloader.py20
-rw-r--r--tests/test_recursiveloader.py47
2 files changed, 66 insertions, 1 deletions
diff --git a/gemato/recursiveloader.py b/gemato/recursiveloader.py
index 9b72c0c..4c20d6d 100644
--- a/gemato/recursiveloader.py
+++ b/gemato/recursiveloader.py
@@ -110,6 +110,26 @@ class ManifestRecursiveLoader(object):
return e
return None
+ def verify_path(self, relpath):
+ """
+ Verify the path @relpath against appropriate Manifest entry.
+ If there is no matching entry, verification fails (as a stray
+ file). Returns result as verify_path().
+ """
+ real_path = os.path.join(self.root_directory, relpath)
+ path_entry = self.find_path_entry(relpath)
+ return gemato.verify.verify_path(real_path, path_entry)
+
+ def assert_path_verifies(self, relpath):
+ """
+ Verify the path @relpath against appropriate Manifest entry.
+ If there is no matching entry, verification fails (as a stray
+ file). Raises exception for failed verification.
+ """
+ real_path = os.path.join(self.root_directory, relpath)
+ path_entry = self.find_path_entry(relpath)
+ gemato.verify.assert_path_verifies(real_path, path_entry)
+
def find_dist_entry(self, filename, relpath=''):
"""
Find a matching entry for distfile @filename and return it.
diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py
index b60c44c..f495c68 100644
--- a/tests/test_recursiveloader.py
+++ b/tests/test_recursiveloader.py
@@ -17,16 +17,19 @@ class BasicNestingTest(unittest.TestCase):
FILES = {
'Manifest': u'''
TIMESTAMP 2017-01-01T01:01:01Z
-MANIFEST sub/Manifest 128 MD5 30fd28b98a23031c72793908dd35c530
+MANIFEST sub/Manifest 146 MD5 81180715a77069664b4b695e53bb856d
DIST topdistfile-1.txt 0 MD5 d41d8cd98f00b204e9800998ecf8427e
''',
'sub/Manifest': u'''
MANIFEST deeper/Manifest 50 MD5 0f7cd9ed779a4844f98d28315dd9176a
+OPTIONAL nonstray
DIST subdistfile-1.txt 0 MD5 d41d8cd98f00b204e9800998ecf8427e
''',
+ 'sub/stray': u'',
'sub/deeper/Manifest': u'''
DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e
''',
+ 'sub/deeper/test': u'',
}
def setUp(self):
@@ -105,6 +108,48 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e
self.assertEqual(m.find_dist_entry('topdistfile-1.txt', 'sub/file').path, 'topdistfile-1.txt')
self.assertEqual(m.find_dist_entry('subdistfile-1.txt', 'sub/file').path, 'subdistfile-1.txt')
+ def test_verify_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertEqual(m.verify_path('sub/deeper/test'), (True, []))
+
+ def test_verify_optional_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertEqual(m.verify_path('sub/nonstray'), (True, []))
+
+ def test_verify_nonexistent_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertEqual(m.verify_path('sub/deeper/nonexist'), (True, []))
+
+ def test_verify_stray_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertEqual(m.verify_path('sub/stray'),
+ (False, [('__exists__', False, True)]))
+
+ def test_assert_path_verifies(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ m.assert_path_verifies('sub/deeper/test')
+
+ def test_verify_optional_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ m.assert_path_verifies('sub/nonstray')
+
+ def test_verify_nonexistent_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ m.assert_path_verifies('sub/deeper/nonexist')
+
+ def test_verify_stray_path(self):
+ m = gemato.recursiveloader.ManifestRecursiveLoader(
+ os.path.join(self.dir, 'Manifest'))
+ self.assertRaises(gemato.verify.ManifestMismatch,
+ m.assert_path_verifies, 'sub/stray')
+
class MultipleManifestTest(unittest.TestCase):
DIRS = ['sub']