Files
agentci/tests/test_runtime_scripts.py
2026-07-22 23:10:23 +02:00

90 lines
2.4 KiB
Python

import json
import os
import stat
import subprocess
from pathlib import Path
import pytest
ROOT = Path(__file__).parents[1]
def test_entrypoint_loads_secrets_writes_tea_login_and_executes_command(
tmp_path: Path,
) -> None:
password = tmp_path / "opencode-password"
password.write_text("server-secret")
token = tmp_path / "gitea-token"
token.write_text("gitea-secret\n")
config_home = tmp_path / "config"
environment = {
**os.environ,
"OPENCODE_SERVER_PASSWORD_FILE": str(password),
"AGENTCI_GITEA_TOKEN_FILE": str(token),
"AGENTCI_TEA_CONFIG_HOME": str(config_home),
"AGENTCI_GITEA_URL": "https://gitea.example",
}
result = subprocess.run(
[
"/bin/sh",
str(ROOT / "scripts" / "entrypoint.sh"),
"/bin/sh",
"-c",
'printf "%s\\n" "$OPENCODE_SERVER_PASSWORD"; printf "arg=%s\\n" "$@"',
"child",
"first",
"second value",
],
env=environment,
capture_output=True,
text=True,
timeout=10,
check=False,
)
assert result.returncode == 0, result.stderr
assert result.stdout.splitlines() == [
"server-secret",
"arg=first",
"arg=second value",
]
config_path = config_home / "tea" / "config.yml"
assert json.loads(config_path.read_text()) == {
"logins": [
{
"name": "agentci",
"url": "https://gitea.example",
"token": "gitea-secret",
"default": True,
"version_check": False,
}
],
"preferences": {},
}
assert stat.S_IMODE(config_path.stat().st_mode) == 0o600
@pytest.mark.parametrize(
("prompt", "expected"),
[
("Username for 'https://gitea.example':", "agentci-bot\n"),
("Password for 'https://agentci@gitea.example':", "token-secret\n"),
],
)
def test_gitea_askpass_selects_credential_for_prompt(prompt: str, expected: str) -> None:
result = subprocess.run(
["/bin/sh", str(ROOT / "scripts" / "gitea-askpass.sh"), prompt],
env={
"AGENTCI_GIT_USERNAME": "agentci-bot",
"AGENTCI_GIT_PASSWORD": "token-secret",
},
capture_output=True,
text=True,
timeout=10,
check=False,
)
assert result.returncode == 0, result.stderr
assert result.stdout == expected