mirror of
https://github.com/coder/coder.git
synced 2026-06-04 13:38:21 +00:00
1354d84eb4
Refactors Agent instance identity to be a SessionTokenProvider. Refactors the CLI to create Agent clients via a centralized function, rather than add-hoc via individual command handlers and their flags. This allows commands besides `coder agent`, but which still use the agent identity, to support instance identity authentication. Fixes #19111 by unifying all API requests to go thru the SessionTokenProvider for auth credentials.
49 lines
1.2 KiB
Go
49 lines
1.2 KiB
Go
package agenttest
|
|
|
|
import (
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/coder/coder/v2/agent"
|
|
"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
|
|
|
|
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
|
|
}
|