Regroup Dante, MIDI and apps into one button each, and fix the morning Bonjour check.
DANTE now alarms for all 19 devices by name. MIDI covers the Lighting PC and SuperRack peers plus the Lighting PC and NA Tracks sessions; APPS covers ProPresenter, Ableton, the tracks Mac and the Bible TV app. Five buttons became three, and a check's tag names the device in the message. dns-sd pads hours before 10 AM with a space, which the Bonjour parser did not allow for, so every session read as gone each morning. Parsing is now its own function with a test for both cases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -167,14 +167,14 @@ class TestChecks(unittest.TestCase):
|
||||
out = dict(sp.check_dante({"conn": "audinate-dantecontroller", "devices": ["BOH-WING"]}, self.snap, self.ctx))
|
||||
self.assertEqual(out["conn"].msg, "NO DATA")
|
||||
|
||||
def test_dante_count_includes_other_buttons(self):
|
||||
def test_dante_button_names_the_missing_device(self):
|
||||
devices = json.loads(self.snap.vars[("audinate-dantecontroller", "devices")])
|
||||
devices.remove("NA-Tracks")
|
||||
self.snap.vars[("audinate-dantecontroller", "devices")] = json.dumps(devices)
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 4)
|
||||
self.assertEqual(tiles["dante"]["x"], "DANTE\n18/19")
|
||||
self.assertEqual(level(tiles["dante"]), "ok") # the alarm is on TRACKS, not twice
|
||||
self.assertEqual(tiles["tracks"]["x"], "TRACKS\nDANTE GONE")
|
||||
self.assertEqual(tiles["dante"]["x"], "DANTE\nTRACKS GONE")
|
||||
self.assertEqual(level(tiles["dante"]), "err")
|
||||
self.assertEqual(tiles["all"]["x"], "1 DOWN\nDANTE TRACKS GONE")
|
||||
|
||||
def test_shure_psm_tascam(self):
|
||||
s = self.snap
|
||||
@@ -204,24 +204,42 @@ class TestChecks(unittest.TestCase):
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 4)
|
||||
self.assertIn("PSM 1 OFFLINE", tiles["rf"]["x"])
|
||||
|
||||
def test_bonjour_parsing_morning_and_afternoon(self):
|
||||
out = ("Browsing for _apple-midi._udp.local.\n"
|
||||
" 9:20:51.321 Add 3 13 local. _apple-midi._udp. NA Tracks\n"
|
||||
"19:20:51.321 Add 3 27 local. _apple-midi._udp. Lighting PC\n"
|
||||
"19:21:02.001 Add 3 27 local. _apple-midi._udp. Gone Soon\n"
|
||||
"19:21:09.001 Rmv 1 27 local. _apple-midi._udp. Gone Soon\n")
|
||||
self.assertEqual(sp.parse_dns_sd(out), {"NA Tracks", "Lighting PC"})
|
||||
|
||||
def test_midi_peer_joining_is_not_an_error(self):
|
||||
for p in self.snap.midi["NA Ingest"]["peers"]:
|
||||
p["state"] = "connected" # joined, clock sync not finished yet
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 8)
|
||||
self.assertEqual(tiles["lightpc"]["x"], "LIGHT PC\nMIDI OK")
|
||||
self.assertEqual(tiles["midi"]["x"], "MIDI\nOK")
|
||||
|
||||
def test_midi_peer_and_bonjour(self):
|
||||
self.snap.midi["NA Ingest"]["peers"] = [p for p in self.snap.midi["NA Ingest"]["peers"]
|
||||
if p["name"] != "Lighting PC"]
|
||||
self.snap.mdns.discard("NA Tracks")
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 4)
|
||||
self.assertEqual(tiles["lightpc"]["x"], "LIGHT PC\nMIDI LOST")
|
||||
self.assertEqual(tiles["tracks"]["x"], "TRACKS\nMIDI SESS GONE")
|
||||
self.assertEqual(tiles["midi"]["x"], "MIDI\nLIGHT PC MIDI LOST\n+1")
|
||||
self.assertEqual(tiles["show"]["x"], "SHOW\nLIGHT PC MIDI LOST\n+1") # named, no "MIDI" prefix
|
||||
self.assertNotIn("MIDI TRACKS", tiles["show"]["x"])
|
||||
self.snap.midi["NA Ingest"]["peers"].append({"name": "Lighting PC", "address": "", "state": "running"})
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 4)
|
||||
self.assertEqual(tiles["midi"]["x"], "MIDI\nTRACKS MIDI GONE")
|
||||
|
||||
def test_bible_tv_app_down(self):
|
||||
self.snap.http["http://10.6.7.13:8080/"] = False
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 4)
|
||||
self.assertEqual(tiles["bibletv"]["x"], "BIBLE TV\nAPP DOWN")
|
||||
self.assertEqual(tiles["apps"]["x"], "APPS\nBIBLE APP DOWN")
|
||||
|
||||
def test_apps_names_the_app(self):
|
||||
self.snap.conns["Propresenter-API"]["category"] = "error"
|
||||
tiles, _ = run_steps(sp.Engine(CONFIG), self.snap, self.now, 4)
|
||||
self.assertEqual(tiles["apps"]["x"], "APPS\nPROPRES OFFLINE")
|
||||
self.assertEqual(tiles["all"]["x"], "1 DOWN\nPROPRES OFFLINE")
|
||||
|
||||
def test_http_intervals(self):
|
||||
checks = dict(sp.http_checks(CONFIG))
|
||||
@@ -390,7 +408,8 @@ class TestBehaviour(unittest.TestCase):
|
||||
engine = sp.Engine(CONFIG)
|
||||
self.assertEqual(engine.restart_targets("hd3"), ["HyperDeck_3"])
|
||||
self.assertEqual(engine.restart_targets("led"), ["VX1000", "UHDJr"])
|
||||
self.assertEqual(engine.restart_targets("tracks"), ["ableton"]) # not the shared Dante one
|
||||
self.assertEqual(engine.restart_targets("apps"), ["Propresenter-API", "ableton", "BibleTV"])
|
||||
self.assertEqual(engine.restart_targets("dante"), []) # shared connection: never
|
||||
self.assertEqual(engine.restart_targets("ingest"), [])
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user