15 lines
1.4 KiB
Python
15 lines
1.4 KiB
Python
globals().update(__import__('runpy').run_path('/private/tmp/tree-offload-cold-r06.py',run_name='offload_library'))
|
|
p=json.loads((D/'PREPARED.json').read_bytes());m=json.loads((D/'MANIFEST.json').read_bytes());a=T/'cloud-readback.tar.gz';parts=[json.loads((T/f'cloud-{i:04d}.json').read_bytes())for i in range(4)];assert all(x['actual_cloud_readback_verified']for x in parts)
|
|
assert a.stat().st_size==p['bytes']==sum(x['bytes']for x in parts) and sha(a)==p['sha256'];objs={x['sha256']:x for x in m['members']if x['type']=='file'};seen=set()
|
|
with tarfile.open(a,'r|gz')as t:
|
|
for e in t:
|
|
assert e.isfile() and e.name not in seen;seen.add(e.name)
|
|
with t.extractfile(e)as f:
|
|
if e.name=='MANIFEST.json':assert f.read()==(D/'MANIFEST.json').read_bytes()
|
|
else:
|
|
assert e.name.startswith('objects/');h=e.name[8:];assert h in objs and e.size==objs[h]['bytes'];v=hashlib.sha256()
|
|
for b in iter(lambda:f.read(1024**2),b''):v.update(b)
|
|
assert v.hexdigest()==h
|
|
assert seen=={'MANIFEST.json'}|{'objects/'+h for h in objs}
|
|
save(D/'CLOUD_PARTS.json',parts);save(D/'CLOUD_ARCHIVE_VERIFIED.json',dict(actual_cloud_readback=True,whole_archive_sha256=sha(a),bytes=a.stat().st_size,all_unique_payloads_verified=len(objs),original_file_mappings_verified=m['files'],manifest_identical=True,formal_credit=0));print('Complete cloud archive and all 14,259 file mappings verified',flush=True)
|