Skip to content

Commit 7e372f7

Browse files
fix(agent/agentcontainers): reset error at start of rebuild (#18686)
Reset the error associated with a devcontainer when a rebuild is requested.
1 parent 258a839 commit 7e372f7

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

agent/agentcontainers/api.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,7 @@ func (api *API) handleDevcontainerRecreate(w http.ResponseWriter, r *http.Reques
946946
// devcontainer multiple times in parallel.
947947
dc.Status = codersdk.WorkspaceAgentDevcontainerStatusStarting
948948
dc.Container = nil
949+
dc.Error = ""
949950
api.knownDevcontainers[dc.WorkspaceFolder] = dc
950951
go func() {
951952
_ = api.CreateDevcontainer(dc.WorkspaceFolder, dc.ConfigPath, WithRemoveExistingContainer())

agent/agentcontainers/api_test.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ func (f *fakeContainerCLI) ExecAs(ctx context.Context, name, user string, args .
6969
type fakeDevcontainerCLI struct {
7070
upID string
7171
upErr error
72-
upErrC chan error // If set, send to return err, close to return upErr.
72+
upErrC chan func() error // If set, send to return err, close to return upErr.
7373
execErr error
7474
execErrC chan func(cmd string, args ...string) error // If set, send fn to return err, nil or close to return execErr.
7575
readConfig agentcontainers.DevcontainerConfig
@@ -82,9 +82,9 @@ func (f *fakeDevcontainerCLI) Up(ctx context.Context, _, _ string, _ ...agentcon
8282
select {
8383
case <-ctx.Done():
8484
return "", ctx.Err()
85-
case err, ok := <-f.upErrC:
85+
case fn, ok := <-f.upErrC:
8686
if ok {
87-
return f.upID, err
87+
return f.upID, fn()
8888
}
8989
}
9090
}
@@ -613,7 +613,7 @@ func TestAPI(t *testing.T) {
613613
nowRecreateErrorTrap := mClock.Trap().Now("recreate", "errorTimes")
614614
nowRecreateSuccessTrap := mClock.Trap().Now("recreate", "successTimes")
615615

616-
tt.devcontainerCLI.upErrC = make(chan error)
616+
tt.devcontainerCLI.upErrC = make(chan func() error)
617617

618618
// Setup router with the handler under test.
619619
r := chi.NewRouter()
@@ -1665,7 +1665,7 @@ func TestAPI(t *testing.T) {
16651665
mClock = quartz.NewMock(t)
16661666
fCCLI = &fakeContainerCLI{arch: "<none>"}
16671667
fDCCLI = &fakeDevcontainerCLI{
1668-
upErrC: make(chan error, 1),
1668+
upErrC: make(chan func() error, 1),
16691669
}
16701670
fSAC = &fakeSubAgentClient{
16711671
logger: logger.Named("fakeSubAgentClient"),
@@ -1717,7 +1717,7 @@ func TestAPI(t *testing.T) {
17171717

17181718
// Given: We simulate an error running `devcontainer up`
17191719
simulatedError := xerrors.New("simulated error")
1720-
testutil.RequireSend(ctx, t, fDCCLI.upErrC, simulatedError)
1720+
testutil.RequireSend(ctx, t, fDCCLI.upErrC, func() error { return simulatedError })
17211721

17221722
nowRecreateErrorTrap.MustWait(ctx).MustRelease(ctx)
17231723
nowRecreateErrorTrap.Close()
@@ -1742,7 +1742,22 @@ func TestAPI(t *testing.T) {
17421742
require.Equal(t, http.StatusAccepted, rec.Code)
17431743

17441744
// Given: We allow `devcontainer up` to succeed.
1745-
testutil.RequireSend(ctx, t, fDCCLI.upErrC, nil)
1745+
testutil.RequireSend(ctx, t, fDCCLI.upErrC, func() error {
1746+
req = httptest.NewRequest(http.MethodGet, "/", nil)
1747+
rec = httptest.NewRecorder()
1748+
r.ServeHTTP(rec, req)
1749+
require.Equal(t, http.StatusOK, rec.Code)
1750+
1751+
response = codersdk.WorkspaceAgentListContainersResponse{}
1752+
err = json.NewDecoder(rec.Body).Decode(&response)
1753+
require.NoError(t, err)
1754+
1755+
// Then: We make sure that the error has been cleared before running up.
1756+
require.Len(t, response.Devcontainers, 1)
1757+
require.Equal(t, "", response.Devcontainers[0].Error)
1758+
1759+
return nil
1760+
})
17461761

17471762
nowRecreateSuccessTrap.MustWait(ctx).MustRelease(ctx)
17481763
nowRecreateSuccessTrap.Close()
@@ -1756,7 +1771,7 @@ func TestAPI(t *testing.T) {
17561771
err = json.NewDecoder(rec.Body).Decode(&response)
17571772
require.NoError(t, err)
17581773

1759-
// Then: We expect that there will be no error associated with the devcontainer.
1774+
// Then: We also expect no error after running up..
17601775
require.Len(t, response.Devcontainers, 1)
17611776
require.Equal(t, "", response.Devcontainers[0].Error)
17621777
})

0 commit comments

Comments
 (0)