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  }