diff options
-rw-r--r-- | gemato/cli.py | 2 | ||||
-rw-r--r-- | gemato/manifest.py | 22 | ||||
-rw-r--r-- | gemato/recursiveloader.py | 20 | ||||
-rw-r--r-- | gemato/verify.py | 7 | ||||
-rw-r--r-- | tests/test_manifest.py | 23 | ||||
-rw-r--r-- | tests/test_openpgp.py | 67 | ||||
-rw-r--r-- | tests/test_recursiveloader.py | 156 | ||||
-rw-r--r-- | tests/test_verify.py | 70 |
8 files changed, 42 insertions, 325 deletions
diff --git a/gemato/cli.py b/gemato/cli.py index a52030c..7440862 100644 --- a/gemato/cli.py +++ b/gemato/cli.py @@ -257,7 +257,7 @@ def main(argv): help='Require that the top-level Manifest is OpenPGP signed') verify.add_argument('-S', '--no-strict', action='store_false', dest='strict', - help='Do not fail on non-strict Manifest issues (MISC/OPTIONAL entries)') + help='Do not fail on non-strict Manifest issues (MISC entries)') verify.set_defaults(func=do_verify) update = subp.add_parser('update', diff --git a/gemato/manifest.py b/gemato/manifest.py index ebdb71f..029f93b 100644 --- a/gemato/manifest.py +++ b/gemato/manifest.py @@ -93,27 +93,6 @@ class ManifestEntryIGNORE(ManifestPathEntry): return (self.tag, self.path) -class ManifestEntryOPTIONAL(ManifestPathEntry): - """ - Optional path. - """ - - tag = 'OPTIONAL' - - def __init__(self, path): - super(ManifestEntryOPTIONAL, self).__init__(path) - self.size = None - self.checksums = {} - - @classmethod - def from_list(cls, l): - assert l[0] == cls.tag - return cls(cls.process_path(l)) - - def to_list(self): - return (self.tag, self.path) - - class ManifestFileEntry(ManifestPathEntry): """ Base class for entries providing checksums for a path. @@ -295,7 +274,6 @@ MANIFEST_TAG_MAPPING = { 'IGNORE': ManifestEntryIGNORE, 'DATA': ManifestEntryDATA, 'MISC': ManifestEntryMISC, - 'OPTIONAL': ManifestEntryOPTIONAL, 'DIST': ManifestEntryDIST, 'EBUILD': ManifestEntryEBUILD, 'AUX': ManifestEntryAUX, diff --git a/gemato/recursiveloader.py b/gemato/recursiveloader.py index 5369271..a58159c 100644 --- a/gemato/recursiveloader.py +++ b/gemato/recursiveloader.py @@ -387,7 +387,7 @@ class ManifestRecursiveLoader(object): last_mtime=last_mtime) if not ret: - if e is not None and e.tag in ('MISC', 'OPTIONAL'): + if e is not None and e.tag == 'MISC': h = warn_handler else: h = fail_handler @@ -409,7 +409,7 @@ class ManifestRecursiveLoader(object): @fail_handler is the callback called whenever verification fails for 'strong' entries (or stray files). @warn_handler - is called whenever verification fails for MISC/OPTIONAL entries. + is called whenever verification fails for MISC entries. The handlers are passed a ManifestMismatch exception object. The default fail handler raises the exception. Unless specified @@ -611,7 +611,7 @@ class ManifestRecursiveLoader(object): does not check if they were compatible. The type of MANIFEST, DATA and MISC derived entries - is preserved. OPTIONAL entries are left as-is. + is preserved. If the path exists and has no Manifest entry, a new entry of type @new_entry_type will be created in the Manifest most @@ -620,7 +620,7 @@ class ManifestRecursiveLoader(object): to an existing Manifest. If the path does not exist, all Manifest entries for it will - be removed except for OPTIONAL entries. + be removed. @hashes override the value specified in the constructor. If None, the values from the constructor are used. If those were @@ -648,11 +648,6 @@ class ManifestRecursiveLoader(object): # distfiles are not local files, so skip them # timestamp is not a file ;-) pass - elif e.tag == 'OPTIONAL': - # leave OPTIONAL entries as-is - fullpath = os.path.join(relpath, e.path) - if fullpath == path: - had_entry = True else: # we update either file at the specified path # or any relevant Manifests @@ -693,8 +688,7 @@ class ManifestRecursiveLoader(object): assert hashes is not None for mpath, relpath, m in self._iter_manifests_for_path(path): # add to the first relevant Manifest - assert new_entry_type not in ( - 'DIST', 'IGNORE', 'OPTIONAL') + assert new_entry_type not in ('DIST', 'IGNORE') newpath = os.path.relpath(path, relpath) if new_entry_type == 'AUX': # AUX has implicit files/ prefix @@ -941,7 +935,7 @@ class ManifestRecursiveLoader(object): fpath = os.path.join(relpath, f) mpath, fe = entry_dict.pop(fpath, (None, None)) if fe is not None: - if fe.tag in ('IGNORE', 'OPTIONAL'): + if fe.tag == 'IGNORE': continue if fe.tag == 'MANIFEST': manifest_stack.append((fpath, relpath, @@ -1025,7 +1019,7 @@ class ManifestRecursiveLoader(object): # check for removed files for relpath, me in entry_dict.items(): mpath, fe = me - if fe.tag in ('IGNORE', 'OPTIONAL'): + if fe.tag == 'IGNORE': continue self.loaded_manifests[mpath].entries.remove(fe) diff --git a/gemato/verify.py b/gemato/verify.py index 942b93e..6497cd7 100644 --- a/gemato/verify.py +++ b/gemato/verify.py @@ -154,9 +154,8 @@ def verify_path(path, e, expected_dev=None, last_mtime=None): if e.tag == 'IGNORE': return (True, []) - # OPTIONAL does not contain checksums, and expects not to exist - # same goes for None - if e is None or e.tag == 'OPTIONAL': + # None indicates we have no entry, so the file must not exist + if e is None: expect_exist = False checksums = () else: @@ -238,7 +237,7 @@ def update_entry_for_path(path, e, hashes=None, expected_dev=None, the checksum calculation is skipped. """ - assert e.tag not in ('IGNORE', 'OPTIONAL', 'TIMESTAMP') + assert e.tag not in ('IGNORE', 'TIMESTAMP') if hashes is None: hashes = list(e.checksums) diff --git a/tests/test_manifest.py b/tests/test_manifest.py index ed5042d..a99b31c 100644 --- a/tests/test_manifest.py +++ b/tests/test_manifest.py @@ -17,7 +17,6 @@ MANIFEST eclass/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6 IGNORE local DATA myebuild-0.ebuild 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 MISC metadata.xml 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -OPTIONAL ChangeLog DIST mydistfile.tar.gz 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 DATA foo.txt 0 ''' @@ -82,7 +81,6 @@ class ManifestTest(unittest.TestCase): self.assertIsNone(m.find_path_entry('locale')) self.assertEqual(m.find_path_entry('myebuild-0.ebuild').path, 'myebuild-0.ebuild') self.assertEqual(m.find_path_entry('metadata.xml').path, 'metadata.xml') - self.assertEqual(m.find_path_entry('ChangeLog').path, 'ChangeLog') self.assertIsNone(m.find_path_entry('mydistfile.tar.gz')) def test_find_path_entry_AUX(self): @@ -128,7 +126,6 @@ DIST mydistfile.tar.gz 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4 IGNORE local MANIFEST eclass/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 MISC metadata.xml 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -OPTIONAL ChangeLog TIMESTAMP 2017-10-22T18:06:41Z '''.lstrip()) @@ -187,13 +184,6 @@ class ManifestEntryTest(unittest.TestCase): self.assertListEqual(list(m.to_list()), ['MISC'] + list(self.file_vals)) - def test_OPTIONAL(self): - self.assertEqual(gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', 'test')).path, - 'test') - self.assertListEqual(list(gemato.manifest.ManifestEntryOPTIONAL('test').to_list()), - ['OPTIONAL', 'test']) - def test_DIST(self): m = gemato.manifest.ManifestEntryDIST.from_list( ('DIST',) + self.file_vals) @@ -246,10 +236,6 @@ class ManifestEntryTest(unittest.TestCase): self.assertRaises(gemato.exceptions.ManifestSyntaxError, gemato.manifest.ManifestEntryIGNORE.from_list, ('IGNORE', '/foo',)) self.assertRaises(gemato.exceptions.ManifestSyntaxError, - gemato.manifest.ManifestEntryOPTIONAL.from_list, ('OPTIONAL', '',)) - self.assertRaises(gemato.exceptions.ManifestSyntaxError, - gemato.manifest.ManifestEntryOPTIONAL.from_list, ('OPTIONAL', '/foo',)) - self.assertRaises(gemato.exceptions.ManifestSyntaxError, gemato.manifest.ManifestEntryDATA.from_list, ('DATA', '',)) self.assertRaises(gemato.exceptions.ManifestSyntaxError, gemato.manifest.ManifestEntryDATA.from_list, ('DATA', '/foo',)) @@ -360,10 +346,6 @@ class ManifestEntryTest(unittest.TestCase): self.assertRaises(gemato.exceptions.ManifestSyntaxError, gemato.manifest.ManifestEntryMISC.from_list, ('MISC', 'foo')) self.assertRaises(gemato.exceptions.ManifestSyntaxError, - gemato.manifest.ManifestEntryOPTIONAL.from_list, ('OPTIONAL',)) - self.assertRaises(gemato.exceptions.ManifestSyntaxError, - gemato.manifest.ManifestEntryOPTIONAL.from_list, ('OPTIONAL', 'foo', 'bar')) - self.assertRaises(gemato.exceptions.ManifestSyntaxError, gemato.manifest.ManifestEntryDIST.from_list, ('DIST',)) self.assertRaises(gemato.exceptions.ManifestSyntaxError, gemato.manifest.ManifestEntryDIST.from_list, ('DIST', 'foo')) @@ -424,11 +406,6 @@ class NewManifestEntryTest(unittest.TestCase): 'test', 32, {}), gemato.manifest.ManifestEntryMISC) - def test_OPTIONAL(self): - self.assertIsInstance( - gemato.manifest.new_manifest_entry('OPTIONAL', 'test'), - gemato.manifest.ManifestEntryOPTIONAL) - def test_DIST(self): self.assertIsInstance( gemato.manifest.new_manifest_entry('DIST', diff --git a/tests/test_openpgp.py b/tests/test_openpgp.py index 2c35880..0e765af 100644 --- a/tests/test_openpgp.py +++ b/tests/test_openpgp.py @@ -96,79 +96,70 @@ jCvJNJ7pU8YnJSRTQDH0PZEupAdzDU/AhGSrBz5+Jr7N0pQIxq4duE/Q SIGNED_MANIFEST = u''' -----BEGIN PGP SIGNED MESSAGE----- -Hash: SHA512 +Hash: SHA256 TIMESTAMP 2017-10-22T18:06:41Z MANIFEST eclass/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 IGNORE local DATA myebuild-0.ebuild 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 MISC metadata.xml 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -OPTIONAL ChangeLog DIST mydistfile.tar.gz 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -----BEGIN PGP SIGNATURE----- -iQGTBAEBCgB9FiEEgeEsFr2NzWC+GAhFE2iA5yp7E4QFAlnwXQpfFIAAAAAALgAo -aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDgx -RTEyQzE2QkQ4RENENjBCRTE4MDg0NTEzNjg4MEU3MkE3QjEzODQACgkQE2iA5yp7 -E4ScZAf+IF4suRtuN3bJki2zyYV/1VtSekK96tO+IzXxXDY0OKXmf61R6ZuuXcUD -Q+DlBONMILG+CDY+qiDp6snEWPmeLuh57qjkxilTgEX88W7OSCSdvGzSbC5WIRQG -KHtfZWtVVrZHTzQ6MF3u2Vombkpra/CQrf4Yx+8zdkorsoXwZ6ZjriB3W/zTUWIJ -XUy2tNfupdu72q9ske3dhVLhUEjtBzq5MlTf6gUjLBEsIHCGSafO2VG00lii3q4E -14EEilADJlKAOwK5WQUmAOjeeC60ck5EW5tGBotncd954v6n42pwlVXVmqSOJdYy -9F1V8N1m6n9UEUQ7Hhrv/+BTDPJO0A== -=9naF +iQEzBAEBCAAdFiEEgeEsFr2NzWC+GAhFE2iA5yp7E4QFAloCx+YACgkQE2iA5yp7 +E4TYrwf+JxjkVDNtvSN3HjQmdtcayLsaliw/2kqjoaQKs0lZD8+NRe7xPmwSm4bP +XKfoouJ0+/s87vuYJpBBCjtUDA9C9yZIeRTo8+eW6XsZbRRUmUD5ylTS+FpSsUrS +bEyYk4yZQMYrat+GQ1QBv+625nqnSDv5LZHBBZ/rG36GGlwHPbIKIishnDfdG2QQ +zuxkqepNq4Inzp//ES7Bv4qbTzyBI//HzfY31vOgdhhs5N5Ytez3Xxv/KNOTYdi1 +ZIfqeaQ4NoefmxQunyEjT+8X2DMaEeHQni7dwjQc+FiN4ReV9aWbLo2O2cArqEHR +mkkhTd2Auao4D2K74BePBuiZ9+eDQA== +=khff -----END PGP SIGNATURE----- ''' DASH_ESCAPED_SIGNED_MANIFEST = u''' -----BEGIN PGP SIGNED MESSAGE----- -Hash: SHA512 +Hash: SHA256 - TIMESTAMP 2017-10-22T18:06:41Z - MANIFEST eclass/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 IGNORE local - DATA myebuild-0.ebuild 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 MISC metadata.xml 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -- OPTIONAL ChangeLog - DIST mydistfile.tar.gz 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -----BEGIN PGP SIGNATURE----- -iQGTBAEBCgB9FiEEgeEsFr2NzWC+GAhFE2iA5yp7E4QFAlnwXQpfFIAAAAAALgAo -aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDgx -RTEyQzE2QkQ4RENENjBCRTE4MDg0NTEzNjg4MEU3MkE3QjEzODQACgkQE2iA5yp7 -E4ScZAf+IF4suRtuN3bJki2zyYV/1VtSekK96tO+IzXxXDY0OKXmf61R6ZuuXcUD -Q+DlBONMILG+CDY+qiDp6snEWPmeLuh57qjkxilTgEX88W7OSCSdvGzSbC5WIRQG -KHtfZWtVVrZHTzQ6MF3u2Vombkpra/CQrf4Yx+8zdkorsoXwZ6ZjriB3W/zTUWIJ -XUy2tNfupdu72q9ske3dhVLhUEjtBzq5MlTf6gUjLBEsIHCGSafO2VG00lii3q4E -14EEilADJlKAOwK5WQUmAOjeeC60ck5EW5tGBotncd954v6n42pwlVXVmqSOJdYy -9F1V8N1m6n9UEUQ7Hhrv/+BTDPJO0A== -=9naF +iQEzBAEBCAAdFiEEgeEsFr2NzWC+GAhFE2iA5yp7E4QFAloCx+YACgkQE2iA5yp7 +E4TYrwf+JxjkVDNtvSN3HjQmdtcayLsaliw/2kqjoaQKs0lZD8+NRe7xPmwSm4bP +XKfoouJ0+/s87vuYJpBBCjtUDA9C9yZIeRTo8+eW6XsZbRRUmUD5ylTS+FpSsUrS +bEyYk4yZQMYrat+GQ1QBv+625nqnSDv5LZHBBZ/rG36GGlwHPbIKIishnDfdG2QQ +zuxkqepNq4Inzp//ES7Bv4qbTzyBI//HzfY31vOgdhhs5N5Ytez3Xxv/KNOTYdi1 +ZIfqeaQ4NoefmxQunyEjT+8X2DMaEeHQni7dwjQc+FiN4ReV9aWbLo2O2cArqEHR +mkkhTd2Auao4D2K74BePBuiZ9+eDQA== +=khff -----END PGP SIGNATURE----- ''' MODIFIED_SIGNED_MANIFEST = u''' -----BEGIN PGP SIGNED MESSAGE----- -Hash: SHA512 +Hash: SHA256 TIMESTAMP 2017-10-22T18:06:41Z MANIFEST eclass/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 IGNORE local DATA myebuild-0.ebuild 32 MISC metadata.xml 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -OPTIONAL ChangeLog DIST mydistfile.tar.gz 0 MD5 d41d8cd98f00b204e9800998ecf8427e SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 -----BEGIN PGP SIGNATURE----- -iQGTBAEBCgB9FiEEgeEsFr2NzWC+GAhFE2iA5yp7E4QFAlnwXQpfFIAAAAAALgAo -aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldDgx -RTEyQzE2QkQ4RENENjBCRTE4MDg0NTEzNjg4MEU3MkE3QjEzODQACgkQE2iA5yp7 -E4ScZAf+IF4suRtuN3bJki2zyYV/1VtSekK96tO+IzXxXDY0OKXmf61R6ZuuXcUD -Q+DlBONMILG+CDY+qiDp6snEWPmeLuh57qjkxilTgEX88W7OSCSdvGzSbC5WIRQG -KHtfZWtVVrZHTzQ6MF3u2Vombkpra/CQrf4Yx+8zdkorsoXwZ6ZjriB3W/zTUWIJ -XUy2tNfupdu72q9ske3dhVLhUEjtBzq5MlTf6gUjLBEsIHCGSafO2VG00lii3q4E -14EEilADJlKAOwK5WQUmAOjeeC60ck5EW5tGBotncd954v6n42pwlVXVmqSOJdYy -9F1V8N1m6n9UEUQ7Hhrv/+BTDPJO0A== -=9naF +iQEzBAEBCAAdFiEEgeEsFr2NzWC+GAhFE2iA5yp7E4QFAloCx+YACgkQE2iA5yp7 +E4TYrwf+JxjkVDNtvSN3HjQmdtcayLsaliw/2kqjoaQKs0lZD8+NRe7xPmwSm4bP +XKfoouJ0+/s87vuYJpBBCjtUDA9C9yZIeRTo8+eW6XsZbRRUmUD5ylTS+FpSsUrS +bEyYk4yZQMYrat+GQ1QBv+625nqnSDv5LZHBBZ/rG36GGlwHPbIKIishnDfdG2QQ +zuxkqepNq4Inzp//ES7Bv4qbTzyBI//HzfY31vOgdhhs5N5Ytez3Xxv/KNOTYdi1 +ZIfqeaQ4NoefmxQunyEjT+8X2DMaEeHQni7dwjQc+FiN4ReV9aWbLo2O2cArqEHR +mkkhTd2Auao4D2K74BePBuiZ9+eDQA== +=khff -----END PGP SIGNATURE----- ''' @@ -215,13 +206,13 @@ class SignedManifestTest(unittest.TestCase): def test_junk_before_manifest_load(self): m = gemato.manifest.ManifestFile() - with io.StringIO('OPTIONAL test\n' + SIGNED_MANIFEST) as f: + with io.StringIO('IGNORE test\n' + SIGNED_MANIFEST) as f: self.assertRaises(gemato.exceptions.ManifestUnsignedData, m.load, f, verify_openpgp=False) def test_junk_after_manifest_load(self): m = gemato.manifest.ManifestFile() - with io.StringIO(SIGNED_MANIFEST + 'OPTIONAL test\n') as f: + with io.StringIO(SIGNED_MANIFEST + 'IGNORE test\n') as f: self.assertRaises(gemato.exceptions.ManifestUnsignedData, m.load, f, verify_openpgp=False) diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py index 3d51d8b..380ce34 100644 --- a/tests/test_recursiveloader.py +++ b/tests/test_recursiveloader.py @@ -22,13 +22,12 @@ class BasicNestingTest(TempDirTestCase): FILES = { 'Manifest': u''' TIMESTAMP 2017-01-01T01:01:01Z -MANIFEST sub/Manifest 146 MD5 81180715a77069664b4b695e53bb856d +MANIFEST sub/Manifest 128 MD5 30fd28b98a23031c72793908dd35c530 MANIFEST other/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e 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'', @@ -159,11 +158,6 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e 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')) @@ -180,11 +174,6 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e os.path.join(self.dir, 'Manifest')) m.assert_path_verifies('sub/deeper/test') - def test_assert_path_verifies_optional_path(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - m.assert_path_verifies('sub/nonstray') - def test_assert_path_verifies_nonexistent_path(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest')) @@ -204,13 +193,11 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e frozenset(( 'other/Manifest', 'sub/Manifest', - 'sub/nonstray', 'sub/deeper/Manifest', 'sub/deeper/test', ))) self.assertEqual(entries['other/Manifest'].path, 'other/Manifest') self.assertEqual(entries['sub/Manifest'].path, 'sub/Manifest') - self.assertEqual(entries['sub/nonstray'].path, 'nonstray') self.assertEqual(entries['sub/deeper/Manifest'].path, 'deeper/Manifest') self.assertEqual(entries['sub/deeper/test'].path, 'test') @@ -249,18 +236,15 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e frozenset(( 'other/Manifest', 'sub/Manifest', - 'sub/nonstray', 'sub/deeper/Manifest', 'sub/deeper/test', ))) self.assertEqual(entries['other/Manifest'][0], 'Manifest') self.assertEqual(entries['sub/Manifest'][0], 'Manifest') - self.assertEqual(entries['sub/nonstray'][0], 'sub/Manifest') self.assertEqual(entries['sub/deeper/Manifest'][0], 'sub/Manifest') self.assertEqual(entries['sub/deeper/test'][0], 'sub/deeper/Manifest') self.assertEqual(entries['other/Manifest'][1].path, 'other/Manifest') self.assertEqual(entries['sub/Manifest'][1].path, 'sub/Manifest') - self.assertEqual(entries['sub/nonstray'][1].path, 'nonstray') self.assertEqual(entries['sub/deeper/Manifest'][1].path, 'deeper/Manifest') self.assertEqual(entries['sub/deeper/test'][1].path, 'test') @@ -271,12 +255,10 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e self.assertSetEqual(frozenset(entries), frozenset(( 'sub/Manifest', - 'sub/nonstray', 'sub/deeper/Manifest', 'sub/deeper/test', ))) self.assertEqual(entries['sub/Manifest'].path, 'sub/Manifest') - self.assertEqual(entries['sub/nonstray'].path, 'nonstray') self.assertEqual(entries['sub/deeper/Manifest'].path, 'deeper/Manifest') self.assertEqual(entries['sub/deeper/test'].path, 'test') @@ -288,16 +270,13 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e self.assertSetEqual(frozenset(entries), frozenset(( 'sub/Manifest', - 'sub/nonstray', 'sub/deeper/Manifest', 'sub/deeper/test', ))) self.assertEqual(entries['sub/Manifest'][0], 'Manifest') - self.assertEqual(entries['sub/nonstray'][0], 'sub/Manifest') self.assertEqual(entries['sub/deeper/Manifest'][0], 'sub/Manifest') self.assertEqual(entries['sub/deeper/test'][0], 'sub/deeper/Manifest') self.assertEqual(entries['sub/Manifest'][1].path, 'sub/Manifest') - self.assertEqual(entries['sub/nonstray'][1].path, 'nonstray') self.assertEqual(entries['sub/deeper/Manifest'][1].path, 'deeper/Manifest') self.assertEqual(entries['sub/deeper/test'][1].path, 'test') @@ -421,7 +400,7 @@ DATA test 0 MD5 d41d8cd98f00b204e9800998ecf8427e self.assertEqual(f.read(), u''' DIST topdistfile-1.txt 0 MD5 d41d8cd98f00b204e9800998ecf8427e MANIFEST other/Manifest 0 MD5 d41d8cd98f00b204e9800998ecf8427e -MANIFEST sub/Manifest 145 MD5 75e2be2f56f58e486fd195ec4d96da4a +MANIFEST sub/Manifest 127 MD5 de990fbccb1261da02c7513dfec56045 TIMESTAMP 2017-01-01T01:01:01Z '''.lstrip()) with io.open(os.path.join(self.dir, 'sub/Manifest'), @@ -429,7 +408,6 @@ TIMESTAMP 2017-01-01T01:01:01Z self.assertEqual(f.read(), u''' DIST subdistfile-1.txt 0 MD5 d41d8cd98f00b204e9800998ecf8427e MANIFEST deeper/Manifest 49 MD5 b86a7748346d54c6455886306f017e6c -OPTIONAL nonstray '''.lstrip()) def test_update_entry_for_path(self): @@ -1357,68 +1335,6 @@ MISC test.ebuild 0 MD5 d41d8cd98f00b204e9800998ecf8427e m.get_deduplicated_file_entry_dict_for_update, '') -class DuplicateIncompatibleDataOptionalTypeFileEntryTest(TempDirTestCase): - """ - Test for specifying the entry for the same file twice, with - incompatible types. - """ - - FILES = { - 'Manifest': u''' -DATA test.ebuild 0 MD5 d41d8cd98f00b204e9800998ecf8427e -OPTIONAL test.ebuild -''', - } - - def test_find_path_entry(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertEqual(m.find_path_entry('test.ebuild').path, 'test.ebuild') - - def test_get_file_entry_dict(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertRaises(gemato.exceptions.ManifestIncompatibleEntry, - m.get_file_entry_dict, '') - - def test_deduplicated_get_file_entry_dict_for_update(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertRaises(gemato.exceptions.ManifestIncompatibleEntry, - m.get_deduplicated_file_entry_dict_for_update, '') - - -class DuplicateIncompatibleMiscOptionalTypeFileEntryTest(TempDirTestCase): - """ - Test for specifying the entry for the same file twice, with - incompatible types. - """ - - FILES = { - 'Manifest': u''' -MISC test.ebuild 0 MD5 d41d8cd98f00b204e9800998ecf8427e -OPTIONAL test.ebuild -''', - } - - def test_find_path_entry(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertEqual(m.find_path_entry('test.ebuild').path, 'test.ebuild') - - def test_get_file_entry_dict(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertRaises(gemato.exceptions.ManifestIncompatibleEntry, - m.get_file_entry_dict, '') - - def test_deduplicated_get_file_entry_dict_for_update(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertRaises(gemato.exceptions.ManifestIncompatibleEntry, - m.get_deduplicated_file_entry_dict_for_update, '') - - class DuplicateDifferentSizeFileEntryTest(TempDirTestCase): """ Test for specifying the entry for the same file twice, with @@ -1619,74 +1535,6 @@ MISC foo 0 MD5 d41d8cd98f00b204e9800998ecf8427e m.assert_directory_verifies() -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.exceptions.ManifestMismatch, - m.assert_directory_verifies, '') - - def test_assert_directory_verifies_nonstrict(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertTrue(m.assert_directory_verifies('', - warn_handler=lambda x: True)) - - def test_assert_directory_verifies_nonstrict_false(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - self.assertFalse(m.assert_directory_verifies('', - warn_handler=lambda x: False)) - - def test_cli_verifies(self): - self.assertEqual( - gemato.cli.main(['gemato', 'verify', self.dir]), - 1) - - def test_cli_verifies_nonstrict(self): - self.assertEqual( - gemato.cli.main(['gemato', 'verify', '--no-strict', self.dir]), - 0) - - def test_update_entry_for_path(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest')) - m.update_entry_for_path('foo') - self.assertIsInstance(m.find_path_entry('foo'), - gemato.manifest.ManifestEntryOPTIONAL) - m.save_manifests() - with io.open(os.path.join(self.dir, 'Manifest'), - 'r', encoding='utf8') as f: - self.assertEqual(f.read(), self.FILES['Manifest']) - self.assertRaises(gemato.exceptions.ManifestMismatch, - m.assert_directory_verifies, '') - - def test_update_entries_for_directory(self): - m = gemato.recursiveloader.ManifestRecursiveLoader( - os.path.join(self.dir, 'Manifest'), - hashes=['SHA256', 'SHA512']) - m.update_entries_for_directory('') - self.assertIsInstance(m.find_path_entry('foo'), - gemato.manifest.ManifestEntryOPTIONAL) - m.save_manifests() - with io.open(os.path.join(self.dir, 'Manifest'), - 'r', encoding='utf8') as f: - self.assertEqual(f.read(), self.FILES['Manifest']) - self.assertRaises(gemato.exceptions.ManifestMismatch, - m.assert_directory_verifies, '') - - class CrossDeviceManifestTest(TempDirTestCase): """ Test for a Manifest that crosses filesystem boundaries. diff --git a/tests/test_verify.py b/tests/test_verify.py index a32ea8d..7fe81a7 100644 --- a/tests/test_verify.py +++ b/tests/test_verify.py @@ -40,12 +40,6 @@ class NonExistingFileVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(os.path.join(self.dir, e.path), e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', 'test')) - self.assertEqual(gemato.verify.verify_path(os.path.join(self.dir, e.path), e), - (True, [])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(os.path.join(self.dir, 'test'), None), (True, [])) @@ -82,12 +76,6 @@ class DirectoryVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.dir, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.dir))) - self.assertEqual(gemato.verify.verify_path(self.dir, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.dir, None), (False, [('__exists__', False, True)])) @@ -121,12 +109,6 @@ class CharacterDeviceVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.path, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.path))) - self.assertEqual(gemato.verify.verify_path(self.path, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.path, None), (False, [('__exists__', False, True)])) @@ -166,12 +148,6 @@ class NamedPipeVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.path, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.path))) - self.assertEqual(gemato.verify.verify_path(self.path, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.path, None), (False, [('__exists__', False, True)])) @@ -214,12 +190,6 @@ class UNIXSocketVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.path, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.path))) - self.assertEqual(gemato.verify.verify_path(self.path, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.path, None), (False, [('__exists__', False, True)])) @@ -303,12 +273,6 @@ class EmptyFileVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.path, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.path))) - self.assertEqual(gemato.verify.verify_path(self.path, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.path, None), (False, [('__exists__', False, True)])) @@ -408,12 +372,6 @@ class EmptyFileVerificationTest(unittest.TestCase): self.assertEqual(e.size, 0) self.assertDictEqual(e.checksums, {}) - def test_update_OPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL( - os.path.basename(self.path)) - self.assertRaises(AssertionError, - gemato.verify.update_entry_for_path, self.path, e) - def test_update_IGNORE(self): e = gemato.manifest.ManifestEntryIGNORE( os.path.basename(self.path)) @@ -576,12 +534,6 @@ class NonEmptyFileVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.path, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.path))) - self.assertEqual(gemato.verify.verify_path(self.path, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.path, None), (False, [('__exists__', False, True)])) @@ -862,12 +814,6 @@ class ProcFileVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_path(self.path, e), (True, [])) - def testOPTIONAL(self): - e = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', os.path.basename(self.path))) - self.assertEqual(gemato.verify.verify_path(self.path, e), - (False, [('__exists__', False, True)])) - def testNone(self): self.assertEqual(gemato.verify.verify_path(self.path, None), (False, [('__exists__', False, True)])) @@ -978,22 +924,6 @@ class EntryCompatibilityVerificationTest(unittest.TestCase): self.assertEqual(gemato.verify.verify_entry_compatibility(e1, e2), (False, [('__type__', 'DATA', 'MISC')])) - def test_incompatible_types_DATA_OPTIONAL(self): - e1 = gemato.manifest.ManifestEntryDATA.from_list( - ('DATA', 'test', '0', 'MD5', 'd41d8cd98f00b204e9800998ecf8427e')) - e2 = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', 'test')) - self.assertEqual(gemato.verify.verify_entry_compatibility(e1, e2), - (False, [('__type__', 'DATA', 'OPTIONAL')])) - - def test_incompatible_types_MISC_OPTIONAL(self): - e1 = gemato.manifest.ManifestEntryMISC.from_list( - ('MISC', 'test', '0', 'MD5', 'd41d8cd98f00b204e9800998ecf8427e')) - e2 = gemato.manifest.ManifestEntryOPTIONAL.from_list( - ('OPTIONAL', 'test')) - self.assertEqual(gemato.verify.verify_entry_compatibility(e1, e2), - (False, [('__type__', 'MISC', 'OPTIONAL')])) - def test_incompatible_types_DATA_IGNORE(self): e1 = gemato.manifest.ManifestEntryDATA.from_list( ('DATA', 'test', '0', 'MD5', 'd41d8cd98f00b204e9800998ecf8427e')) |