Files
hermes-agent/tests/installation/test_installer_common.py
ethernet 241bc72c1d test(e2e): let PM installers exercise the default browser install
The driver passed --skip-browser whenever the installer's help listed it.
That was for historical installers' own Playwright step; on a PM installer
the flag is now a real opt-out and would hide the default users get.
2026-09-24 17:27:45 -04:00

86 lines
4.5 KiB
Python

"""Driver setup against private Git/script artifacts, never an installed app."""
import os
import subprocess
from pathlib import Path
import pytest
HELPER = Path(__file__).resolve().parents[1] / "install/e2e-assets/installer-common.sh"
@pytest.mark.platforms("posix")
def test_redirect_and_historical_installer_keep_transport_flags_and_exit(tmp_path):
env = {**os.environ, "HOME": str(tmp_path), "GIT_CONFIG_GLOBAL": os.devnull,
"GIT_CONFIG_NOSYSTEM": "1", "GIT_AUTHOR_NAME": "Fixture", "GIT_AUTHOR_EMAIL": "fixture@example.invalid",
"GIT_COMMITTER_NAME": "Fixture", "GIT_COMMITTER_EMAIL": "fixture@example.invalid"}
repo, work, serve = (tmp_path / name for name in ("repo", "work", "serve.git"))
work.mkdir()
def git(*args):
return subprocess.check_output(["git", "-C", str(repo), *args], env=env, text=True).strip()
subprocess.run(["git", "init", "-q", str(repo)], env=env, check=True)
git("remote", "add", "origin", "https://example.invalid/fork.git")
script = repo / "scripts/install.sh"
script.parent.mkdir()
script.write_text('printf "%s\\n" "$@"\nread -r value && exit 99\nexit 0\n', encoding="utf-8")
git("add", ".")
git("commit", "-qm", "old")
old = git("rev-parse", "HEAD")
source_body = script.read_text(encoding="utf-8")
script.write_text('case "$1" in --help) printf "%s\\n" "--skip-browser --include-desktop"; exit 0;; esac\n'
'# --skip-browser --include-desktop\n' + source_body, encoding="utf-8")
git("commit", "-qam", "new")
new = git("rev-parse", "HEAD")
subprocess.run(["git", "clone", "--bare", "-q", str(repo), str(serve)], env=env, check=True)
setup = '''set -euo pipefail
source "$1"
fail() { printf '%s\n' "$*" >&2; exit 1; }
ok() { :; }
ts_prefix() { cat; }
log_group() { :; }
arm_source_redirect "$2" "$3" "$4"
'''
def run(body):
return subprocess.run(["bash", "-c", setup + body, "bash", str(HELPER), str(repo), str(work), str(serve), old, new],
env=env, text=True, capture_output=True, timeout=30)
result = run('''[ "$(git -C "$2" remote get-url origin)" = 'https://github.com/NousResearch/hermes-agent.git' ]
git clone -q https://github.com/NousResearch/hermes-agent.git "$3/clone"
[ "$(git -C "$3/clone" rev-parse HEAD)" = "$6" ]
run_source_installer "$2" "$3" "$3" "$5" old
run_source_installer "$2" "$3" "$3" "$6" new desktop
''')
assert result.returncode == 0, result.stderr
assert (work / "install-old.log").read_text(encoding="utf-8").splitlines() == ["--skip-setup"]
assert (work / "install-new.log").read_text(encoding="utf-8").splitlines() == ["--skip-setup", "--skip-browser", "--include-desktop"]
assert (work / "install-new.sh").read_bytes() == script.read_bytes()
refused = run('run_source_installer "$2" "$3" "$3" "$5" unavailable desktop')
assert refused.returncode != 0 and "does not support --include-desktop" in refused.stderr
assert not (work / "install-unavailable.log").exists()
script.write_text('case "$1" in\n'
' --help) printf "%s\\n" "--include-desktop"; exit 0;;\n'
' --skip-browser) exit 23;;\n'
'esac\n'
'# --skip-browser no longer skips browser installation; --include-desktop stays supported\n'
+ source_body, encoding="utf-8")
git("commit", "-qam", "reject retired browser flag")
current = run('run_source_installer "$2" "$3" "$3" HEAD current desktop')
assert current.returncode == 0, current.stderr
assert (work / "install-current.log").read_text(encoding="utf-8").splitlines() == [
"--skip-setup", "--include-desktop",
]
# A PM installer supports --skip-browser as a real opt-out; the leg must
# still install what users get by default, so the driver withholds it.
script.write_text('case "$1" in --help) printf "%s\\n" "--skip-browser --include-desktop"; exit 0;; esac\n'
'# "$boot_py" -m pm.cli install\n' + source_body, encoding="utf-8")
git("commit", "-qam", "pm installer")
pm_installer = run('run_source_installer "$2" "$3" "$3" HEAD pm')
assert pm_installer.returncode == 0, pm_installer.stderr
assert (work / "install-pm.log").read_text(encoding="utf-8").splitlines() == ["--skip-setup"]
script.write_text("exit 23\n", encoding="utf-8")
git("commit", "-qam", "failed installer")
failed = run('run_source_installer "$2" "$3" "$3" HEAD broken')
assert failed.returncode != 0 and "exited 23" in failed.stderr