github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/integration/container/remove_test.go (about) 1 package container // import "github.com/docker/docker/integration/container" 2 3 import ( 4 "context" 5 "os" 6 "testing" 7 "time" 8 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/filters" 11 "github.com/docker/docker/integration/internal/container" 12 "github.com/docker/docker/integration/internal/request" 13 "github.com/docker/docker/internal/testutil" 14 "github.com/gotestyourself/gotestyourself/assert" 15 is "github.com/gotestyourself/gotestyourself/assert/cmp" 16 "github.com/gotestyourself/gotestyourself/fs" 17 "github.com/gotestyourself/gotestyourself/poll" 18 "github.com/gotestyourself/gotestyourself/skip" 19 ) 20 21 func getPrefixAndSlashFromDaemonPlatform() (prefix, slash string) { 22 if testEnv.OSType == "windows" { 23 return "c:", `\` 24 } 25 return "", "/" 26 } 27 28 // Test case for #5244: `docker rm` fails if bind dir doesn't exist anymore 29 func TestRemoveContainerWithRemovedVolume(t *testing.T) { 30 skip.If(t, testEnv.IsRemoteDaemon()) 31 32 defer setupTest(t)() 33 ctx := context.Background() 34 client := request.NewAPIClient(t) 35 36 prefix, slash := getPrefixAndSlashFromDaemonPlatform() 37 38 tempDir := fs.NewDir(t, "test-rm-container-with-removed-volume", fs.WithMode(0755)) 39 defer tempDir.Remove() 40 41 cID := container.Run(t, ctx, client, container.WithCmd("true"), container.WithBind(tempDir.Path(), prefix+slash+"test")) 42 poll.WaitOn(t, container.IsInState(ctx, client, cID, "exited"), poll.WithDelay(100*time.Millisecond)) 43 44 err := os.RemoveAll(tempDir.Path()) 45 assert.NilError(t, err) 46 47 err = client.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{ 48 RemoveVolumes: true, 49 }) 50 assert.NilError(t, err) 51 52 _, _, err = client.ContainerInspectWithRaw(ctx, cID, true) 53 testutil.ErrorContains(t, err, "No such container") 54 } 55 56 // Test case for #2099/#2125 57 func TestRemoveContainerWithVolume(t *testing.T) { 58 defer setupTest(t)() 59 ctx := context.Background() 60 client := request.NewAPIClient(t) 61 62 prefix, slash := getPrefixAndSlashFromDaemonPlatform() 63 64 cID := container.Run(t, ctx, client, container.WithCmd("true"), container.WithVolume(prefix+slash+"srv")) 65 poll.WaitOn(t, container.IsInState(ctx, client, cID, "exited"), poll.WithDelay(100*time.Millisecond)) 66 67 insp, _, err := client.ContainerInspectWithRaw(ctx, cID, true) 68 assert.NilError(t, err) 69 assert.Check(t, is.Equal(1, len(insp.Mounts))) 70 volName := insp.Mounts[0].Name 71 72 err = client.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{ 73 RemoveVolumes: true, 74 }) 75 assert.NilError(t, err) 76 77 volumes, err := client.VolumeList(ctx, filters.NewArgs(filters.Arg("name", volName))) 78 assert.NilError(t, err) 79 assert.Check(t, is.Equal(0, len(volumes.Volumes))) 80 } 81 82 func TestRemoveContainerRunning(t *testing.T) { 83 defer setupTest(t)() 84 ctx := context.Background() 85 client := request.NewAPIClient(t) 86 87 cID := container.Run(t, ctx, client) 88 89 err := client.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{}) 90 testutil.ErrorContains(t, err, "cannot remove a running container") 91 } 92 93 func TestRemoveContainerForceRemoveRunning(t *testing.T) { 94 defer setupTest(t)() 95 ctx := context.Background() 96 client := request.NewAPIClient(t) 97 98 cID := container.Run(t, ctx, client) 99 100 err := client.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{ 101 Force: true, 102 }) 103 assert.NilError(t, err) 104 } 105 106 func TestRemoveInvalidContainer(t *testing.T) { 107 defer setupTest(t)() 108 ctx := context.Background() 109 client := request.NewAPIClient(t) 110 111 err := client.ContainerRemove(ctx, "unknown", types.ContainerRemoveOptions{}) 112 testutil.ErrorContains(t, err, "No such container") 113 }