add scripts for tests

This commit is contained in:
2026-07-10 02:52:05 +03:00
parent da5cecc63a
commit 3d96564f4a
8 changed files with 1252 additions and 3 deletions
+100
View File
@@ -0,0 +1,100 @@
import importlib.util
import sys
from pathlib import Path
SCRIPT = Path(__file__).resolve().parents[1] / "scripts" / "check_alt_set_impl.py"
def load_script():
spec = importlib.util.spec_from_file_location("check_alt_set_impl", SCRIPT)
module = importlib.util.module_from_spec(spec)
assert spec.loader is not None
sys.modules[spec.name] = module
spec.loader.exec_module(module)
return module
def test_select_elf_members_separates_providers_and_requirers():
check = load_script()
members = [
"./usr/lib64/libfoo.so.1",
"./usr/lib64/libfoo.so.1.2.3",
"./usr/lib64/libfoo.a",
"./usr/bin/tool",
"./usr/share/doc/readme",
]
assert check.select_provider_members(members) == [
"./usr/lib64/libfoo.so.1",
"./usr/lib64/libfoo.so.1.2.3",
]
assert check.select_requirer_members(members) == [
"./usr/lib64/libfoo.so.1",
"./usr/lib64/libfoo.so.1.2.3",
"./usr/bin/tool",
]
def test_generate_label_set_and_compare_uses_only_local_set_py():
check = load_script()
provided = check.generate_label_set("provider", "libfoo.so.1", ["foo", "bar", "baz"], bpp=16)
required = check.generate_label_set("requirer", "tool", ["foo", "bar"], bpp=16)
missing = check.generate_label_set("requirer", "badtool", ["foo", "quux"], bpp=16)
ok = check.compare_label_sets(provided, required)
bad = check.compare_label_sets(provided, missing)
assert ok.status == "compatible"
assert ok.cmp_result == 1
assert bad.status == "incompatible"
assert bad.cmp_result == -2
def test_normalize_required_symbol_version_can_match_provided_symbol_version():
check = load_script()
assert check.normalize_required_symbol("foo@LIB_1") == "foo@@LIB_1"
assert check.normalize_required_symbol("foo@@LIB_1") == "foo@@LIB_1"
assert check.normalize_required_symbol("foo") == "foo"
def test_parse_required_nm_output_filters_weak_undefined_symbols():
check = load_script()
nm_output = """
w __gmon_start__
w _ITM_deregisterTMCloneTable
U close@GLIBC_2.2.5
U memcpy@GLIBC_2.14
W optional_hook
"""
assert check.parse_required_nm_output(nm_output) == [
"close@GLIBC_2.2.5",
"memcpy@GLIBC_2.14",
]
def test_default_bpp_is_large_enough_for_real_alt_symbol_sets():
check = load_script()
assert check.parse_args([]).bpp == 32
def test_build_dependency_results_splits_required_labels_by_provider_library():
check = load_script()
libc = check.generate_label_set(
"provided", "libc.so.6", ["close@@GLIBC_2.2.5", "read@@GLIBC_2.2.5"], bpp=16, package="glibc-core"
)
libz = check.generate_label_set(
"provided", "libz.so.1", ["inflate", "deflate"], bpp=16, package="zlib"
)
tool = check.generate_label_set(
"required", "tool", ["close@@GLIBC_2.2.5", "inflate"], bpp=16, package="consumer"
)
results = check.build_dependency_results([libc, libz], [tool], bpp=16)
assert [(result.provider_member, result.required_labels, result.status) for result in results] == [
("libc.so.6", 1, "compatible"),
("libz.so.1", 1, "compatible"),
]