Files
hermes-agent/tests/hermes_cli/test_ssh_ownership_endpoint.py
T

54 lines
1.9 KiB
Python

from fastapi.testclient import TestClient
from hermes_cli import web_server
def test_ssh_ownership_endpoint_requires_token_and_returns_exact_nonce(monkeypatch):
token = "t" * 64
nonce = "0123456789abcdef"
monkeypatch.setattr(web_server, "_SESSION_TOKEN", token)
monkeypatch.setattr(web_server, "_SSH_OWNER_NONCE", nonce)
web_server.app.state.auth_required = False
client = TestClient(web_server.app)
assert client.get("/api/ssh/ownership").status_code == 401
response = client.get(
"/api/ssh/ownership",
headers={"X-Hermes-Session-Token": token},
)
assert response.status_code == 200
assert response.json() == {
"ok": True,
"sshOwnerNonce": nonce,
"protocolVersion": 1,
"runtimeIntact": True,
}
def test_ssh_ownership_reports_replaced_runtime(monkeypatch):
token = "t" * 64
monkeypatch.setattr(web_server, "_SESSION_TOKEN", token)
monkeypatch.setattr(web_server, "_SSH_OWNER_NONCE", "0123456789abcdef")
monkeypatch.setattr(web_server, "_SSH_RUNTIME_PURELIB", ("/venv/site-packages", 10, 20))
monkeypatch.setattr(web_server.os, "stat", lambda _path: type("Stat", (), {"st_dev": 10, "st_ino": 21})())
client = TestClient(web_server.app)
response = client.get("/api/ssh/ownership", headers={"X-Hermes-Session-Token": token})
assert response.status_code == 200
assert response.json()["runtimeIntact"] is False
def test_ssh_ownership_endpoint_is_absent_without_owner_nonce(monkeypatch):
token = "t" * 64
monkeypatch.setattr(web_server, "_SESSION_TOKEN", token)
monkeypatch.setattr(web_server, "_SSH_OWNER_NONCE", None)
web_server.app.state.auth_required = False
client = TestClient(web_server.app)
response = client.get(
"/api/ssh/ownership",
headers={"X-Hermes-Session-Token": token},
)
assert response.status_code == 404