mirror of
https://github.com/daijro/camoufox.git
synced 2026-09-07 08:00:35 +00:00
fix(python): isolate per-launch environments
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
"""Regression tests for per-launch environment isolation."""
|
||||
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
from camoufox import utils
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def isolated_launch_dependencies(monkeypatch):
|
||||
"""Keep launch_options focused on environment assembly, without a browser."""
|
||||
monkeypatch.setattr(utils, "add_default_addons", lambda *args, **kwargs: None)
|
||||
monkeypatch.setattr(utils, "generate_fingerprint", lambda *args, **kwargs: object())
|
||||
monkeypatch.setattr(utils, "from_browserforge", lambda *args, **kwargs: {})
|
||||
monkeypatch.setattr(utils, "get_screen_cons", lambda *args, **kwargs: None)
|
||||
monkeypatch.setattr(utils, "_generate_random_font_subset", lambda *args: [])
|
||||
monkeypatch.setattr(utils, "_generate_random_voice_subset", lambda *args: [])
|
||||
monkeypatch.setattr(utils, "fix_navigator_arch", lambda *args: None)
|
||||
monkeypatch.setattr(utils, "fix_screen_no_taskbar", lambda *args: None)
|
||||
monkeypatch.setattr(utils, "clamp_window_dimensions", lambda *args: None)
|
||||
monkeypatch.setattr(utils, "set_media_devices_defaults", lambda *args: None)
|
||||
monkeypatch.setattr(utils, "installed_verstr", lambda: "152.0.4-beta.28")
|
||||
monkeypatch.setattr(utils, "validate_config", lambda *args, **kwargs: None)
|
||||
monkeypatch.setattr(utils, "get_env_vars", lambda *args, **kwargs: {})
|
||||
monkeypatch.setattr(utils, "launch_path", lambda: "/test/camoufox")
|
||||
|
||||
|
||||
def _launch_with_virtual_display(**kwargs):
|
||||
return utils.launch_options(
|
||||
virtual_display=":4242",
|
||||
headless=True,
|
||||
block_webgl=True,
|
||||
i_know_what_im_doing=True,
|
||||
**kwargs,
|
||||
)
|
||||
|
||||
|
||||
def test_virtual_display_does_not_mutate_process_environment(
|
||||
monkeypatch, isolated_launch_dependencies
|
||||
):
|
||||
monkeypatch.delenv("DISPLAY", raising=False)
|
||||
monkeypatch.setenv("GDK_BACKEND", "wayland")
|
||||
monkeypatch.setenv("WAYLAND_DISPLAY", "wayland-0")
|
||||
monkeypatch.setenv("MOZ_ENABLE_WAYLAND", "1")
|
||||
keys = ("DISPLAY", "GDK_BACKEND", "WAYLAND_DISPLAY", "MOZ_ENABLE_WAYLAND")
|
||||
before = {key: os.environ.get(key) for key in keys}
|
||||
|
||||
options = _launch_with_virtual_display()
|
||||
|
||||
assert {key: os.environ.get(key) for key in keys} == before
|
||||
assert options["env"]["DISPLAY"] == ":4242"
|
||||
assert options["env"]["GDK_BACKEND"] == "x11"
|
||||
assert "WAYLAND_DISPLAY" not in options["env"]
|
||||
assert options["env"]["MOZ_ENABLE_WAYLAND"] == "0"
|
||||
|
||||
|
||||
def test_virtual_display_does_not_mutate_caller_environment(
|
||||
isolated_launch_dependencies,
|
||||
):
|
||||
caller_env = {
|
||||
"UNCHANGED": "value",
|
||||
"GDK_BACKEND": "wayland",
|
||||
"WAYLAND_DISPLAY": "wayland-0",
|
||||
"MOZ_ENABLE_WAYLAND": "1",
|
||||
}
|
||||
before = caller_env.copy()
|
||||
|
||||
options = _launch_with_virtual_display(env=caller_env)
|
||||
|
||||
assert caller_env == before
|
||||
assert options["env"]["UNCHANGED"] == "value"
|
||||
assert options["env"]["DISPLAY"] == ":4242"
|
||||
assert options["env"]["GDK_BACKEND"] == "x11"
|
||||
assert "WAYLAND_DISPLAY" not in options["env"]
|
||||
assert options["env"]["MOZ_ENABLE_WAYLAND"] == "0"
|
||||
Reference in New Issue
Block a user