add scripts for tests
This commit is contained in:
@@ -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"),
|
||||
]
|
||||
@@ -52,11 +52,13 @@ class SetStringTest(unittest.TestCase):
|
||||
encoded = rpmset.set_fini(item_set, bpp=8)
|
||||
self.assertIsNotNone(encoded)
|
||||
self.assertEqual(item_set.cnt, 2)
|
||||
self.assertEqual(item_set.labels, sorted(item_set.labels, key=lambda item: item[1]))
|
||||
self.assertEqual(
|
||||
item_set.symbols, sorted(item_set.symbols, key=lambda item: item[1])
|
||||
)
|
||||
|
||||
rpmset.set_free(item_set)
|
||||
self.assertEqual(item_set.cnt, 0)
|
||||
self.assertEqual(item_set.labels, [])
|
||||
self.assertEqual(item_set.symbols, [])
|
||||
|
||||
def test_hash_is_stable_64_bit_ascii_integer(self):
|
||||
self.assertEqual(rpmset.hash("ascii_symbol"), 10827468943333989194)
|
||||
@@ -69,7 +71,9 @@ class SetStringTest(unittest.TestCase):
|
||||
|
||||
class DownsampleSetTest(unittest.TestCase):
|
||||
def test_masks_high_half_and_keeps_sorted_unique_values(self):
|
||||
self.assertEqual(rpmset.downsample_set([1, 3, 6, 8, 10, 14], 3), [0, 1, 2, 3, 6])
|
||||
self.assertEqual(
|
||||
rpmset.downsample_set([1, 3, 6, 8, 10, 14], 3), [0, 1, 2, 3, 6]
|
||||
)
|
||||
|
||||
def test_removes_duplicates_created_by_masking(self):
|
||||
self.assertEqual(rpmset.downsample_set([1, 6, 14], 3), [1, 6])
|
||||
|
||||
Reference in New Issue
Block a user