Mercurial > bitten > bitten-test
changeset 290:86281f8eef44
Include the filename instead of the absolute file path in MD5 files, so that the snapshots directory can be moved without invalidating all the archives already created.
author | cmlenz |
---|---|
date | Thu, 20 Oct 2005 13:50:59 +0000 |
parents | 9d93e622f963 |
children | d83208ed2db9 |
files | bitten/util/md5sum.py bitten/util/tests/md5sum.py |
diffstat | 2 files changed, 26 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/bitten/util/md5sum.py +++ b/bitten/util/md5sum.py @@ -23,17 +23,17 @@ @param filename: the absolute path to the file @return: string containing the checksum """ - md5sum = md5.new() + checksum = md5.new() fileobj = file(filename, 'rb') try: while True: chunk = fileobj.read(4096) if not chunk: break - md5sum.update(chunk) + checksum.update(chunk) finally: fileobj.close() - return md5sum.hexdigest() + ' ' + filename + return checksum.hexdigest() def write(filename, md5file=None): """Write an MD5 checksum file for the specified file. @@ -50,7 +50,7 @@ fileobj = file(md5file, 'w') try: - fileobj.write(generate(filename)) + fileobj.write(generate(filename) + ' ' + os.path.basename(filename)) finally: fileobj.close() return md5file @@ -76,9 +76,15 @@ raise IntegrityError, 'Checksum file not found' fileobj = file(md5file, 'r') try: - checksum = fileobj.read() + content = fileobj.read() finally: fileobj.close() + try: + checksum, path = content.split(' ') + except ValueError: + raise IntegrityError, 'Checksum file invalid' + if path != os.path.basename(filename): + raise IntegrityError, 'Checksum for a different file' expected = generate(filename) if expected != checksum:
--- a/bitten/util/tests/md5sum.py +++ b/bitten/util/tests/md5sum.py @@ -34,9 +34,8 @@ def test_generate(self): filename = self._create_file('test.xyz', 'Foo bar') - checksum = md5sum.generate(filename).split(' ') - self.assertEqual(md5.new('Foo bar').hexdigest(), checksum[0]) - self.assertEqual(filename, checksum[1]) + checksum = md5sum.generate(filename) + self.assertEqual(md5.new('Foo bar').hexdigest(), checksum) def test_write(self): filename = self._create_file('test.xyz', 'Foo bar') @@ -44,11 +43,11 @@ self.assertEqual(filename + '.md5', md5file) fileobj = file(md5file, 'r') try: - checksum = fileobj.read().split(' ') + checksum, path = fileobj.read().split(' ') finally: fileobj.close() - self.assertEqual(md5.new('Foo bar').hexdigest(), checksum[0]) - self.assertEqual(filename, checksum[1]) + self.assertEqual(md5.new('Foo bar').hexdigest(), checksum) + self.assertEqual('test.xyz', path) def test_write_with_md5file(self): filename = self._create_file('test.xyz', 'Foo bar') @@ -56,11 +55,11 @@ self.assertEqual(md5file, md5sum.write(filename, md5file=md5file)) fileobj = file(md5file, 'r') try: - checksum = fileobj.read().split(' ') + checksum, path = fileobj.read().split(' ') finally: fileobj.close() - self.assertEqual(md5.new('Foo bar').hexdigest(), checksum[0]) - self.assertEqual(filename, checksum[1]) + self.assertEqual(md5.new('Foo bar').hexdigest(), checksum) + self.assertEqual('test.xyz', path) def test_validate_missing(self): filename = self._create_file('test.xyz', 'Foo bar') @@ -72,6 +71,12 @@ md5file = self._create_file('test.xyz.md5', checksum) self.assertRaises(md5sum.IntegrityError, md5sum.validate, filename) + def test_validate_invalid_format(self): + filename = self._create_file('test.xyz', 'Foo bar') + checksum = md5.new('Foo bar').hexdigest() + ',' + filename + md5file = self._create_file('test.xyz.md5', checksum) + self.assertRaises(md5sum.IntegrityError, md5sum.validate, filename) + def test_validate_incorrect_path(self): filename = self._create_file('test.xyz', 'Foo bar') checksum = md5.new('Foo bar').hexdigest() + ' ' + '/etc/test' @@ -80,8 +85,7 @@ def test_validate_with_checksum(self): filename = self._create_file('test.xyz', 'Foo bar') - checksum = md5.new('Foo bar').hexdigest() + ' ' + filename - md5sum.validate(filename, checksum) + md5sum.validate(filename, md5.new('Foo bar').hexdigest()) def suite():