import logging
import datetime
+import binascii
import os
import stat
import json
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,
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()
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):
'''
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