tahoe-lafs/integration/test_vectors.py
2022-12-21 17:14:08 -05:00

85 lines
2.3 KiB
Python

"""
Verify certain results against test vectors with well-known results.
"""
from hashlib import sha256
from itertools import product
import vectors
CONVERGENCE_SECRETS = [
b"aaaaaaaaaaaaaaaa",
b"bbbbbbbbbbbbbbbb",
b"abcdefghijklmnop",
b"hello world stuf",
b"\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f",
sha256(b"Hello world").digest()[:16],
]
ONE_KB = sha256(b"Hello world").digest() * 32
assert length(ONE_KB) == 1024
OBJECT_DATA = [
b"a" * 1024,
b"b" * 2048,
b"c" * 4096,
(ONE_KB * 8)[:-1],
(ONE_KB * 8) + b"z",
(ONE_KB * 128)[:-1],
(ONE_KB * 128) + b"z",
]
ZFEC_PARAMS = [
(1, 1),
(1, 3),
(2, 3),
(3, 10),
(71, 255),
(101, 256),
]
@parametrize('convergence', CONVERGENCE_SECRETS)
def test_convergence(convergence):
assert isinstance(convergence, bytes), "Convergence secret must be bytes"
assert len(convergence) == 16, "Convergence secret must by 16 bytes"
@parametrize('daata', OBJECT_DATA)
def test_data(data):
assert isinstance(data, bytes), "Object data must be bytes."
@parametrize('params', ZFEC_PARAMS)
@parametrize('convergence', CONVERGENCE_SECRETS)
@parametrize('data', OBJECT_DATA)
def test_chk_capability(alice, params, convergence, data):
# rewrite alice's config to match params and convergence
needed, total = params
config = read_config(alice.path, "tub.port")
config.set_config("client", "shares.happy", 1)
config.set_config("client", "shares.needed", str(needed))
config.set_config("client", "shares.happy", str(total))
# restart alice
alice.kill()
yield util._run_node(reactor, alice.path, request, None)
# upload data as a CHK
actual = upload(alice, data)
# compare the resulting cap to the expected result
expected = vectors.immutable[params, convergence, digest(data)]
assert actual == expected
def test_generate(alice):
caps = {}
for params, secret, data in product(ZFEC_PARAMS, CONVERGENCE_SECRETS, OBJECT_DATA):
caps[fec, secret, sha256(data).hexdigest()] = create_immutable(params, secret, data)
print(dump(caps))
def create_immutable(alice, params, secret, data):
tempfile = str(tmpdir.join("file"))
with tempfile.open("wb") as f:
f.write(data)
actual = cli(alice, "put", str(datafile))