@@ -69,7 +69,7 @@ func (f *fakeContainerCLI) ExecAs(ctx context.Context, name, user string, args .
69
69
type fakeDevcontainerCLI struct {
70
70
upID string
71
71
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.
73
73
execErr error
74
74
execErrC chan func (cmd string , args ... string ) error // If set, send fn to return err, nil or close to return execErr.
75
75
readConfig agentcontainers.DevcontainerConfig
@@ -82,9 +82,9 @@ func (f *fakeDevcontainerCLI) Up(ctx context.Context, _, _ string, _ ...agentcon
82
82
select {
83
83
case <- ctx .Done ():
84
84
return "" , ctx .Err ()
85
- case err , ok := <- f .upErrC :
85
+ case fn , ok := <- f .upErrC :
86
86
if ok {
87
- return f .upID , err
87
+ return f .upID , fn ()
88
88
}
89
89
}
90
90
}
@@ -613,7 +613,7 @@ func TestAPI(t *testing.T) {
613
613
nowRecreateErrorTrap := mClock .Trap ().Now ("recreate" , "errorTimes" )
614
614
nowRecreateSuccessTrap := mClock .Trap ().Now ("recreate" , "successTimes" )
615
615
616
- tt .devcontainerCLI .upErrC = make (chan error )
616
+ tt .devcontainerCLI .upErrC = make (chan func () error )
617
617
618
618
// Setup router with the handler under test.
619
619
r := chi .NewRouter ()
@@ -1665,7 +1665,7 @@ func TestAPI(t *testing.T) {
1665
1665
mClock = quartz .NewMock (t )
1666
1666
fCCLI = & fakeContainerCLI {arch : "<none>" }
1667
1667
fDCCLI = & fakeDevcontainerCLI {
1668
- upErrC : make (chan error , 1 ),
1668
+ upErrC : make (chan func () error , 1 ),
1669
1669
}
1670
1670
fSAC = & fakeSubAgentClient {
1671
1671
logger : logger .Named ("fakeSubAgentClient" ),
@@ -1717,7 +1717,7 @@ func TestAPI(t *testing.T) {
1717
1717
1718
1718
// Given: We simulate an error running `devcontainer up`
1719
1719
simulatedError := xerrors .New ("simulated error" )
1720
- testutil .RequireSend (ctx , t , fDCCLI .upErrC , simulatedError )
1720
+ testutil .RequireSend (ctx , t , fDCCLI .upErrC , func () error { return simulatedError } )
1721
1721
1722
1722
nowRecreateErrorTrap .MustWait (ctx ).MustRelease (ctx )
1723
1723
nowRecreateErrorTrap .Close ()
@@ -1742,7 +1742,22 @@ func TestAPI(t *testing.T) {
1742
1742
require .Equal (t , http .StatusAccepted , rec .Code )
1743
1743
1744
1744
// 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
+ })
1746
1761
1747
1762
nowRecreateSuccessTrap .MustWait (ctx ).MustRelease (ctx )
1748
1763
nowRecreateSuccessTrap .Close ()
@@ -1756,7 +1771,7 @@ func TestAPI(t *testing.T) {
1756
1771
err = json .NewDecoder (rec .Body ).Decode (& response )
1757
1772
require .NoError (t , err )
1758
1773
1759
- // Then: We expect that there will be no error associated with the devcontainer .
1774
+ // Then: We also expect no error after running up. .
1760
1775
require .Len (t , response .Devcontainers , 1 )
1761
1776
require .Equal (t , "" , response .Devcontainers [0 ].Error )
1762
1777
})
0 commit comments