research/erasure_code/test.py

76 lines
1.6 KiB
Python

import random
import share
fsz = 200
f = ''.join([
random.choice('1234567890qwetyuiopasdfghjklzxcvbnm') for x in range(fsz)])
c = share.split_file(f, 5, 4)
print 'File split successfully.'
print ' '
print 'Chunks: '
print ' '
for chunk in c:
print chunk
print ' '
g = ''.join([
random.choice('1234567890qwetyuiopasdfghjklzxcvbnm') for x in range(fsz)])
c2 = share.split_file(g, 5, 4)
assert share.recombine_file(
[c[0], c2[1], c[2], c[3], c2[4], c[5], c[6], c[7], c[8]]) == f
print '5 of 9 with 7 legit, 2 errors passed'
assert share.recombine_file(
[c[0], c[2], c[3], c2[4], c[6], c[7], c[8]]) == f
print '5 of 9 with 6 legit, 1 error passed'
assert share.recombine_file(
[c[0], c[3], c[6], c[7], c[8]]) == f
print '5 of 9 with 5 legit, 0 errors passed'
chunks3 = share.serialize_cubify(f, 3, 3, 2)
print ' '
print 'Chunks: '
print ' '
for chunk in chunks3:
print chunk
print ' '
for i in range(26):
pos = random.randrange(len(chunks3))
print 'Removing cell %d' % pos
chunks3.pop(pos)
assert share.full_heal_set(chunks3) == f
print ' '
print 'Cube reconstruction test passed'
print ' '
chunks4 = share.serialize_cubify(g, 3, 3, 2)
for i in range(7):
pos = random.randrange(len(chunks3))
chunk = chunks3.pop(pos)
print 'Damaging cell %d' % pos
print 'Prior: %s' % chunk
metadata, content = share.deserialize_chunk(chunk)
for j in range(len(content)):
content[j] = random.randrange(256)
chunks3.append(share.serialize_chunk(content, *metadata))
print 'Post: %s' % chunks3[-1]
assert share.full_heal_set(chunks4) == g
print ' '
print 'Byzantine cube reconstruction test passed'