Files
hermes-agent/tests/pm/test_pm_musl.py
teknium1 f5c3c7d70a test: trim musl coverage to two invariants
Keep one PM invariant (a musl ELF userland resolves to linux-<arch>-musl
and the default closure is satisfiable with musl-native artifacts) and
one installer invariant (uv_bootstrap_target picks musl uv from a musl
ELF interpreter even when ldd says glibc). Drop the lock-content and
URL-shape change-detectors.
2026-09-27 03:24:39 -07:00

41 lines
1.6 KiB
Python

"""A native musl userland resolves PM to musl-native runtime artifacts (#123682)."""
from __future__ import annotations
from pathlib import Path
import pytest
from pm.lock import Lockfile
from pm.registry import all_packages, source_install_packages, walk
pytestmark = pytest.mark.platforms("linux")
REPO_ROOT = Path(__file__).resolve().parents[2]
def test_musl_userland_gets_a_satisfiable_native_musl_closure(monkeypatch, tmp_path):
from pm import store
# /bin/sh's ELF interpreter is musl; the bootstrap Python (this glibc test
# host's) says otherwise and must not win.
fake_sh = tmp_path / "sh"
fake_sh.write_bytes(b"\x7fELF" + b"\0" * 60 + b"/lib/ld-musl-x86_64.so.1\0")
monkeypatch.setattr(store, "_native_linux_uses_musl",
lambda: store._elf_loader_is_musl(fake_sh), raising=False)
monkeypatch.setattr(store, "_native_machine", lambda: "x86_64")
monkeypatch.setattr(store, "_is_bionic_libc", lambda: False)
target = store.current_target()
assert target == "linux-x64-musl"
lock = Lockfile(REPO_ROOT / "pm" / "lock.json")
closure = walk(source_install_packages(all_packages()))
assert {"python", "uv", "node"} <= {package.name for package in closure}
for package in closure:
assert package.missing_reason(target) is None, package.name
if lock.version(package.name):
assert lock.artifacts(package.name, target), f"{package.name} has no {target} artifact"
for name in ("python", "uv", "node"):
assert "musl" in lock.artifacts(name, target)[0]["url"], name