@@ -25,6 +25,7 @@ var rmTests = []func(t *testing.T, sb integration.Sandbox){
2525 testRmMulti ,
2626 testRmInvalidBuildkitdConfig ,
2727 testRmAllInactiveInvalidBuildkitdConfig ,
28+ testRmUnreachableEndpoint ,
2829}
2930
3031func testRm (t * testing.T , sb integration.Sandbox ) {
@@ -34,6 +35,7 @@ func testRm(t *testing.T, sb integration.Sandbox) {
3435
3536 out , err := rmCmd (sb , withArgs ("default" ))
3637 require .Error (t , err , out ) // can't remove a docker builder
38+ require .Contains (t , out , "context builder cannot be removed" )
3739
3840 out , err = createCmd (sb , withArgs ("--driver" , "docker-container" ))
3941 require .NoError (t , err , out )
@@ -155,6 +157,43 @@ func testRmAllInactiveInvalidBuildkitdConfig(t *testing.T, sb integration.Sandbo
155157 builderName = ""
156158}
157159
160+ func testRmUnreachableEndpoint (t * testing.T , sb integration.Sandbox ) {
161+ if ! isDockerContainerWorker (sb ) {
162+ t .Skip ("only testing with docker-container worker" )
163+ }
164+
165+ out , err := createCmd (sb , withArgs ("--driver" , "docker-container" ))
166+ require .NoError (t , err , out )
167+ builderName := strings .TrimSpace (out )
168+
169+ out , err = inspectCmd (sb , withArgs (builderName , "--bootstrap" ))
170+ require .NoError (t , err , out )
171+
172+ t .Cleanup (func () {
173+ if builderName == "" {
174+ return
175+ }
176+ _ , _ = rmCmd (sb , withArgs ("--keep-daemon" , builderName ))
177+ })
178+
179+ var goodContainer string
180+ updateStoredBuilder (t , sb , builderName , func (ng * store.NodeGroup ) {
181+ require .NotEmpty (t , ng .Nodes )
182+ goodContainer = driver .BuilderName (ng .Nodes [0 ].Name )
183+ badNode := ng .Nodes [0 ]
184+ badNode .Name += "-unreachable"
185+ badNode .Endpoint = "tcp://127.0.0.1:1"
186+ ng .Nodes = append ([]store.Node {badNode }, ng .Nodes ... )
187+ })
188+
189+ out , err = rmCmd (sb , withArgs ("--timeout=2s" , builderName ))
190+ require .Error (t , err , out )
191+ require .Contains (t , out , "failed to remove " + builderName )
192+ requireNoStoredBuilder (t , sb , builderName )
193+ requireNoContainer (t , sb , goodContainer )
194+ builderName = ""
195+ }
196+
158197func updateStoredBuilder (t * testing.T , sb integration.Sandbox , name string , fn func (* store.NodeGroup )) {
159198 t .Helper ()
160199
0 commit comments