Files
hermes-agent/tests/scripts/install/test_install_ps1_json_failure_frame.py

35 lines
1.5 KiB
Python

"""A fatal stage under -Stage -Json yields exactly one failure frame carrying the reason."""
import json
import os
from pathlib import Path
import shutil
import subprocess
import pytest
pytestmark = pytest.mark.platforms("windows")
INSTALLER = Path(__file__).resolve().parents[3] / "scripts" / "install.ps1"
def test_fail_inside_a_stage_emits_one_json_frame_with_the_reason(tmp_path):
powershell = shutil.which("powershell")
assert powershell
# A nonempty non-checkout refuses before any clone retries, through Fail.
install_dir = tmp_path / "install"
install_dir.mkdir()
(install_dir / "user-file").write_text("preserve me", encoding="utf-8")
tools = tmp_path / "empty-tools"
env = dict(os.environ, HERMES_HOME=str(tmp_path / "home"),
HERMES_RUNTIME_DIR=str(tools))
result = subprocess.run(
[powershell, "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", str(INSTALLER),
"-Stage", "repository", "-Json", "-InstallDir", str(install_dir)],
env=env, capture_output=True, text=True, timeout=30)
frames = [json.loads(line) for line in result.stdout.splitlines() if line.startswith("{")]
assert result.returncode == 1
assert len(frames) == 1, result.stdout
assert frames[0]["ok"] is False and frames[0]["stage"] == "repository"
assert "exists and is not a Hermes git checkout" in frames[0]["reason"]
assert (install_dir / "user-file").read_text(encoding="utf-8") == "preserve me"
assert not tools.exists()