"""Tests for DeDRM utilities (uStrCmp and the shared crypto/path helpers).""" import os import dedrm_test_utils as U ut = U.load("utilities", package="dedrm") def test_ustrcmp_equal(): assert ut.uStrCmp("Abc", "Abc") is True def test_ustrcmp_caseless(): assert ut.uStrCmp("ABC", "abc", caseless=True) is True assert ut.uStrCmp("ABC", "abc", caseless=False) is False def test_ustrcmp_unicode_normalisation(): # Composed 'é' (U+00E9) vs decomposed 'e' + combining acute (U+0065 U+0301). assert ut.uStrCmp("é", "é", caseless=False) is True def test_unpad_strips_trailing_pad_length(): assert ut.unpad(b"data\x04\x04\x04\x04") == b"data" assert ut.unpad(b"hello\x03\x03\x03") == b"hello" def test_crc32_known_vector(): assert ut.crc32(b"test") == 4181434640 def test_pid_alphabet(): assert ut.PID_ALPHABET == b"ABCDEFGHIJKLMNPQRSTUVWXYZ123456789" def test_checksum_pid_preserves_bytes(): out = ut.checksumPid(b"12345678") assert out == b"12345678EL" assert isinstance(out, bytes) def test_checksum_pid_preserves_str(): out = ut.checksumPid("12345678") assert out == "12345678EL" assert isinstance(out, str) def test_pid_from_serial_known_vector(): assert ut.pidFromSerial(b"B00212345678", 8) == b"VBKTRX7Q" def test_safe_join_plain_name(tmp_path): assert ut.safe_join(str(tmp_path), "book0000.dat") == os.path.join( str(tmp_path), "book0000.dat" ) def test_safe_join_strips_directory_components(tmp_path): # Any directory part (including ``../``) is reduced to a bare basename. result = ut.safe_join(str(tmp_path), "../../etc/evil") assert os.path.basename(result) == "evil" assert os.path.dirname(os.path.abspath(result)) == os.path.abspath(str(tmp_path)) def test_safe_join_result_always_contained(tmp_path): root = os.path.abspath(str(tmp_path)) for name in ["../../evil", "a/b/c", "..\\..\\win", "/abs/path", "plain"]: result = os.path.abspath(ut.safe_join(str(tmp_path), name)) assert result == root or result.startswith(root + os.sep)