from __future__ import annotations import json import unittest from pathlib import Path ROOT = Path(__file__).resolve().parents[1] class NekoConfigTests(unittest.TestCase): def test_browser_launch_cleanup_script_still_prunes_profile_bloat(self) -> None: script = (ROOT / "services" / "neko" / "browser-launch.sh").read_text(encoding="utf-8") self.assertIn("arch=\"$(uname -m", script) self.assertIn("--disable-software-rasterizer", script) self.assertIn("--use-gl=swiftshader", script) self.assertIn("NEKO_BROWSER_RENDER_MODE", script) self.assertIn('prune_path "$profile_dir/BrowserMetrics"', script) self.assertIn('prune_path "$profile_dir/Crash Reports"', script) self.assertIn('prune_path "$profile_dir/SingletonLock"', script) self.assertIn('prune_path "$profile_dir/Default/Code Cache"', script) def test_browser_policies_default_to_allowed_permissions(self) -> None: policies = json.loads((ROOT / "services" / "neko" / "policies" / "policies.json").read_text(encoding="utf-8")) self.assertEqual(policies["DefaultNotificationsSetting"], 1) self.assertEqual(policies["DefaultGeolocationSetting"], 1) self.assertTrue(policies["VideoCaptureAllowed"]) self.assertTrue(policies["AudioCaptureAllowed"]) self.assertEqual(policies["DeveloperToolsAvailability"], 1) def test_google_chrome_supervisor_uses_direct_stable_command(self) -> None: conf = (ROOT / "services" / "neko" / "google-chrome.conf").read_text(encoding="utf-8") self.assertIn("command=/usr/bin/google-chrome", conf) self.assertNotIn("browser-launch.sh", conf) self.assertIn("--user-data-dir=/home/neko/.config/google-chrome", conf) self.assertNotIn("--bwsi", conf) self.assertIn("--disable-software-rasterizer", conf) self.assertIn("autorestart=true", conf) self.assertIn("[program:openbox]", conf) self.assertIn("/usr/bin/openbox --config-file /etc/neko/openbox.xml", conf) def test_chromium_supervisor_uses_direct_stable_command(self) -> None: conf = (ROOT / "services" / "neko" / "chromium.conf").read_text(encoding="utf-8") self.assertIn("command=/usr/bin/chromium", conf) self.assertNotIn("browser-launch.sh", conf) self.assertIn("--user-data-dir=/home/neko/.config/chromium", conf) self.assertNotIn("--bwsi", conf) self.assertIn("--disable-software-rasterizer", conf) self.assertIn("autorestart=true", conf) self.assertIn("[program:openbox]", conf) def test_neko_compose_mounts_only_selected_supervisor_conf(self) -> None: compose = (ROOT / "services" / "neko" / "docker-compose.yml").read_text(encoding="utf-8") self.assertIn("./${NEKO_BROWSER_SUPERVISOR_CONF}:/etc/neko/supervisord/browser.conf:ro", compose) self.assertIn("container_name: live-neko-1", compose) self.assertIn("container_name: live-neko-2", compose) self.assertIn("container_name: live-neko-3", compose) self.assertIn("${NEKO_HTTP_PORT_1}:8080", compose) self.assertIn("${NEKO_HTTP_PORT_2}:8080", compose) self.assertIn("${NEKO_HTTP_PORT_3}:8080", compose) self.assertNotIn("./chromium.conf:/etc/neko/supervisord/chromium.conf:ro", compose) self.assertNotIn("./google-chrome.conf:/etc/neko/supervisord/google-chrome.conf:ro", compose) self.assertNotIn("./browser-launch.sh:/etc/neko/browser-launch.sh:ro", compose) def test_neko_scripts_use_family_specific_profile_dirs(self) -> None: service_ctl = (ROOT / "scripts" / "linux" / "service_ctl.sh").read_text(encoding="utf-8") common = (ROOT / "scripts" / "linux" / "lib" / "common.sh").read_text(encoding="utf-8") self.assertIn("resolve_neko_profile_dir()", service_ctl) self.assertIn('${family}-profile-v2', service_ctl) self.assertIn("resolve_neko_profile_dir()", common) self.assertIn('${family}-profile-v2', common) self.assertIn("resolve_neko_profile_dir_for_instance()", service_ctl) self.assertIn("NEKO_HTTP_PORT_2", service_ctl) self.assertIn("NEKO_WEBRTC_UDP_RANGE_3", service_ctl) self.assertIn("resolve_neko_profile_dir_for_instance()", common) self.assertIn("NEKO_HTTP_PORT_2", common) self.assertIn("NEKO_WEBRTC_UDP_RANGE_3", common) def test_local_browser_prefers_chrome_on_x86_and_chromium_elsewhere(self) -> None: script = (ROOT / "scripts" / "linux" / "launch_browser.sh").read_text(encoding="utf-8") self.assertIn("x86_64|amd64", script) x86_branch = script.split("x86_64|amd64)", 1)[1].split(";;", 1)[0] other_branch = script.split("*)", 1)[1].split(";;", 1)[0] self.assertLess(x86_branch.find("google-chrome"), x86_branch.find("chromium")) self.assertLess(other_branch.find("chromium"), other_branch.find("google-chrome")) if __name__ == "__main__": unittest.main()