Files
nap-cli/tests/test_gateway_configure_consistency.py

143 lines
6.9 KiB
Python

#!/usr/bin/env python3
"""Smoke-test parity between CLI and MCP gateway configure bootstrap flows."""
import importlib.util
import os
import pathlib
import sys
def load_module():
script_path = pathlib.Path(__file__).resolve().parents[1] / "resources" / "scripts" / "napseer_mcp_server.py"
sys.path.insert(0, str(script_path.parent))
spec = importlib.util.spec_from_file_location("napseer_mcp_server", script_path)
module = importlib.util.module_from_spec(spec)
assert spec and spec.loader
spec.loader.exec_module(module)
return module
def assert_equal(actual, expected, message):
if actual != expected:
raise AssertionError(f"{message}: expected={expected!r} actual={actual!r}")
def run():
mod = load_module()
calls = {"preregister": [], "setup": [], "open": [], "tmux": []}
mod.AUTH = {}
mod.TOKEN = None
mod.load_public_auth_file = lambda: {}
mod.vault_exists = lambda: False
mod.gateway_is_unlocked = lambda: False
mod.gateway_setup = lambda payload: calls["setup"].append(payload) or {"status": "configured"}
mod.gateway_open_local = lambda passphrase=None: calls["open"].append(passphrase) or {"status": "local_available"}
mod.gateway_tmux_configure = lambda payload: calls["tmux"].append(payload) or {"status": "configured"}
mod.gateway_status = lambda: {"status": "ok"}
mod.gateway_log = lambda *args, **kwargs: None
mod.ensure_container_uuid = lambda: "2a164e32-9d98-4b4e-9ad8-eed7307a5b08"
mod.normalize_gateway_command = lambda: "bash"
mod.gateway_bootstrap_token_invalid_result = lambda: {"status": "bootstrap_token_invalid"}
def preregister(payload):
calls["preregister"].append(payload)
return {"status": "pending_review", "registration": {"id": "reg_1"}}
mod.gateway_service_preregister = preregister
os.environ["NAPSEER_GATEWAY_BOOTSTRAP_TOKEN"] = "npb_env"
os.environ["NAPSEER_GATEWAY_PASSPHRASE"] = "pw_env"
mcp_result = mod.mcp_gateway_configure({"default_command": "bash -l", "display_name": "gw-mcp"})
assert_equal(mcp_result["status"], "pending_review", "mcp preregister status")
cli_result = mod.cli_gateway_configure(["--command", "bash -l", "--name", "gw-cli"])
assert_equal(cli_result["status"], "pending_review", "cli preregister status")
positional_result = mod.cli_gateway_configure(["npb_positional", "--passphrase", "pw_positional", "--command", "bash"])
assert_equal(positional_result["status"], "pending_review", "cli positional preregister status")
assert_equal(len(calls["preregister"]), 3, "preregister call count")
assert_equal(calls["preregister"][0]["bootstrap_token"], "npb_env", "mcp bootstrap token source")
assert_equal(calls["preregister"][1]["bootstrap_token"], "npb_env", "cli bootstrap token source")
assert_equal(calls["preregister"][2]["bootstrap_token"], "npb_positional", "cli positional bootstrap token source")
assert_equal(calls["preregister"][0]["passphrase"], "pw_env", "mcp passphrase source")
assert_equal(calls["preregister"][1]["passphrase"], "pw_env", "cli passphrase source")
assert_equal(calls["preregister"][2]["passphrase"], "pw_positional", "cli positional passphrase source")
assert_equal(calls["preregister"][0]["default_command"], "bash -l", "mcp default command")
assert_equal(calls["preregister"][1]["default_command"], "bash -l", "cli default command")
mod.AUTH = {"service_registration_id": "stale_reg"}
mod.load_public_auth_file = lambda: {"service_registration_id": "stale_reg"}
stale_result = mod.mcp_gateway_configure({"bootstrap_token": "npb_fresh", "passphrase": "pw", "default_command": "bash"})
assert_equal(stale_result["status"], "pending_review", "stale registration should not block fresh bootstrap")
assert_equal(calls["preregister"][-1]["bootstrap_token"], "npb_fresh", "fresh bootstrap token source")
def preregister_invalid(_payload):
raise RuntimeError("service bootstrap token is invalid or expired")
mod.gateway_service_preregister = preregister_invalid
invalid_mcp = mod.mcp_gateway_configure({"bootstrap_token": "npb_invalid", "passphrase": "pw", "default_command": "bash"})
invalid_cli = mod.cli_gateway_configure(["--bootstrap-token", "npb_invalid", "--passphrase", "pw", "--command", "bash"])
assert_equal(invalid_mcp["status"], "bootstrap_token_invalid", "mcp invalid token fallback")
assert_equal(invalid_cli["status"], "bootstrap_token_invalid", "cli invalid token fallback")
calls["preregister"].clear()
calls["open"].clear()
calls["tmux"].clear()
mod.gateway_service_preregister = preregister
mod.TOKEN = None
mod.vault_exists = lambda: True
mod.gateway_is_unlocked = lambda: False
def open_existing(passphrase=None):
calls["open"].append(passphrase)
mod.TOKEN = "np_existing_worker"
return {"status": "local_available"}
mod.gateway_open_local = open_existing
preserved_mcp = mod.mcp_gateway_configure({
"bootstrap_token": "npb_existing",
"passphrase": "pw_existing",
"default_command": "bash",
})
preserved_cli = mod.cli_gateway_configure([
"--bootstrap-token", "npb_existing",
"--passphrase", "pw_existing",
"--command", "bash",
])
assert_equal(preserved_mcp["status"], "configured", "mcp preserved gateway should skip preregister")
assert_equal(preserved_cli["status"], "configured", "cli preserved gateway should skip preregister")
assert_equal(calls["preregister"], [], "preserved gateway preregister calls")
assert_equal(calls["open"], ["pw_existing", "pw_existing"], "preserved gateway opens local storage before preregister")
assert_equal(len(calls["tmux"]), 2, "preserved gateway command updates")
calls["preregister"].clear()
calls["open"].clear()
mod.TOKEN = None
mod.vault_exists = lambda: True
service_available = {"value": False}
mod.gateway_is_unlocked = lambda: service_available["value"]
os.environ["NAPSEER_GATEWAY_PASSPHRASE"] = "pw_service"
os.environ["NAPSEER_GATEWAY_BOOTSTRAP_TOKEN"] = "npb_service"
mod.start_local_ui = lambda payload: {"status": "started", "payload": payload}
def service_open(passphrase=None):
calls["open"].append(passphrase)
mod.TOKEN = "np_existing_worker"
service_available["value"] = True
return {"status": "local_available"}
mod.gateway_open_local = service_open
mod.threading.Event = lambda: type("StopEvent", (), {"wait": lambda self: (_ for _ in ()).throw(KeyboardInterrupt())})()
service_result = mod.gateway_service_run({"timeout_seconds": 0})
assert_equal(service_result["status"], "started", "service run with preserved token")
assert_equal(calls["preregister"], [], "service run preserved gateway preregister calls")
assert_equal(calls["open"], ["pw_service"], "service run opens local storage before preregister")
print("ok: gateway configure CLI/MCP parity smoke passed")
if __name__ == "__main__":
run()