237 lines
7.5 KiB
Python
237 lines
7.5 KiB
Python
from e2b import ConnectionConfig
|
|
|
|
|
|
def test_api_url_defaults_correctly(monkeypatch):
|
|
monkeypatch.setenv("E2B_DOMAIN", "")
|
|
monkeypatch.delenv("E2B_API_URL", raising=False)
|
|
|
|
config = ConnectionConfig()
|
|
assert config.api_url == "https://api.e2b.app"
|
|
|
|
|
|
def test_api_url_in_args():
|
|
config = ConnectionConfig(api_url="http://localhost:8080")
|
|
assert config.api_url == "http://localhost:8080"
|
|
|
|
|
|
def test_api_url_in_env_var(monkeypatch):
|
|
monkeypatch.setenv("E2B_API_URL", "http://localhost:8080")
|
|
|
|
config = ConnectionConfig()
|
|
assert config.api_url == "http://localhost:8080"
|
|
|
|
|
|
def test_api_url_has_correct_priority(monkeypatch):
|
|
monkeypatch.setenv("E2B_API_URL", "http://localhost:1111")
|
|
|
|
config = ConnectionConfig(api_url="http://localhost:8080")
|
|
assert config.api_url == "http://localhost:8080"
|
|
|
|
|
|
def test_validate_api_key_defaults_to_true(monkeypatch):
|
|
monkeypatch.delenv("E2B_VALIDATE_API_KEY", raising=False)
|
|
|
|
config = ConnectionConfig()
|
|
assert config.validate_api_key is True
|
|
|
|
|
|
def test_validate_api_key_disabled_via_env_var(monkeypatch):
|
|
monkeypatch.setenv("E2B_VALIDATE_API_KEY", "false")
|
|
|
|
config = ConnectionConfig()
|
|
assert config.validate_api_key is False
|
|
|
|
|
|
def test_validate_api_key_arg_has_priority_over_env_var(monkeypatch):
|
|
monkeypatch.setenv("E2B_VALIDATE_API_KEY", "true")
|
|
|
|
config = ConnectionConfig(validate_api_key=False)
|
|
assert config.validate_api_key is False
|
|
|
|
|
|
def test_sandbox_url_uses_stable_host_for_supported_domain():
|
|
config = ConnectionConfig(domain="e2b.app")
|
|
|
|
assert config.get_sandbox_url("sandbox-id", "e2b.app") == "https://sandbox.e2b.app"
|
|
|
|
|
|
def test_sandbox_url_uses_stable_host_for_supported_non_prod_domain():
|
|
config = ConnectionConfig(domain="e2b.dev")
|
|
|
|
assert config.get_sandbox_url("sandbox-id", "e2b.dev") == "https://sandbox.e2b.dev"
|
|
|
|
|
|
def test_sandbox_url_uses_explicit_url_first():
|
|
config = ConnectionConfig(sandbox_url="https://sandbox.example.com")
|
|
|
|
assert (
|
|
config.get_sandbox_url("sandbox-id", "e2b.app") == "https://sandbox.example.com"
|
|
)
|
|
|
|
|
|
def test_sandbox_url_falls_back_to_per_sandbox_host_for_custom_domain():
|
|
config = ConnectionConfig(domain="custom.example")
|
|
|
|
assert (
|
|
config.get_sandbox_url("sandbox-id", "custom.example")
|
|
== "https://49983-sandbox-id.custom.example"
|
|
)
|
|
|
|
|
|
def test_sandbox_url_falls_back_to_per_sandbox_host_for_unsupported_subdomain():
|
|
config = ConnectionConfig(domain="e2b.dev")
|
|
|
|
assert (
|
|
config.get_sandbox_url("sandbox-id", "sandbox.e2b.dev")
|
|
== "https://49983-sandbox-id.sandbox.e2b.dev"
|
|
)
|
|
|
|
|
|
def test_sandbox_url_debug_uses_localhost():
|
|
config = ConnectionConfig(debug=True)
|
|
|
|
assert config.get_sandbox_url("sandbox-id", "e2b.app") == "http://localhost:49983"
|
|
|
|
|
|
def test_get_host_keeps_per_sandbox_host_for_supported_domain():
|
|
config = ConnectionConfig(domain="e2b.app")
|
|
|
|
assert config.get_host("sandbox-id", "e2b.app", 8888) == "8888-sandbox-id.e2b.app"
|
|
|
|
|
|
def test_sandbox_direct_url_keeps_per_sandbox_host_for_supported_domain():
|
|
config = ConnectionConfig(domain="e2b.app")
|
|
|
|
assert (
|
|
config.get_sandbox_direct_url("sandbox-id", "e2b.app")
|
|
== "https://49983-sandbox-id.e2b.app"
|
|
)
|
|
|
|
|
|
def test_sandbox_direct_url_uses_explicit_url_first():
|
|
config = ConnectionConfig(sandbox_url="https://sandbox.example.com")
|
|
|
|
assert (
|
|
config.get_sandbox_direct_url("sandbox-id", "e2b.app")
|
|
== "https://sandbox.example.com"
|
|
)
|
|
|
|
|
|
def test_debug_false_overrides_env_var(monkeypatch):
|
|
monkeypatch.setenv("E2B_DEBUG", "true")
|
|
|
|
config = ConnectionConfig(debug=False)
|
|
assert config.debug is False
|
|
|
|
|
|
def test_debug_defaults_to_env_var(monkeypatch):
|
|
monkeypatch.setenv("E2B_DEBUG", "true")
|
|
|
|
config = ConnectionConfig()
|
|
assert config.debug is True
|
|
|
|
|
|
def test_set_integration_appends_to_user_agent():
|
|
ConnectionConfig.set_integration("testing/version")
|
|
try:
|
|
config = ConnectionConfig()
|
|
|
|
assert config.headers["User-Agent"].startswith("e2b-python-sdk/")
|
|
assert config.headers["User-Agent"].endswith(" testing/version")
|
|
finally:
|
|
ConnectionConfig.set_integration(None)
|
|
|
|
config = ConnectionConfig()
|
|
assert "testing" not in config.headers["User-Agent"]
|
|
|
|
|
|
def test_custom_user_agent_is_preserved_without_integration():
|
|
config = ConnectionConfig(api_headers={"User-Agent": "custom/1.0"})
|
|
|
|
assert config.headers["User-Agent"] == "custom/1.0"
|
|
|
|
|
|
def test_custom_user_agent_wins_over_integration(monkeypatch):
|
|
monkeypatch.setattr(ConnectionConfig, "_integration", "testing/version")
|
|
|
|
config = ConnectionConfig(api_headers={"User-Agent": "custom/1.0"})
|
|
|
|
assert config.headers["User-Agent"] == "custom/1.0"
|
|
|
|
|
|
def test_integration_survives_api_param_rebuilds(monkeypatch):
|
|
monkeypatch.setattr(ConnectionConfig, "_integration", "testing/version")
|
|
|
|
config = ConnectionConfig()
|
|
rebuilt_config = ConnectionConfig(**config.get_api_params())
|
|
|
|
assert rebuilt_config.headers["User-Agent"].endswith(" testing/version")
|
|
assert rebuilt_config.get_api_params(api_headers={"X-Test": "1"})["headers"][
|
|
"User-Agent"
|
|
].endswith(" testing/version")
|
|
|
|
|
|
def test_cleared_integration_does_not_leak_into_api_param_rebuilds():
|
|
ConnectionConfig.set_integration("testing/version")
|
|
try:
|
|
config = ConnectionConfig()
|
|
finally:
|
|
ConnectionConfig.set_integration(None)
|
|
|
|
params = config.get_api_params()
|
|
assert not params["headers"]["User-Agent"].endswith(" testing/version")
|
|
|
|
rebuilt_config = ConnectionConfig(**params)
|
|
assert not rebuilt_config.headers["User-Agent"].endswith(" testing/version")
|
|
|
|
|
|
def test_custom_user_agent_survives_api_param_rebuilds(monkeypatch):
|
|
monkeypatch.setattr(ConnectionConfig, "_integration", "testing/version")
|
|
|
|
config = ConnectionConfig(api_headers={"User-Agent": "custom/1.0"})
|
|
rebuilt_config = ConnectionConfig(**config.get_api_params())
|
|
|
|
assert rebuilt_config.headers["User-Agent"] == "custom/1.0"
|
|
|
|
monkeypatch.setattr(ConnectionConfig, "_integration", None)
|
|
|
|
config = ConnectionConfig(api_headers={"User-Agent": "custom/1.0"})
|
|
rebuilt_config = ConnectionConfig(**config.get_api_params())
|
|
assert rebuilt_config.headers["User-Agent"] == "custom/1.0"
|
|
|
|
|
|
def test_per_call_user_agent_override_wins_in_api_params(monkeypatch):
|
|
monkeypatch.setattr(ConnectionConfig, "_integration", "testing/version")
|
|
|
|
config = ConnectionConfig()
|
|
params = config.get_api_params(api_headers={"User-Agent": "custom/1.0"})
|
|
assert params["headers"]["User-Agent"] == "custom/1.0"
|
|
|
|
|
|
def test_per_call_api_headers_user_agent_wins_over_headers():
|
|
config = ConnectionConfig()
|
|
params = config.get_api_params(
|
|
headers={"User-Agent": "from-headers/1.0"},
|
|
api_headers={"User-Agent": "from-api-headers/1.0"},
|
|
)
|
|
assert params["headers"]["User-Agent"] == "from-api-headers/1.0"
|
|
|
|
|
|
def test_request_timeout_zero_means_no_timeout():
|
|
config = ConnectionConfig(request_timeout=0)
|
|
assert config.request_timeout is None
|
|
assert config.get_request_timeout() is None
|
|
# A per-call value of 0 also disables the timeout.
|
|
assert config.get_request_timeout(0) is None
|
|
|
|
|
|
def test_get_api_params_includes_sandbox_url():
|
|
config = ConnectionConfig(sandbox_url="https://sandbox.example.com")
|
|
|
|
params = config.get_api_params()
|
|
assert params["sandbox_url"] == "https://sandbox.example.com"
|
|
|
|
# Per-call override takes priority.
|
|
overridden = config.get_api_params(sandbox_url="https://sandbox.override.com")
|
|
assert overridden["sandbox_url"] == "https://sandbox.override.com"
|