|
import pytest |
|
import iscc_sct as sct |
|
from iscc_sct import utils |
|
from blake3 import blake3 |
|
|
|
|
|
def test_check_integrity(tmp_path): |
|
|
|
file_path = tmp_path / "testfile.txt" |
|
content = "This is a test file." |
|
with open(file_path, "w") as f: |
|
f.write(content) |
|
|
|
|
|
hasher = blake3() |
|
hasher.update(content.encode()) |
|
correct_checksum = hasher.hexdigest() |
|
assert utils.check_integrity(file_path, correct_checksum) == file_path |
|
|
|
wrong_checksum = correct_checksum + "wrong" |
|
|
|
|
|
with pytest.raises(RuntimeError) as exc_info: |
|
utils.check_integrity(file_path, wrong_checksum) |
|
|
|
|
|
assert "Failed integrity check" in str(exc_info.value) |
|
|
|
|
|
def test_hamming_distance_identical(): |
|
a = b"abc" |
|
b = b"abc" |
|
assert utils.hamming_distance(a, b) == 0 |
|
|
|
|
|
def test_hamming_distance_different(): |
|
a = b"abc" |
|
b = b"abd" |
|
assert utils.hamming_distance(a, b) == 3 |
|
|
|
|
|
def test_hamming_distance_completely_different(): |
|
a = b"\x00" |
|
b = b"\xff" |
|
assert utils.hamming_distance(a, b) == 8 |
|
|
|
|
|
def test_hamming_distance_raises_value_error(): |
|
a = b"abc" |
|
b = b"abcd" |
|
with pytest.raises(ValueError): |
|
utils.hamming_distance(a, b) |
|
|
|
|
|
def test_encode_decode_base32(): |
|
original = b"Hello, World!" |
|
encoded = utils.encode_base32(original) |
|
assert isinstance(encoded, str) |
|
assert encoded == "JBSWY3DPFQQFO33SNRSCC" |
|
decoded = utils.decode_base32(encoded) |
|
assert isinstance(decoded, bytes) |
|
assert decoded == original |
|
|
|
|
|
def test_encode_decode_base64(): |
|
original = b"Hello, World!" |
|
encoded = utils.encode_base64(original) |
|
assert isinstance(encoded, str) |
|
assert encoded == "SGVsbG8sIFdvcmxkIQ" |
|
decoded = utils.decode_base64(encoded) |
|
assert isinstance(decoded, bytes) |
|
assert decoded == original |
|
|
|
|
|
def test_encode_decode_edge_cases(): |
|
|
|
assert utils.encode_base32(b"") == "" |
|
assert utils.decode_base32("") == b"" |
|
assert utils.encode_base64(b"") == "" |
|
assert utils.decode_base64("") == b"" |
|
|
|
|
|
original = b"a" |
|
assert utils.decode_base32(utils.encode_base32(original)) == original |
|
assert utils.decode_base64(utils.encode_base64(original)) == original |
|
|
|
|
|
def test_iscc_distance_different_lengths(): |
|
iscc1 = sct.create("Hello", bits=64).iscc |
|
iscc2 = sct.create("Hello", bits=96).iscc |
|
with pytest.raises(ValueError, match="The input ISCCs must have the same length"): |
|
utils.iscc_distance(iscc1, iscc2) |
|
|