diff options
author | Michał Górny <mgorny@gentoo.org> | 2017-10-28 17:37:10 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2017-10-28 17:38:42 +0200 |
commit | 9cfb8dbd756785794777d26efaa2b4995adfd01f (patch) | |
tree | 633f84a7ea55ee79ec18d3e08fbe7713fa7ae629 | |
parent | b26c27c5fa8683590c2db5c2907250b1e43c6fb3 (diff) | |
download | gemato-9cfb8dbd756785794777d26efaa2b4995adfd01f.tar.gz |
verify: Indicate whether anything changed in update_entry_for_path()
-rw-r--r-- | gemato/verify.py | 10 | ||||
-rw-r--r-- | tests/test_verify.py | 52 |
2 files changed, 49 insertions, 13 deletions
diff --git a/gemato/verify.py b/gemato/verify.py index 7f3ebec..0b1097b 100644 --- a/gemato/verify.py +++ b/gemato/verify.py @@ -205,6 +205,9 @@ def update_entry_for_path(path, e, hashes=None, expected_dev=None): at path @path. Uses hashes listed in @hashes (using Manifest names), or the current set of hashes in @e if @hashes is None. + Returns True if anything changed, or False if the entry did + not change. + The file must exist and be a regular file, and the entry must be of MISC, DATA, MANIFEST or a derived type. The path/filename is not updated nor checked. @@ -250,8 +253,11 @@ def update_entry_for_path(path, e, hashes=None, expected_dev=None): assert st_size == size, ('Apparent size (st_size = {}) and real size ({}) are different!' .format(st_size, size)) - e.size = size - e.checksums = checksums + if e.size != size or e.checksums != checksums: + e.size = size + e.checksums = checksums + return True + return False def verify_entry_compatibility(e1, e2): diff --git a/tests/test_verify.py b/tests/test_verify.py index 7217ccb..7cc2a10 100644 --- a/tests/test_verify.py +++ b/tests/test_verify.py @@ -340,7 +340,8 @@ class EmptyFileVerificationTest(unittest.TestCase): def test_update(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertFalse( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 0) self.assertDictEqual(e.checksums, {}) @@ -348,7 +349,9 @@ class EmptyFileVerificationTest(unittest.TestCase): def test_update_with_hashes(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e, ['MD5', 'SHA1']) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e, + ['MD5', 'SHA1'])) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 0) self.assertDictEqual(e.checksums, { @@ -359,7 +362,24 @@ class EmptyFileVerificationTest(unittest.TestCase): def test_update_with_hashes_from_manifest(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {'MD5': '', 'SHA1': ''}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e)) + self.assertEqual(e.path, os.path.basename(self.path)) + self.assertEqual(e.size, 0) + self.assertDictEqual(e.checksums, { + 'MD5': 'd41d8cd98f00b204e9800998ecf8427e', + 'SHA1': 'da39a3ee5e6b4b0d3255bfef95601890afd80709', + }) + + def test_update_with_hashes_unchanged(self): + e = gemato.manifest.ManifestEntryDATA( + os.path.basename(self.path), 0, { + 'MD5': 'd41d8cd98f00b204e9800998ecf8427e', + 'SHA1': 'da39a3ee5e6b4b0d3255bfef95601890afd80709', + }) + self.assertFalse( + gemato.verify.update_entry_for_path(self.path, e, + ['MD5', 'SHA1'])) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 0) self.assertDictEqual(e.checksums, { @@ -382,7 +402,8 @@ class EmptyFileVerificationTest(unittest.TestCase): def test_update_MISC(self): e = gemato.manifest.ManifestEntryMISC( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertFalse( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 0) self.assertDictEqual(e.checksums, {}) @@ -402,7 +423,8 @@ class EmptyFileVerificationTest(unittest.TestCase): def test_update_AUX(self): e = gemato.manifest.ManifestEntryAUX( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertFalse( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.join('files', os.path.basename(self.path))) self.assertEqual(e.size, 0) @@ -496,7 +518,8 @@ class NonEmptyFileVerificationTest(unittest.TestCase): def test_update(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 43) self.assertDictEqual(e.checksums, {}) @@ -504,7 +527,9 @@ class NonEmptyFileVerificationTest(unittest.TestCase): def test_update_with_hashes(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e, ['MD5', 'SHA1']) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e, + ['MD5', 'SHA1'])) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 43) self.assertDictEqual(e.checksums, { @@ -515,7 +540,8 @@ class NonEmptyFileVerificationTest(unittest.TestCase): def test_update_with_hashes_from_manifest(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {'MD5': '', 'SHA1': ''}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, 43) self.assertDictEqual(e.checksums, { @@ -674,7 +700,8 @@ class ProcFileVerificationTest(unittest.TestCase): def test_update(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, self.size) self.assertDictEqual(e.checksums, {}) @@ -682,7 +709,9 @@ class ProcFileVerificationTest(unittest.TestCase): def test_update_with_hashes(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {}) - gemato.verify.update_entry_for_path(self.path, e, ['MD5', 'SHA1']) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e, + ['MD5', 'SHA1'])) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, self.size) self.assertDictEqual(e.checksums, { @@ -693,7 +722,8 @@ class ProcFileVerificationTest(unittest.TestCase): def test_update_with_hashes_from_manifest(self): e = gemato.manifest.ManifestEntryDATA( os.path.basename(self.path), 0, {'MD5': '', 'SHA1': ''}) - gemato.verify.update_entry_for_path(self.path, e) + self.assertTrue( + gemato.verify.update_entry_for_path(self.path, e)) self.assertEqual(e.path, os.path.basename(self.path)) self.assertEqual(e.size, self.size) self.assertDictEqual(e.checksums, { |