summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2017-10-28 17:37:10 +0200
committerMichał Górny <mgorny@gentoo.org>2017-10-28 17:38:42 +0200
commit9cfb8dbd756785794777d26efaa2b4995adfd01f (patch)
tree633f84a7ea55ee79ec18d3e08fbe7713fa7ae629
parentb26c27c5fa8683590c2db5c2907250b1e43c6fb3 (diff)
downloadgemato-9cfb8dbd756785794777d26efaa2b4995adfd01f.tar.gz
verify: Indicate whether anything changed in update_entry_for_path()
-rw-r--r--gemato/verify.py10
-rw-r--r--tests/test_verify.py52
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, {