1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
import sys
import pytest
import glob
from tests.testsupport import *
def test_regular():
data_plain = read_plain_yenc_file("test_regular.yenc")
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
data_plain = read_plain_yenc_file("test_regular_2.yenc")
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
def test_bytes_compat():
data_plain = read_plain_yenc_file("test_regular.yenc")
assert python_yenc(data_plain) == sabctools.yenc_decode(memoryview(bytes(data_plain)))
def test_partial():
data_plain = read_plain_yenc_file("test_partial.yenc")
decoded_data, filename, filesize, begin, size, crc_correct = sabctools_yenc_wrapper(data_plain)
assert filename == "90E2Sdvsmds0801dvsmds90E.part06.rar"
assert filesize == 49152000
assert begin == 15360000
assert size == 384000
assert crc_correct is None
assert len(decoded_data) == 549
def test_special_chars():
data_plain = read_plain_yenc_file("test_special_chars.yenc")
# We only compare the data and the filename
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
data_plain = read_plain_yenc_file("test_special_utf8_chars.yenc")
# We only compare the data and the filename
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
def test_bad_crc():
data_plain = read_plain_yenc_file("test_bad_crc.yenc")
# We only compare the data and the filename
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
def test_bad_crc_end():
data_plain = read_plain_yenc_file("test_bad_crc_end.yenc")
with pytest.raises(ValueError) as excinfo:
sabctools_yenc_wrapper(data_plain)
assert "Invalid CRC in footer" in str(excinfo.value)
def test_no_filename():
data_plain = read_plain_yenc_file("test_no_name.yenc")
with pytest.raises(ValueError) as excinfo:
sabctools_yenc_wrapper(data_plain)
assert "Could not find yEnc filename" in str(excinfo.value)
def test_padded_crc():
data_plain = read_plain_yenc_file("test_padded_crc.yenc")
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
def test_end_after_filename():
data_plain = read_plain_yenc_file("test_end_after_filename.yenc")
with pytest.raises(ValueError):
sabctools_yenc_wrapper(data_plain)
def test_empty():
with pytest.raises(ValueError) as excinfo:
sabctools.yenc_decode(memoryview(bytearray(b"")))
assert "Invalid data length" in str(excinfo.value)
def test_ref_counts():
"""Note that sys.getrefcount itself adds another reference!"""
# In Python 3.14+, getrefcount returns 1, in earlier versions it returns 2
expected_refcount = 1 if sys.version_info >= (3, 14) else 2
# Test regular case
data_plain = read_plain_yenc_file("test_regular.yenc")
data_out, filename, filesize, begin, end, crc_correct = sabctools_yenc_wrapper(data_plain)
assert sys.getrefcount(data_plain) == expected_refcount
assert sys.getrefcount(data_out) == expected_refcount
assert sys.getrefcount(filename) == expected_refcount
assert sys.getrefcount(begin) == expected_refcount
assert sys.getrefcount(end) == expected_refcount
assert sys.getrefcount(crc_correct) == expected_refcount
# Test simple error case
fake_inp = memoryview(bytearray(b"1234"))
assert sys.getrefcount(fake_inp) == expected_refcount
with pytest.raises(ValueError):
sabctools.yenc_decode(fake_inp)
assert sys.getrefcount(fake_inp) == expected_refcount
# Test further processing
data_plain = read_plain_yenc_file("test_bad_crc_end.yenc")
with pytest.raises(ValueError):
sabctools_yenc_wrapper(data_plain)
assert sys.getrefcount(data_plain) == expected_refcount
def test_crc_pickles():
all_crc_fails = glob.glob("tests/yencfiles/crc_*")
for fname in all_crc_fails:
data_plain = read_pickle(fname)
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
def test_small_file_pickles():
all_pickles = glob.glob("tests/yencfiles/small_file*")
for fname in all_pickles:
data_plain = read_pickle(fname)
assert python_yenc(data_plain) == sabctools_yenc_wrapper(data_plain)
|