sss
This commit is contained in:
@@ -25,6 +25,7 @@ class NekoConfigTests(unittest.TestCase):
|
||||
self.assertIn("--start-maximized", script)
|
||||
self.assertIn("--disable-background-mode", script)
|
||||
self.assertNotIn("--disable-background-networking", script)
|
||||
self.assertNotIn("--disable-sync", script)
|
||||
self.assertNotIn("--disable-extensions", script)
|
||||
self.assertIn('ui["developer_mode"] = True', script)
|
||||
self.assertIn('"Local State"', script)
|
||||
@@ -78,6 +79,17 @@ class NekoConfigTests(unittest.TestCase):
|
||||
self.assertIn("./${NEKO_BROWSER_SUPERVISOR_CONF}:/etc/neko/supervisord/${NEKO_BROWSER_SUPERVISOR_CONF}:ro", compose)
|
||||
self.assertIn("./browser-launch.sh:/etc/neko/browser-launch.sh:ro", compose)
|
||||
self.assertIn("./provisioning:/var/www/provisioning:ro", compose)
|
||||
self.assertIn('NEKO_MANAGED_POLICIES: "${NEKO_MANAGED_POLICIES:-0}"', compose)
|
||||
self.assertIn("./no-managed-policies:/etc/chromium/policies/managed:ro", compose)
|
||||
self.assertIn("./no-managed-policies:/etc/chromium-browser/policies/managed:ro", compose)
|
||||
self.assertIn("./no-managed-policies:/etc/opt/chrome/policies/managed:ro", compose)
|
||||
self.assertIn("./external-extensions:/opt/google/chrome/extensions:ro", compose)
|
||||
self.assertIn("./external-extensions:/usr/share/chromium/extensions:ro", compose)
|
||||
self.assertIn("./external-extensions:/usr/share/chromium-browser/extensions:ro", compose)
|
||||
self.assertIn("./tampermonkey-seed:/etc/neko/tampermonkey-seed:ro", compose)
|
||||
self.assertIn("./youtube-auto-dismiss-extension:/etc/neko/youtube-auto-dismiss-extension:ro", compose)
|
||||
self.assertNotIn("./policies:/etc/chromium/policies/managed", compose)
|
||||
self.assertNotIn("./policies:/etc/opt/chrome/policies/managed", 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)
|
||||
@@ -113,6 +125,23 @@ class NekoConfigTests(unittest.TestCase):
|
||||
self.assertIn('"52303:52303/tcp"', rendered)
|
||||
self.assertIn('"52400-52499:52400-52499/udp"', rendered)
|
||||
self.assertIn(f'"{tmp}/profile-4:/home/neko/.config/google-chrome"', rendered)
|
||||
self.assertIn('NEKO_MANAGED_POLICIES: "0"', rendered)
|
||||
self.assertIn('"./no-managed-policies:/etc/chromium/policies/managed:ro"', rendered)
|
||||
self.assertIn('"./no-managed-policies:/etc/chromium-browser/policies/managed:ro"', rendered)
|
||||
self.assertIn('"./no-managed-policies:/etc/opt/chrome/policies/managed:ro"', rendered)
|
||||
self.assertIn('"./external-extensions:/opt/google/chrome/extensions:ro"', rendered)
|
||||
self.assertIn('"./external-extensions:/usr/share/chromium/extensions:ro"', rendered)
|
||||
self.assertIn('"./external-extensions:/usr/share/chromium-browser/extensions:ro"', rendered)
|
||||
self.assertIn('"./tampermonkey-seed:/etc/neko/tampermonkey-seed:ro"', rendered)
|
||||
self.assertIn('"./youtube-auto-dismiss-extension:/etc/neko/youtube-auto-dismiss-extension:ro"', rendered)
|
||||
self.assertNotIn('"./policies:/etc/chromium/policies/managed:ro"', rendered)
|
||||
self.assertNotIn('"./policies:/etc/opt/chrome/policies/managed:ro"', rendered)
|
||||
|
||||
with patch.dict(os.environ, {"NEKO_MANAGED_POLICIES": "1"}, clear=False):
|
||||
managed_rendered = module.render(2)
|
||||
self.assertIn('"./policies:/etc/chromium/policies/managed:ro"', managed_rendered)
|
||||
self.assertIn('"./policies:/etc/chromium-browser/policies/managed:ro"', managed_rendered)
|
||||
self.assertIn('"./policies:/etc/opt/chrome/policies/managed:ro"', managed_rendered)
|
||||
|
||||
def test_neko_runtime_scripts_use_generated_compose(self) -> None:
|
||||
service_ctl = (ROOT / "scripts" / "linux" / "service_ctl.sh").read_text(encoding="utf-8")
|
||||
@@ -123,6 +152,53 @@ class NekoConfigTests(unittest.TestCase):
|
||||
self.assertIn("docker-compose.generated.yml", script)
|
||||
self.assertIn("compose_file=\"$(render_neko_compose_file)\"", script)
|
||||
self.assertIn("NEKO_MAX_INSTANCE_COUNT:-64", script)
|
||||
self.assertIn("NEKO_MANAGED_POLICIES", script)
|
||||
self.assertIn("find_neko_tampermonkey_seed_profile()", script)
|
||||
self.assertIn("services/neko/tampermonkey-seed", script)
|
||||
self.assertIn("sync_neko_tampermonkey_preferences()", script)
|
||||
self.assertIn("neko_managed_policies_enabled()", script)
|
||||
|
||||
def test_tampermonkey_external_extension_seed_is_available_without_managed_policy(self) -> None:
|
||||
external = json.loads(
|
||||
(ROOT / "services" / "neko" / "external-extensions" / "dhdgffkkebhmkfjojejmpbldmpobfkfo.json").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
)
|
||||
self.assertEqual(external["external_update_url"], "https://clients2.google.com/service/update2/crx")
|
||||
seed = ROOT / "services" / "neko" / "tampermonkey-seed" / "Default" / "Local Extension Settings" / "dhdgffkkebhmkfjojejmpbldmpobfkfo"
|
||||
self.assertTrue(seed.is_dir())
|
||||
seed_text = "\n".join(path.read_text(encoding="utf-8", errors="ignore") for path in seed.glob("*") if path.is_file())
|
||||
self.assertIn("YouTube Studio Auto Dismiss", seed_text)
|
||||
seed_extension = (
|
||||
ROOT
|
||||
/ "services"
|
||||
/ "neko"
|
||||
/ "tampermonkey-seed"
|
||||
/ "Default"
|
||||
/ "Extensions"
|
||||
/ "dhdgffkkebhmkfjojejmpbldmpobfkfo"
|
||||
/ "5.5.0_0"
|
||||
/ "manifest.json"
|
||||
)
|
||||
self.assertTrue(seed_extension.is_file())
|
||||
seed_preferences = json.loads(
|
||||
(ROOT / "services" / "neko" / "tampermonkey-seed" / "Default" / "Preferences").read_text(encoding="utf-8")
|
||||
)
|
||||
self.assertEqual(seed_preferences["extensions"]["settings"]["dhdgffkkebhmkfjojejmpbldmpobfkfo"]["state"], 1)
|
||||
launch = (ROOT / "services" / "neko" / "browser-launch.sh").read_text(encoding="utf-8")
|
||||
self.assertIn("ensure_tampermonkey_seed", launch)
|
||||
self.assertIn("sync_tampermonkey_preferences", launch)
|
||||
self.assertIn("find_tampermonkey_extension_dir", launch)
|
||||
self.assertIn("find_youtube_auto_dismiss_extension_dir", launch)
|
||||
self.assertIn("--load-extension=$load_extension_dirs", launch)
|
||||
self.assertIn("/etc/neko/tampermonkey-seed", launch)
|
||||
self.assertIn("rm -rf \"$profile_dir/Default/Managed Extension Settings/$ext_id\"", launch)
|
||||
dismiss_manifest = ROOT / "services" / "neko" / "youtube-auto-dismiss-extension" / "manifest.json"
|
||||
self.assertTrue(dismiss_manifest.is_file())
|
||||
dismiss_script = (ROOT / "services" / "neko" / "youtube-auto-dismiss-extension" / "youtube-studio-auto-dismiss.js").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
self.assertIn('text === "Dismiss"', dismiss_script)
|
||||
|
||||
def test_supervisor_uses_browser_launch_script(self) -> None:
|
||||
chrome = (ROOT / "services" / "neko" / "google-chrome.conf").read_text(encoding="utf-8")
|
||||
|
||||
@@ -89,6 +89,8 @@ class VerifyLocalInstallTests(unittest.TestCase):
|
||||
def fake_docker_exec(container: str, command: str, *, timeout: float = 8.0):
|
||||
if "supervisorctl status google-chrome" in command:
|
||||
return 0, "google-chrome RUNNING pid 8", ""
|
||||
if "policies/managed" in command and "-name '*.json'" in command:
|
||||
return 0, "", ""
|
||||
if "supervisorctl status tampermonkey-provisioning" in command:
|
||||
return 0, "tampermonkey-provisioning RUNNING pid 9", ""
|
||||
if "tampermonkey-provisioning.json" in command:
|
||||
@@ -126,6 +128,7 @@ class VerifyLocalInstallTests(unittest.TestCase):
|
||||
"neko_ip_watch_service",
|
||||
"youtube_pro_neko_capacity",
|
||||
"neko_1_browser",
|
||||
"neko_1_personal_policy_mode",
|
||||
"neko_1_tm_payload",
|
||||
"neko_1_tm_storage",
|
||||
"android_devices",
|
||||
@@ -134,6 +137,66 @@ class VerifyLocalInstallTests(unittest.TestCase):
|
||||
):
|
||||
self.assertIn(check_id, ids)
|
||||
|
||||
def test_neko_personal_policy_mode_rejects_managed_policy_json(self) -> None:
|
||||
checks: list[dict[str, object]] = []
|
||||
|
||||
def fake_docker_exec(container: str, command: str, *, timeout: float = 8.0):
|
||||
if "supervisorctl status google-chrome" in command:
|
||||
return 0, "google-chrome RUNNING pid 8", ""
|
||||
if "policies/managed" in command and "-name '*.json'" in command:
|
||||
return 0, "/etc/opt/chrome/policies/managed/policies.json\n", ""
|
||||
if "supervisorctl status tampermonkey-provisioning" in command:
|
||||
return 0, "tampermonkey-provisioning RUNNING pid 9", ""
|
||||
if "tampermonkey-provisioning.json" in command:
|
||||
return 0, "", ""
|
||||
if "grep -R -a -l" in command:
|
||||
return 1, "", ""
|
||||
self.fail(f"unexpected docker exec: {container} {command}")
|
||||
|
||||
with patch.object(verify_local_install, "docker_ps_names", return_value=(True, ["live-neko-1", "live-neko-2"], "")):
|
||||
with patch.object(verify_local_install, "systemd_active", return_value=(True, "active")):
|
||||
with patch.object(verify_local_install, "docker_exec", side_effect=fake_docker_exec):
|
||||
verify_local_install.verify_neko(
|
||||
checks,
|
||||
{"ENABLE_NEKO": "1", "NEKO_INSTANCE_COUNT": "2", "NEKO_MANAGED_POLICIES": "0"},
|
||||
timeout=5.0,
|
||||
)
|
||||
|
||||
report = verify_local_install.summarize(checks)
|
||||
self.assertFalse(report["ready"])
|
||||
self.assertEqual(report["failing_checks"][0]["id"], "neko_1_personal_policy_mode")
|
||||
tm_storage = next(item for item in checks if item["id"] == "neko_1_tm_storage")
|
||||
self.assertTrue(tm_storage["required"])
|
||||
|
||||
def test_neko_managed_policy_mode_allows_policy_json_and_requires_tm_storage(self) -> None:
|
||||
checks: list[dict[str, object]] = []
|
||||
|
||||
def fake_docker_exec(container: str, command: str, *, timeout: float = 8.0):
|
||||
if "supervisorctl status google-chrome" in command:
|
||||
return 0, "google-chrome RUNNING pid 8", ""
|
||||
if "policies/managed" in command and "-name '*.json'" in command:
|
||||
return 0, "/etc/opt/chrome/policies/managed/policies.json\n", ""
|
||||
if "supervisorctl status tampermonkey-provisioning" in command:
|
||||
return 0, "tampermonkey-provisioning RUNNING pid 9", ""
|
||||
if "tampermonkey-provisioning.json" in command:
|
||||
return 0, "", ""
|
||||
if "grep -R -a -l" in command:
|
||||
return 1, "", ""
|
||||
self.fail(f"unexpected docker exec: {container} {command}")
|
||||
|
||||
with patch.object(verify_local_install, "docker_ps_names", return_value=(True, ["live-neko-1", "live-neko-2"], "")):
|
||||
with patch.object(verify_local_install, "systemd_active", return_value=(True, "active")):
|
||||
with patch.object(verify_local_install, "docker_exec", side_effect=fake_docker_exec):
|
||||
verify_local_install.verify_neko(
|
||||
checks,
|
||||
{"ENABLE_NEKO": "1", "NEKO_INSTANCE_COUNT": "2", "NEKO_MANAGED_POLICIES": "1"},
|
||||
timeout=5.0,
|
||||
)
|
||||
|
||||
report = verify_local_install.summarize(checks)
|
||||
self.assertFalse(report["ready"])
|
||||
self.assertEqual(report["failing_checks"][0]["id"], "neko_1_tm_storage")
|
||||
|
||||
def test_android_endpoint_without_devices_is_not_a_required_install_failure(self) -> None:
|
||||
checks: list[dict[str, object]] = []
|
||||
with patch.object(
|
||||
|
||||
Reference in New Issue
Block a user