from __future__ import annotations import os from types import SimpleNamespace from pathlib import Path import unittest from unittest.mock import patch import prod.launch_dita_v2 as launch_dita_v2 class DummyBundle: def __init__(self) -> None: self.closed = False self.kernel = SimpleNamespace(snapshot=lambda: {"ok": True}, control=SimpleNamespace(as_dict=lambda: {"mode": "NORMAL"})) self.venue = SimpleNamespace(__class__=SimpleNamespace(__name__="MockVenueAdapter")) self.zinc_plane = SimpleNamespace(__class__=SimpleNamespace(__name__="InMemoryZincPlane")) self.projection = SimpleNamespace(__class__=SimpleNamespace(__name__="HazelcastProjection")) def close(self) -> None: self.closed = True class TestLaunchDitaV2(unittest.TestCase): def test_supervisor_config_contains_dita_v2_program(self) -> None: conf = Path("/mnt/dolphinng5_predict/prod/supervisor/dolphin-supervisord.conf").read_text() self.assertIn("[program:dita_v2]", conf) self.assertIn("launch_dita_v2.py", conf) self.assertIn("DITA_V2_LAUNCHER_MODE=\"serve\"", conf) def test_env_mode_defaults_to_serve(self) -> None: previous = os.environ.get("DITA_V2_LAUNCHER_MODE") try: os.environ.pop("DITA_V2_LAUNCHER_MODE", None) self.assertEqual(launch_dita_v2._env_mode(), "serve") os.environ["DITA_V2_LAUNCHER_MODE"] = "once" self.assertEqual(launch_dita_v2._env_mode(), "once") finally: if previous is None: os.environ.pop("DITA_V2_LAUNCHER_MODE", None) else: os.environ["DITA_V2_LAUNCHER_MODE"] = previous def test_main_once_uses_snapshot_path(self) -> None: bundle = DummyBundle() with patch.object(launch_dita_v2, "build_launcher_bundle", return_value=bundle), patch.object( launch_dita_v2, "_serve", side_effect=AssertionError("_serve should not run in once mode") ): previous = os.environ.get("DITA_V2_LAUNCHER_MODE") os.environ["DITA_V2_LAUNCHER_MODE"] = "once" try: self.assertEqual(launch_dita_v2.main(), 0) self.assertTrue(bundle.closed) finally: if previous is None: os.environ.pop("DITA_V2_LAUNCHER_MODE", None) else: os.environ["DITA_V2_LAUNCHER_MODE"] = previous def test_main_serve_routes_to_serve(self) -> None: bundle = DummyBundle() with patch.object(launch_dita_v2, "build_launcher_bundle", return_value=bundle), patch.object( launch_dita_v2, "_serve", return_value=7 ) as serve: previous = os.environ.get("DITA_V2_LAUNCHER_MODE") os.environ["DITA_V2_LAUNCHER_MODE"] = "serve" try: self.assertEqual(launch_dita_v2.main(), 7) serve.assert_called_once() self.assertTrue(bundle.closed) finally: if previous is None: os.environ.pop("DITA_V2_LAUNCHER_MODE", None) else: os.environ["DITA_V2_LAUNCHER_MODE"] = previous if __name__ == "__main__": unittest.main()