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

Lines changed: 2 additions & 2 deletions
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

Lines changed: 13 additions & 5 deletions
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

Lines changed: 2 additions & 1 deletion
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

Lines changed: 7 additions & 5 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy