From: Eduardo Robles Elvira Date: Sat, 27 Jul 2013 08:47:05 +0000 (+0200) Subject: deltatar: removing not bz2 concat stream test, adding crc checking and unit test... X-Git-Tag: v2.2~142 X-Git-Url: http://developer.intra2net.com/git/?a=commitdiff_plain;h=6c678f3a11ab622fcada593e0f5d0a9df8f994d3;p=python-delta-tar deltatar: removing not bz2 concat stream test, adding crc checking and unit test for it --- diff --git a/deltatar/deltatar.py b/deltatar/deltatar.py index 297fe30..bd8ccab 100644 --- a/deltatar/deltatar.py +++ b/deltatar/deltatar.py @@ -20,6 +20,7 @@ import logging import datetime +import binascii import os import stat import json @@ -323,8 +324,11 @@ class DeltaTar(object): new_volume_handler = partial(new_volume_handler, self) index_fd.write('{"type": "python-delta-tar-index", version: "1" }\n') - index_fd.write('{"type": "BEGIN-FILE-LIST"}\n') - checksum = 'TODO' # TODO: checksum + + s = '{"type": "BEGIN-FILE-LIST"}\n' + # calculate checksum and write into the stream + crc = binascii.crc32(s) + index_fd.write(s) # start creating the tarfile tarobj = tarfile.TarFile.open(tarfile_path, @@ -342,13 +346,18 @@ class DeltaTar(object): stat = self._stat_dict(path) stat['volume'] = vol_no stat['offset'] = tarobj.fileobj.tell() # TODO: check/fix this - index_fd.write(json.dumps(stat) + '\n') + + s = json.dumps(stat) + '\n' + crc = binascii.crc32(s, crc) & 0xffffffff + index_fd.write(s) tarobj.add(path) - index_fd.write('{"type": "END-FILE-LIST"}\n') - index_fd.write('{"type": "file-list-checksum", "checksum": "%s"}\n' %\ - checksum) + s = '{"type": "END-FILE-LIST"}\n' + crc = binascii.crc32(s, crc) & 0xffffffff + index_fd.write(s) + index_fd.write('{"type": "file-list-checksum", "checksum": %d}\n' %\ + crc) index_fd.close() os.chdir(cwd) tarobj.close() diff --git a/testing/test_deltatar.py b/testing/test_deltatar.py index 577b0c1..d2d04e3 100644 --- a/testing/test_deltatar.py +++ b/testing/test_deltatar.py @@ -81,6 +81,46 @@ class DeltaTarTest(BaseTest): if value: assert value == self.md5sum(key) + def test_check_index_checksum(self): + ''' + Creates a full backup and checks the index' checksum of files + ''' + import binascii + import json + deltatar = DeltaTar(mode=self.MODE, password=self.PASSWORD, + logger=self.consoleLogger) + + # create first backup + deltatar.create_full_backup( + source_path="source_dir", + backup_path="backup_dir") + + + index_filename = deltatar.index_name_func(True) + index_path = os.path.join("backup_dir", index_filename) + + f = open(index_path, 'r') + crc = None + checked = False + began_list = False + for l in f.readline(): + if 'BEGIN-FILE-LIST' in l: + crc = binascii.crc32(l) + began_list = True + elif 'END-FILE-LIST' in l: + crc = binascii.crc32(l, crc) & 0xffffffff + + # next line contains the crc + data = json.loads(f.readline()) + assert data['type'] == 'file-list-checksum' + assert data['checksum'] == crc + checked = True + break + elif began_list: + crc = binascii.crc32(l, crc) & 0xffffffff + + + class DeltaTar2Test(DeltaTarTest): ''' @@ -131,13 +171,6 @@ class DeltaTarGzipConcatTest(DeltaTarTest): MODE = '#gz' -class DeltaTarBz2ConcatTest(DeltaTarTest): - ''' - Same as DeltaTar but with specific bz2 concat stream mode - ''' - MODE = '#bz2' - - class DeltaTarGzipAes128ConcatTest(DeltaTarTest): ''' Same as DeltaTar but with specific gzip aes128 concat stream mode