Files
hermes-agent/tests/docker/test_image_payload.py

49 lines
1.8 KiB
Python

"""The image's non-root runtime uses its staged tools and generated assets."""
from __future__ import annotations
import subprocess
def test_python_uses_pm_interpreter_as_runtime_user(built_image: str) -> None:
probe = """
from pathlib import Path
import sys
from pm.lock import Facts
from pm.registry import get_package
from pm.store import current_target
store = Path('/opt/hermes/tools')
assert not list(store.glob('fetch-*')), 'completed download archives must not ship'
fact = Facts(store / 'facts.json').get('python')
expected = get_package('python').binary(store / fact['entry'], current_target())
assert Path(sys._base_executable).resolve() == expected.resolve()
import hermes_yaml as yaml
print('PM interpreter and application dependencies load as hermes')
"""
result = subprocess.run(
["docker", "run", "--rm", "--network", "none", "--user", "hermes",
"--entrypoint", "/opt/hermes/.venv/bin/python", built_image, "-c", probe],
capture_output=True, text=True, timeout=60,
)
assert result.returncode == 0, result.stdout + result.stderr
def test_dashboard_ships_generated_icon_without_build_environment(built_image: str) -> None:
probe = """
from pathlib import Path
from PIL import Image
with Image.open('/opt/hermes/hermes_cli/web_dist/favicon.ico') as image:
image.load()
assert image.width > 0 and image.height > 0
assert not Path('/opt/hermes/node_modules/vite').exists()
assert not Path('/opt/hermes/node_modules/esbuild').exists()
assert Path('/opt/hermes/node_modules/typescript/bin/tsc').is_file()
"""
result = subprocess.run(
["docker", "run", "--rm", "--network", "none", "--user", "hermes",
"--entrypoint", "/opt/hermes/.venv/bin/python", built_image, "-c", probe],
capture_output=True, text=True, timeout=60,
)
assert result.returncode == 0, result.stdout + result.stderr