from investibook.core import sandbox class DummyProvider(sandbox.SandboxProvider): name = "dummy" workspace_root = "/dummy" preview_max_bytes = 1024 def agent_command(self, **kwargs): return ["dummy-agent"] async def spawn_agent_process(self, spec): raise NotImplementedError async def open_workspace_storage(self, **kwargs): raise NotImplementedError def test_none_environment_disables_sandbox(monkeypatch): monkeypatch.setattr(sandbox.cfg, "AGENT_SANDBOX_PROVIDERS", ()) monkeypatch.setattr( sandbox.cfg, "SANDBOX_WORKSPACE_ALLOWLIST", frozenset({"ws-1"}), ) assert sandbox.sandbox_provider_for_workspace("ws-1", user_id="user-1") is None def test_allowlisted_workspace_forces_configured_provider(monkeypatch): monkeypatch.setattr(sandbox.cfg, "AGENT_SANDBOX_PROVIDERS", ("run9",)) monkeypatch.setattr( sandbox.cfg, "SANDBOX_WORKSPACE_ALLOWLIST", frozenset({"ws-1"}), ) provider = sandbox.sandbox_provider_for_workspace("ws-1") assert provider is not None assert provider.name == "run9" def test_user_preference_selects_registered_provider(monkeypatch): monkeypatch.setattr(sandbox.cfg, "AGENT_SANDBOX_PROVIDERS", ("run9",)) monkeypatch.setattr(sandbox.cfg, "SANDBOX_WORKSPACE_ALLOWLIST", frozenset()) monkeypatch.setattr( sandbox, "_db_get_user_by_id", lambda user_id: {"id": user_id, "sandbox_provider": "run9"}, ) provider = sandbox.sandbox_provider_for_workspace( "ws-1", user_id="user-1", ) assert provider is not None assert provider.name == "run9" def test_workspace_owner_preference_is_used_when_user_is_omitted(monkeypatch): monkeypatch.setattr(sandbox.cfg, "AGENT_SANDBOX_PROVIDERS", ("run9",)) monkeypatch.setattr(sandbox.cfg, "SANDBOX_WORKSPACE_ALLOWLIST", frozenset()) monkeypatch.setattr( sandbox, "_db_get_workspace", lambda workspace_id: {"id": workspace_id, "user_id": "owner-1"}, ) monkeypatch.setattr( sandbox, "_db_get_user_by_id", lambda user_id: {"id": user_id, "sandbox_provider": "run9"}, ) provider = sandbox.sandbox_provider_for_workspace("ws-1") assert provider is not None assert provider.name == "run9" def test_unknown_configured_provider_fails_closed(monkeypatch): monkeypatch.setattr(sandbox.cfg, "AGENT_SANDBOX_PROVIDERS", ("unknown",)) try: sandbox.configured_sandbox_providers() except RuntimeError as exc: assert "Unknown sandbox provider" in str(exc) else: raise AssertionError("unknown provider must fail closed") def test_registered_provider_can_be_selected_without_runtime_changes(monkeypatch): monkeypatch.setattr(sandbox, "_providers", {}) monkeypatch.setattr(sandbox, "_builtins_loaded", True) monkeypatch.setattr(sandbox.cfg, "AGENT_SANDBOX_PROVIDERS", ("dummy",)) monkeypatch.setattr( sandbox.cfg, "SANDBOX_WORKSPACE_ALLOWLIST", frozenset({"ws-1"}), ) provider = DummyProvider() sandbox.register_sandbox_provider(provider) assert sandbox.sandbox_provider_for_workspace("ws-1") is provider