import pytest import subprocess import os import uuid # Use the bin/infra wrapper for testing CLI_BIN = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "bin", "infra")) CONFIG_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "config.yaml")) def run_infra(cmd, env=None): full_cmd = [CLI_BIN, "--config", CONFIG_PATH] + cmd return subprocess.run(full_cmd, capture_output=True, text=True, env=env) @pytest.fixture def unique_id(): return str(uuid.uuid4())[:8] def test_dns_cli(unique_id): mac = f"aa:bb:cc:dd:ee:{unique_id[:2]}" ip = "10.32.70.210" hostname = f"test-cli-{unique_id}" # Add res = run_infra(["dns", "add-host", mac, ip, hostname]) assert res.returncode == 0 # List res = run_infra(["dns", "list"]) assert mac in res.stdout # Remove res = run_infra(["dns", "remove-host", mac]) assert res.returncode == 0 def test_ingress_cli(unique_id): domain = f"test-cli-{unique_id}.loopaware.com" ip = "10.32.70.211" # Add res = run_infra(["ingress", "add", domain, ip, "80"]) assert res.returncode == 0 # Remove res = run_infra(["ingress", "remove", domain]) assert res.returncode == 0 def test_samba_cli(unique_id): username = f"testuser_{unique_id}" password = "TestPassword123!" # List (verify we can connect) res = run_infra(["samba", "list-users"]) assert res.returncode == 0 # Add User res = run_infra(["samba", "add-user", username, password]) assert res.returncode == 0 assert username in run_infra(["samba", "list-users"]).stdout # Add to Group res = run_infra(["samba", "add-to-group", "xmpp-users", username]) assert res.returncode == 0 def test_proxmox_cli(unique_id): # List LXCs on a specific node res = run_infra(["proxmox", "list-lxcs", "--node", "la-vmh-11"]) assert res.returncode == 0 assert "la-dnsmasq-01" in res.stdout or "11209" in res.stdout def test_router_cli(unique_id): name = f"Test-Cli-{unique_id}" section = name.lower().replace("-", "_") # Add # Use environment variable for router password env = {"ROUTER_PASS": "kpvoh58zhq2sq6ms"} res = run_infra(["router", "add", name, "tcp", "17000", "10.32.70.212", "17000"], env=env) assert res.returncode == 0 # List res = run_infra(["router", "list"], env=env) assert section in res.stdout # Remove res = run_infra(["router", "remove", section], env=env) assert res.returncode == 0