#!/usr/bin/env python3
"""Start GUI, hit /cmd_list_army and /cmd_list_nodes, validate anchors."""
import sys, subprocess, time, socket, signal, os
err = []
proc = subprocess.Popen(
[sys.executable, "ufonet", "--gui"],
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL,
preexec_fn=os.setsid,
)
def http_get(path, port=9999, timeout=5):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(timeout)
s.connect(("127.0.0.1", port))
s.sendall(("GET " + path + " HTTP/1.0\r\n\r\n").encode())
chunks = []
while True:
try:
data = s.recv(65536)
if not data: break
chunks.append(data)
except socket.timeout:
break
s.close()
return b"".join(chunks).decode("utf-8", errors="replace")
try:
ready = False
for _ in range(30):
try:
s = socket.socket()
s.settimeout(0.5)
s.connect(("127.0.0.1", 9999))
s.close()
ready = True
break
except Exception:
time.sleep(0.5)
if not ready:
err.append("GUI didn't open port 9999 within ~15s")
else:
army = http_get("/cmd_list_army")
nodes = http_get("/cmd_list_nodes")
sections = ["UCAVs", "Aliens", "Droids", "Zombies", "XML-RPCs", "NTPs", "DNSs", "SNMPs"]
for s in sections:
if f"{s}:" not in army:
err.append(f"army: section {s} missing")
if army.count("