mirror of
https://github.com/coder/coder.git
synced 2026-06-03 04:58:23 +00:00
3c450899ea
The CODER_AGENT_EXP_* env vars are agent-internal options. When set in the workspace environment they leak to MCP subprocesses and user shells. ReadEnvConfig() captures the values and ClearEnvVars() strips them before the reinit loop, so config survives agent restarts. NewAPI and ReadEnvConfig both use applyDefaults() to fill zero fields. The chatd test passes config via agenttest.WithContextConfigFromEnv().
59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
package agenttest
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/coder/coder/v2/agent"
|
|
"github.com/coder/coder/v2/agent/agentcontextconfig"
|
|
"github.com/coder/coder/v2/codersdk/agentsdk"
|
|
"github.com/coder/coder/v2/testutil"
|
|
)
|
|
|
|
// New starts a new agent for use in tests.
|
|
// The agent will use the provided coder URL and session token.
|
|
// The options passed to agent.New() can be modified by passing an optional
|
|
// variadic func(*agent.Options).
|
|
// Returns the agent. Closing the agent is handled by the test cleanup.
|
|
// It is the responsibility of the caller to call coderdtest.AwaitWorkspaceAgents
|
|
// to ensure agent is connected.
|
|
func New(t testing.TB, coderURL *url.URL, agentToken string, opts ...func(*agent.Options)) agent.Agent {
|
|
t.Helper()
|
|
|
|
var o agent.Options
|
|
log := testutil.Logger(t).Named("agent")
|
|
o.Logger = log
|
|
o.SocketPath = testutil.AgentSocketPath(t)
|
|
|
|
for _, opt := range opts {
|
|
opt(&o)
|
|
}
|
|
|
|
if o.Client == nil {
|
|
agentClient := agentsdk.New(coderURL, agentsdk.WithFixedToken(agentToken))
|
|
agentClient.SDK.SetLogger(log)
|
|
o.Client = agentClient
|
|
}
|
|
|
|
if o.LogDir == "" {
|
|
o.LogDir = t.TempDir()
|
|
}
|
|
|
|
agt := agent.New(o)
|
|
t.Cleanup(func() {
|
|
assert.NoError(t, agt.Close(), "failed to close agent during cleanup")
|
|
})
|
|
|
|
return agt
|
|
}
|
|
|
|
// WithContextConfigFromEnv returns an agent option that
|
|
// populates ContextConfig from the current environment.
|
|
func WithContextConfigFromEnv() func(*agent.Options) {
|
|
return func(o *agent.Options) {
|
|
o.ContextConfig = agentcontextconfig.ReadEnvConfig()
|
|
}
|
|
}
|