1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- package container
- import (
- "context"
- "fmt"
- "strings"
- "testing"
- "time"
- "github.com/docker/docker/api/types"
- "github.com/docker/docker/api/types/container"
- "github.com/docker/docker/api/types/network"
- "github.com/docker/docker/client"
- "github.com/docker/docker/integration/util/request"
- "github.com/gotestyourself/gotestyourself/icmd"
- "github.com/gotestyourself/gotestyourself/poll"
- "github.com/gotestyourself/gotestyourself/skip"
- "github.com/stretchr/testify/require"
- )
- func TestDeleteDevicemapper(t *testing.T) {
- skip.IfCondition(t, testEnv.DaemonInfo.Driver != "devicemapper")
- defer setupTest(t)()
- client := request.NewAPIClient(t)
- ctx := context.Background()
- foo, err := client.ContainerCreate(ctx,
- &container.Config{
- Cmd: []string{"echo"},
- Image: "busybox",
- },
- &container.HostConfig{},
- &network.NetworkingConfig{},
- "foo",
- )
- require.NoError(t, err)
- err = client.ContainerStart(ctx, foo.ID, types.ContainerStartOptions{})
- require.NoError(t, err)
- inspect, err := client.ContainerInspect(ctx, foo.ID)
- require.NoError(t, err)
- poll.WaitOn(t, containerIsStopped(ctx, client, foo.ID), poll.WithDelay(100*time.Millisecond))
- deviceID := inspect.GraphDriver.Data["DeviceId"]
- // Find pool name from device name
- deviceName := inspect.GraphDriver.Data["DeviceName"]
- devicePrefix := deviceName[:strings.LastIndex(deviceName, "-")]
- devicePool := fmt.Sprintf("/dev/mapper/%s-pool", devicePrefix)
- result := icmd.RunCommand("dmsetup", "message", devicePool, "0", fmt.Sprintf("delete %s", deviceID))
- result.Assert(t, icmd.Success)
- err = client.ContainerRemove(ctx, foo.ID, types.ContainerRemoveOptions{})
- require.NoError(t, err)
- }
- func containerIsStopped(ctx context.Context, client client.APIClient, containerID string) func(log poll.LogT) poll.Result {
- return func(log poll.LogT) poll.Result {
- inspect, err := client.ContainerInspect(ctx, containerID)
- switch {
- case err != nil:
- return poll.Error(err)
- case !inspect.State.Running:
- return poll.Success()
- default:
- return poll.Continue("waiting for container to be stopped")
- }
- }
- }
|