diff options
author | Michał Górny <mgorny@gentoo.org> | 2017-10-23 23:09:17 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2017-10-23 23:09:17 +0200 |
commit | bad53c86d171ed892df985ecc73aa5fdb8710d50 (patch) | |
tree | 9a97e0a6796055c407de294b0b144b3de9f0baa0 | |
parent | fa4af74b282483ba1ba88b6b2e8ad2a39d81e737 (diff) | |
download | gemato-bad53c86d171ed892df985ecc73aa5fdb8710d50.tar.gz |
recursiveloader: Add convenience methods for file verification
-rw-r--r-- | gemato/recursiveloader.py | 20 | ||||
-rw-r--r-- | tests/test_recursiveloader.py | 47 |
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'] |