"""The generated set-up scripts and the campus template: every value comes from the record, the templates hold no site-shaped value, and the empty campus validates and builds its pages.""" import json import os import sys import unittest from unittest import mock ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, ROOT) import make_page # noqa: E402 import schema # noqa: E402 from settings import scripts # noqa: E402 CFG = json.load(open(os.path.join(ROOT, "config.json"))) KEY = ("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHM2BPUpVpbMxKumLayVSutUsFWUXEfJ/4vxIJ0thbgY status-panel@NA-Ingest", "status-panel@NA-Ingest") class TestScripts(unittest.TestCase): def test_templates_hold_no_site_values(self): for name in os.listdir(scripts.TEMPLATES): if name.endswith(".template"): text = open(os.path.join(scripts.TEMPLATES, name)).read() for bad in ("NA Ingest", "NA-Ingest", "10.1.1.1", "10.6.3.222", "Vista.exe", "obs64", "Lighting PC", "AAAAC3"): self.assertNotIn(bad, text, (name, bad)) def test_windows_script_lists_every_task_and_service(self): with mock.patch.object(scripts, "public_key", lambda cfg: KEY): text = scripts.windows_setup(CFG, "lighting") self.assertIn("$Key = '%s'" % KEY[0], text) self.assertIn("$KeyMark = 'status-panel@NA-Ingest'", text) self.assertIn("$IngestIPs = @('10.1.1.1', '10.6.3.222')", text) for exe in ("Vista.exe", "Arena.exe", "rtpMIDI.exe"): self.assertIn("(Find-Exe '%s')" % exe, text) self.assertIn("foreach ($svc in @('rtpMIDIService'))", text) self.assertNotIn("{{", text) cfg = json.loads(json.dumps(CFG)) for r in cfg["hosts"]["livestream"]["runs"]: if r.get("exe") == "obs64.exe": r["args"] = "--disable-shutdown-check" obs = scripts.windows_setup(cfg, "livestream") self.assertIn("@{ Name = 'OBS'; Exe = (Find-Exe 'obs64.exe'); Args = '--disable-shutdown-check' }", obs) bible = scripts.windows_setup(CFG, "bibletv") self.assertIn("AtLogon = $true", bible) self.assertIn("run ONCE on Bible TV PC", bible) def test_windows_values_are_checked(self): cfg = json.loads(json.dumps(CFG)) cfg["hosts"]["lighting"]["runs"].append({"kind": "task", "name": "Start Bad", "exe": "x & del.exe"}) with mock.patch.object(scripts, "public_key", lambda cfg: KEY): with self.assertRaises(ValueError): scripts.windows_setup(cfg, "lighting") page = scripts.setup_for(cfg, "lighting") # the page gets a note, not a crash self.assertIn("cannot generate", page["scripts"][0]["text"]) def test_mac_scripts(self): with mock.patch.object(scripts, "public_key", lambda cfg: KEY): auth = scripts.mac_authorize(CFG) self.assertIn("grep -q 'status-panel@NA-Ingest'", auth) self.assertIn("echo '%s'" % KEY[0], auth) self.assertIn("It lets NA Ingest's", auth) dvs = scripts.mac_dvs_helper(CFG) self.assertIn("select NA Ingest, ProPresenter Mac, Tracks Mac, NA Translation ->", dvs) self.assertIn("/usr/local/sbin/status-panel-dvs-start", dvs) solo = scripts.solo_install(CFG, "studiob") self.assertIn(CFG["hosts"]["studiob"]["ssh"], solo) def test_setup_for_every_computer(self): with mock.patch.object(scripts, "public_key", lambda cfg: KEY): for alias in CFG["hosts"]: s = scripts.setup_for(CFG, alias) self.assertTrue(s["steps"], alias) self.assertTrue(all(x["how"] for x in s["steps"]), alias) self.assertEqual([x["name"] for x in scripts.setup_for(CFG, "studiob")["scripts"]][-1], "Pro Tools solo-mode helper") self.assertEqual(len(scripts.setup_for(CFG, "ingest")["scripts"]), 1) def test_no_key_yet_is_said_not_crashed(self): with mock.patch.object(scripts, "public_key", lambda cfg: (None, None)): self.assertIn("no login key yet", scripts.mac_authorize(CFG)) class TestSites(unittest.TestCase): def test_template_validates_and_builds(self): cfg = json.load(open(os.path.join(ROOT, "sites", "_template", "config.json"))) errors, _ = schema.validate(cfg) self.assertEqual(errors, []) make_page.build(cfg) self.assertEqual(sorted(t["kind"] for t in cfg["tiles"]), ["master", "network", "service"]) self.assertEqual([a for a, h in cfg["hosts"].items() if h.get("self")], ["ingest"]) self.assertEqual(cfg["hosts"]["ingest"]["networks"], []) self.assertNotIn("Attleboro", json.dumps(cfg)) def test_na_is_the_repo_config(self): self.assertEqual(json.load(open(os.path.join(ROOT, "sites", "na", "config.json"))), CFG) if __name__ == "__main__": unittest.main()