87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
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
|
|
|