Files
hermes-agent/tests/scripts/test_termux_agent_assembly.py

51 lines
2.6 KiB
Python

"""Bionic assembly consumes prepared bytes without running foreign binaries."""
import json
from pathlib import Path
import shutil
from scripts.build.inputs import RESOURCE_ENV, dependency_site
from scripts.termux.payload_facts import write_facts
def test_bionic_facts_and_agent_keep_fixed_prefix_and_tui_only(tmp_path):
from pm.lock import Lockfile, Facts
from pm.registry import get_package
payload = tmp_path / "payload"
repo = payload / "app"
(repo / "pm").mkdir(parents=True)
lock = repo / "pm/lock.json"
shutil.copy2(Path(__file__).resolve().parents[2] / "pm/lock.json", lock)
(repo / "pyproject.toml").write_text('[project]\nname="fixture"\nversion="1"\n[project.scripts]\nprobe="entry:main"\n', encoding="utf-8")
(repo / "install-stamp.json").write_text('{"distribution":"apt-termux","payload":"bundled"}', encoding="utf-8")
for name in RESOURCE_ENV:
(repo / name).mkdir()
target = "linux-arm64-bionic"
tools = ("python", "node", "uv", "npm", "ffmpeg", "ripgrep")
for name in tools:
executable = get_package(name).binary(payload / "tools" / name, target)
executable.parent.mkdir(parents=True, exist_ok=True)
executable.write_bytes(b"foreign binary must not be executed")
executable.chmod(0o755)
python = get_package("python").binary(payload / "tools/python", target)
site = dependency_site(payload / "venv", Lockfile(lock).version("python"), target)
site.mkdir(parents=True)
pm = payload / "pm-runtime"
(pm / "deps").mkdir(parents=True)
(pm / "pm-runtime.json").write_text(json.dumps({"python": "../" + python.relative_to(payload).as_posix(), "sitePackages": "deps"}), encoding="utf-8")
tui = tmp_path / "tui-product"
(tui / "dist").mkdir(parents=True)
(tui / "dist/entry.js").write_text("built", encoding="utf-8")
(tui / "package.json").write_text('{"type":"module"}', encoding="utf-8")
build_set = tmp_path / "build-set.txt"
build_set.write_bytes(b"\xef\xbb\xbfnative-fixture\n")
write_facts(payload, lock, build_set, tui)
manifest = json.loads((payload / "manifest.json").read_text())
assert manifest["runtime"]["commands"] == {"probe": "bin/probe"}
assert manifest["runtime"]["sitePackages"] == site.relative_to(payload).as_posix()
assert (repo / "hermes_cli/tui_dist/entry.js").read_text() == "built"
assert not (repo / "hermes_cli/web_dist").exists()
assert json.loads((payload / "native-wheels.json").read_text()) == ["native-fixture"]
facts = Facts(payload / "tools/facts.json", strict=True)
assert all(facts.get(name)["target"] == target for name in tools)