Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1dbcf0f

Browse files
committed
use agentexec
1 parent b53552d commit 1dbcf0f

File tree

4 files changed

+24
-13
lines changed

4 files changed

+24
-13
lines changed

agent/agent.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func New(options Options) Agent {
124124
options.ScriptDataDir = options.TempDir
125125
}
126126
if options.ExchangeToken == nil {
127-
options.ExchangeToken = func(ctx context.Context) (string, error) {
127+
options.ExchangeToken = func(_ context.Context) (string, error) {
128128
return "", nil
129129
}
130130
}
@@ -147,7 +147,7 @@ func New(options Options) Agent {
147147
options.Execer = agentexec.DefaultExecer
148148
}
149149
if options.ContainerLister == nil {
150-
options.ContainerLister = &agentcontainers.DockerCLILister{}
150+
options.ContainerLister = agentcontainers.NewDocker(options.Execer)
151151
}
152152

153153
hardCtx, hardCancel := context.WithCancel(context.Background())

agent/agentcontainers/containers_dockercli.go

+13-5
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,35 @@ import (
66
"context"
77
"encoding/json"
88
"fmt"
9-
"os/exec"
109
"sort"
1110
"strconv"
1211
"strings"
1312
"time"
1413

14+
"github.com/coder/coder/v2/agent/agentexec"
1515
"github.com/coder/coder/v2/codersdk"
1616

1717
"golang.org/x/exp/maps"
1818
"golang.org/x/xerrors"
1919
)
2020

2121
// DockerCLILister is a ContainerLister that lists containers using the docker CLI
22-
type DockerCLILister struct{}
22+
type DockerCLILister struct {
23+
execer agentexec.Execer
24+
}
2325

2426
var _ Lister = &DockerCLILister{}
2527

26-
func (*DockerCLILister) List(ctx context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) {
28+
func NewDocker(execer agentexec.Execer) Lister {
29+
return &DockerCLILister{
30+
execer: agentexec.DefaultExecer,
31+
}
32+
}
33+
34+
func (dcl *DockerCLILister) List(ctx context.Context) (codersdk.WorkspaceAgentListContainersResponse, error) {
2735
var stdoutBuf, stderrBuf bytes.Buffer
2836
// List all container IDs, one per line, with no truncation
29-
cmd := exec.CommandContext(ctx, "docker", "ps", "--all", "--quiet", "--no-trunc")
37+
cmd := dcl.execer.CommandContext(ctx, "docker", "ps", "--all", "--quiet", "--no-trunc")
3038
cmd.Stdout = &stdoutBuf
3139
cmd.Stderr = &stderrBuf
3240
if err := cmd.Run(); err != nil {
@@ -56,7 +64,7 @@ func (*DockerCLILister) List(ctx context.Context) (codersdk.WorkspaceAgentListCo
5664
stderrBuf.Reset()
5765
// nolint: gosec // We are not executing user input, these IDs come from
5866
// `docker ps`.
59-
cmd = exec.CommandContext(ctx, "docker", append([]string{"inspect"}, ids...)...)
67+
cmd = dcl.execer.CommandContext(ctx, "docker", append([]string{"inspect"}, ids...)...)
6068
cmd.Stdout = &stdoutBuf
6169
cmd.Stderr = &stderrBuf
6270
if err := cmd.Run(); err != nil {

agent/agentcontainers/containers_internal_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"go.uber.org/mock/gomock"
1616

1717
"github.com/coder/coder/v2/agent/agentcontainers/acmock"
18+
"github.com/coder/coder/v2/agent/agentexec"
1819
"github.com/coder/coder/v2/codersdk"
1920
"github.com/coder/coder/v2/testutil"
2021
"github.com/coder/quartz"
@@ -52,7 +53,7 @@ func TestDockerCLIContainerLister(t *testing.T) {
5253
assert.NoError(t, pool.Purge(ct), "Could not purge resource %q", ct.Container.Name)
5354
})
5455

55-
dcl := DockerCLILister{}
56+
dcl := NewDocker(agentexec.DefaultExecer)
5657
ctx := testutil.Context(t, testutil.WaitShort)
5758
actual, err := dcl.List(ctx)
5859
require.NoError(t, err, "Could not list containers")

coderd/workspaceagents_test.go

+7-5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ import (
3131
"cdr.dev/slog/sloggers/slogtest"
3232
"github.com/coder/coder/v2/agent"
3333
"github.com/coder/coder/v2/agent/agentcontainers"
34+
"github.com/coder/coder/v2/agent/agentcontainers/acmock"
35+
"github.com/coder/coder/v2/agent/agentexec"
3436
"github.com/coder/coder/v2/agent/agenttest"
3537
agentproto "github.com/coder/coder/v2/agent/proto"
3638
"github.com/coder/coder/v2/coderd/coderdtest"
@@ -1115,7 +1117,7 @@ func TestWorkspaceAgentContainers(t *testing.T) {
11151117
return agents
11161118
}).Do()
11171119
_ = agenttest.New(t, client.URL, r.AgentToken, func(opts *agent.Options) {
1118-
opts.ContainerLister = &agentcontainers.DockerCLILister{}
1120+
opts.ContainerLister = agentcontainers.NewDocker(agentexec.DefaultExecer)
11191121
})
11201122
resources := coderdtest.NewWorkspaceAgentWaiter(t, client, r.Workspace.ID).Wait()
11211123
require.Len(t, resources, 1, "expected one resource")
@@ -1182,18 +1184,18 @@ func TestWorkspaceAgentContainers(t *testing.T) {
11821184

11831185
for _, tc := range []struct {
11841186
name string
1185-
setupMock func(*agentcontainers.MockLister) (codersdk.WorkspaceAgentListContainersResponse, error)
1187+
setupMock func(*acmock.MockLister) (codersdk.WorkspaceAgentListContainersResponse, error)
11861188
}{
11871189
{
11881190
name: "test response",
1189-
setupMock: func(mcl *agentcontainers.MockLister) (codersdk.WorkspaceAgentListContainersResponse, error) {
1191+
setupMock: func(mcl *acmock.MockLister) (codersdk.WorkspaceAgentListContainersResponse, error) {
11901192
mcl.EXPECT().List(gomock.Any()).Return(testResponse, nil).Times(1)
11911193
return testResponse, nil
11921194
},
11931195
},
11941196
{
11951197
name: "error response",
1196-
setupMock: func(mcl *agentcontainers.MockLister) (codersdk.WorkspaceAgentListContainersResponse, error) {
1198+
setupMock: func(mcl *acmock.MockLister) (codersdk.WorkspaceAgentListContainersResponse, error) {
11971199
mcl.EXPECT().List(gomock.Any()).Return(codersdk.WorkspaceAgentListContainersResponse{}, assert.AnError).Times(1)
11981200
return codersdk.WorkspaceAgentListContainersResponse{}, assert.AnError
11991201
},
@@ -1204,7 +1206,7 @@ func TestWorkspaceAgentContainers(t *testing.T) {
12041206
t.Parallel()
12051207

12061208
ctrl := gomock.NewController(t)
1207-
mcl := agentcontainers.NewMockLister(ctrl)
1209+
mcl := acmock.NewMockLister(ctrl)
12081210
expected, expectedErr := tc.setupMock(mcl)
12091211
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{})
12101212
user := coderdtest.CreateFirstUser(t, client)

0 commit comments

Comments
 (0)