38 lines
1.5 KiB
Python
38 lines
1.5 KiB
Python
from src import model_discovery
|
|
|
|
|
|
def test_parse_tailscale_status_rejects_wrong_shapes():
|
|
assert model_discovery._parse_tailscale_status("{bad") == {}
|
|
assert model_discovery._parse_tailscale_status("[]") == {}
|
|
assert model_discovery._parse_tailscale_status('{"Self": {}}') == {"Self": {}}
|
|
|
|
|
|
def test_discovery_ignores_invalid_peer_rows(monkeypatch):
|
|
class Result:
|
|
returncode = 0
|
|
stdout = '{"Self":{"TailscaleIPs":["100.1.1.1"]},"Peer":{"bad":"row","ok":{"Online":true,"HostName":"box","OS":"linux","TailscaleIPs":["100.1.1.2"]}}}'
|
|
|
|
monkeypatch.setattr(model_discovery.subprocess, "run", lambda *a, **k: Result())
|
|
model_discovery._hosts_cache = []
|
|
model_discovery._hosts_cache_time = 0
|
|
|
|
assert model_discovery.discover_tailscale_hosts() == ["100.1.1.1", "100.1.1.2"]
|
|
|
|
|
|
def test_discovery_ignores_invalid_tailscale_ip_shapes(monkeypatch):
|
|
class Result:
|
|
returncode = 0
|
|
stdout = (
|
|
'{"Self":{"TailscaleIPs":"100.1.1.1"},'
|
|
'"Peer":{'
|
|
'"string_ips":{"Online":true,"HostName":"bad","OS":"linux","TailscaleIPs":"100.1.1.2"},'
|
|
'"mixed_ips":{"Online":true,"HostName":"ok","OS":"linux","TailscaleIPs":[null,123,"100.1.1.3"]}'
|
|
'}}'
|
|
)
|
|
|
|
monkeypatch.setattr(model_discovery.subprocess, "run", lambda *a, **k: Result())
|
|
model_discovery._hosts_cache = []
|
|
model_discovery._hosts_cache_time = 0
|
|
|
|
assert model_discovery.discover_tailscale_hosts() == ["100.1.1.3"]
|