75 lines
2.9 KiB
Python
75 lines
2.9 KiB
Python
import subprocess
|
|
import json
|
|
import yaml
|
|
|
|
def test_create_session_dry_run(mam_sandbox, mock_herdr, mock_agents):
|
|
"""
|
|
Sanity test verifying that create_session.sh --dry-run parses inputs,
|
|
invokes herdr's preflight checks, and exits successfully without side effects.
|
|
"""
|
|
tmp_path = mam_sandbox
|
|
script_path = tmp_path / "skills" / "multi-agent-mux-create" / "scripts" / "create_session.sh"
|
|
|
|
cmd = [
|
|
"bash", str(script_path),
|
|
"--workspace", str(tmp_path),
|
|
"--agent", "claude",
|
|
"--role", "Creator",
|
|
"--dry-run"
|
|
]
|
|
res = subprocess.run(cmd, capture_output=True, text=True)
|
|
assert res.returncode == 0, f"Stdout: {res.stdout}\nStderr: {res.stderr}"
|
|
assert "[dry-run] would provision isolation" in res.stdout
|
|
assert "[dry-run] would spawn" in res.stdout
|
|
|
|
# Verify that mock herdr was called for checking session existence (which gets translated to agent get)
|
|
with open(mock_herdr, 'r') as f:
|
|
state = json.load(f)
|
|
|
|
calls = state.get("calls", [])
|
|
assert any("agent" in call and "get" in call for call in calls), f"Calls: {calls}"
|
|
|
|
def test_create_session_full(mam_sandbox, mock_herdr, mock_agents):
|
|
"""
|
|
Sanity test verifying that a full create_session.sh run intercepts herdr calls,
|
|
completes the TUI readiness check using mock responses, and serializes state
|
|
correctly to the sandboxed agent-sessions.yaml registry.
|
|
"""
|
|
tmp_path = mam_sandbox
|
|
script_path = tmp_path / "skills" / "multi-agent-mux-create" / "scripts" / "create_session.sh"
|
|
|
|
cmd = [
|
|
"bash", str(script_path),
|
|
"--workspace", str(tmp_path),
|
|
"--agent", "claude",
|
|
"--role", "Creator"
|
|
]
|
|
res = subprocess.run(cmd, capture_output=True, text=True)
|
|
assert res.returncode == 0, f"Stdout: {res.stdout}\nStderr: {res.stderr}"
|
|
|
|
# 1. Verify mock herdr state file registers the agent session
|
|
with open(mock_herdr, 'r') as f:
|
|
state = json.load(f)
|
|
|
|
agents = state.get("agents", {})
|
|
assert len(agents) == 1, "There should be exactly one registered agent in the mock herdr state."
|
|
|
|
session_name = list(agents.keys())[0]
|
|
assert session_name.endswith("-creator-claude")
|
|
assert agents[session_name]["status"] == "running"
|
|
assert agents[session_name]["agent"] == "claude"
|
|
|
|
# 2. Verify that agent-sessions.yaml is successfully written
|
|
yaml_path = tmp_path / ".mam" / "agent-sessions.yaml"
|
|
assert yaml_path.exists(), "The agent-sessions.yaml configuration file was not created."
|
|
|
|
with open(yaml_path, 'r') as f:
|
|
reg = yaml.safe_load(f)
|
|
|
|
sessions = reg.get("herdr_sessions", [])
|
|
assert len(sessions) == 1
|
|
assert sessions[0]["name"] == session_name
|
|
assert sessions[0]["status"] == "running"
|
|
assert sessions[0]["role"] == "Creator"
|
|
assert sessions[0]["isolation"]["uuid"] is not None
|