Files
agentic-coding-workflow/internal/acp/sandbox/sandbox_test.go
T
2026-06-22 08:55:57 +08:00

60 lines
1.8 KiB
Go

package sandbox
import (
"os/exec"
"runtime"
"testing"
"github.com/stretchr/testify/require"
)
func TestNew_NoneAlwaysNoop(t *testing.T) {
sb := New(ModeNone)
require.IsType(t, noopSandbox{}, sb)
}
func TestNew_UnsupportedPlatformFallsBackToNoop(t *testing.T) {
if runtime.GOOS == "linux" {
t.Skip("uid/container are supported on linux; this asserts the non-linux fallback")
}
// On non-linux, uid/container must fall back to no-op so dev/CI never break.
require.IsType(t, noopSandbox{}, New(ModeUID))
require.IsType(t, noopSandbox{}, New(ModeContainer))
}
func TestNoopSandbox_MutatesNothing(t *testing.T) {
cmd := exec.Command("echo", "hi")
before := cmd.SysProcAttr
cleanup, err := noopSandbox{}.Apply(cmd, Spec{Mode: ModeNone, ProxyURL: "http://proxy:8080"})
require.NoError(t, err)
require.NotNil(t, cleanup)
// no-op must NOT inject proxy env nor touch SysProcAttr.
require.Equal(t, before, cmd.SysProcAttr)
require.Empty(t, cmd.Env)
// cleanup is safe to call.
cleanup()
}
func TestInjectProxyEnv(t *testing.T) {
cmd := exec.Command("echo", "hi")
cmd.Env = []string{"PATH=/usr/bin"}
injectProxyEnv(cmd, Spec{ProxyURL: "http://proxy:3128"})
require.Contains(t, cmd.Env, "HTTP_PROXY=http://proxy:3128")
require.Contains(t, cmd.Env, "HTTPS_PROXY=http://proxy:3128")
require.Contains(t, cmd.Env, "NO_PROXY=localhost,127.0.0.1,::1")
// original env preserved.
require.Contains(t, cmd.Env, "PATH=/usr/bin")
}
func TestInjectProxyEnv_NoProxyURLIsNoop(t *testing.T) {
cmd := exec.Command("echo", "hi")
injectProxyEnv(cmd, Spec{})
require.Empty(t, cmd.Env)
}
func TestInjectProxyEnv_CustomNoProxy(t *testing.T) {
cmd := exec.Command("echo", "hi")
injectProxyEnv(cmd, Spec{ProxyURL: "http://p", NoProxy: "internal.local"})
require.Contains(t, cmd.Env, "NO_PROXY=internal.local")
}