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)
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