dify/dify-agent/tests/local/dify_agent/adapters/shell/test_config.py
Yunlu Wen 888bea9911
feat: ee agent sandbox support (#38528)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-10 03:56:55 +00:00

79 lines
3.4 KiB
Python

"""Tests for ShellAdapterSettings provider-based field validation."""
from __future__ import annotations
import pytest
from pydantic import ValidationError
from dify_agent.adapters.shell.config import ShellAdapterSettings
class TestShellctlValidation:
def test_valid_url_passes(self) -> None:
settings = ShellAdapterSettings(
shell_provider="shellctl",
shellctl_entrypoint="http://shellctl.example.com",
)
assert settings.shellctl_entrypoint == "http://shellctl.example.com"
def test_https_url_passes(self) -> None:
settings = ShellAdapterSettings(
shell_provider="shellctl",
shellctl_entrypoint="https://shellctl.internal:8443/v1",
)
assert settings.shellctl_entrypoint == "https://shellctl.internal:8443/v1"
def test_missing_entrypoint_raises(self) -> None:
with pytest.raises(ValidationError, match="shellctl_entrypoint is required"):
ShellAdapterSettings(shell_provider="shellctl", shellctl_entrypoint=None)
def test_blank_entrypoint_raises(self) -> None:
with pytest.raises(ValidationError, match="shellctl_entrypoint is required"):
ShellAdapterSettings(shell_provider="shellctl", shellctl_entrypoint=" ")
def test_invalid_url_raises(self) -> None:
with pytest.raises(ValidationError, match="must be a valid http\\(s\\) URL"):
ShellAdapterSettings(shell_provider="shellctl", shellctl_entrypoint="not-a-url")
def test_ftp_scheme_rejected(self) -> None:
with pytest.raises(ValidationError, match="must be a valid http\\(s\\) URL"):
ShellAdapterSettings(shell_provider="shellctl", shellctl_entrypoint="ftp://host/path")
class TestEnterpriseValidation:
def test_valid_url_passes(self) -> None:
settings = ShellAdapterSettings(
shell_provider="enterprise",
enterprise_sandbox_gateway_endpoint="http://gateway.internal:9000",
)
assert settings.enterprise_sandbox_gateway_endpoint == "http://gateway.internal:9000"
def test_https_url_passes(self) -> None:
settings = ShellAdapterSettings(
shell_provider="enterprise",
enterprise_sandbox_gateway_endpoint="https://gateway.prod.example.com/api",
)
assert settings.enterprise_sandbox_gateway_endpoint == "https://gateway.prod.example.com/api"
def test_missing_endpoint_raises(self) -> None:
with pytest.raises(ValidationError, match="enterprise_sandbox_gateway_endpoint is required"):
ShellAdapterSettings(shell_provider="enterprise", enterprise_sandbox_gateway_endpoint=None)
def test_blank_endpoint_raises(self) -> None:
with pytest.raises(ValidationError, match="enterprise_sandbox_gateway_endpoint is required"):
ShellAdapterSettings(shell_provider="enterprise", enterprise_sandbox_gateway_endpoint="")
def test_invalid_url_raises(self) -> None:
with pytest.raises(ValidationError, match="must be a valid http\\(s\\) URL"):
ShellAdapterSettings(
shell_provider="enterprise",
enterprise_sandbox_gateway_endpoint="just-a-hostname",
)
def test_ftp_scheme_rejected(self) -> None:
with pytest.raises(ValidationError, match="must be a valid http\\(s\\) URL"):
ShellAdapterSettings(
shell_provider="enterprise",
enterprise_sandbox_gateway_endpoint="ftp://gateway/path",
)