github.com/jfrazelle/docker@v1.1.2-0.20210712172922-bf78e25fe508/integration/container/pause_test.go (about) 1 package container // import "github.com/docker/docker/integration/container" 2 3 import ( 4 "context" 5 "io" 6 "testing" 7 "time" 8 9 containerderrdefs "github.com/containerd/containerd/errdefs" 10 "github.com/docker/docker/api/types" 11 "github.com/docker/docker/api/types/events" 12 "github.com/docker/docker/api/types/filters" 13 "github.com/docker/docker/api/types/versions" 14 "github.com/docker/docker/integration/internal/container" 15 "github.com/docker/docker/testutil/request" 16 "gotest.tools/v3/assert" 17 is "gotest.tools/v3/assert/cmp" 18 "gotest.tools/v3/poll" 19 "gotest.tools/v3/skip" 20 ) 21 22 func TestPause(t *testing.T) { 23 skip.If(t, testEnv.DaemonInfo.OSType == "windows" && testEnv.DaemonInfo.Isolation == "process") 24 skip.If(t, testEnv.DaemonInfo.CgroupDriver == "none") 25 26 defer setupTest(t)() 27 client := testEnv.APIClient() 28 ctx := context.Background() 29 30 cID := container.Run(ctx, t, client) 31 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 32 33 since := request.DaemonUnixTime(ctx, t, client, testEnv) 34 35 err := client.ContainerPause(ctx, cID) 36 assert.NilError(t, err) 37 38 inspect, err := client.ContainerInspect(ctx, cID) 39 assert.NilError(t, err) 40 assert.Check(t, is.Equal(true, inspect.State.Paused)) 41 42 err = client.ContainerUnpause(ctx, cID) 43 assert.NilError(t, err) 44 45 until := request.DaemonUnixTime(ctx, t, client, testEnv) 46 47 messages, errs := client.Events(ctx, types.EventsOptions{ 48 Since: since, 49 Until: until, 50 Filters: filters.NewArgs(filters.Arg("container", cID)), 51 }) 52 assert.Check(t, is.DeepEqual([]string{"pause", "unpause"}, getEventActions(t, messages, errs))) 53 } 54 55 func TestPauseFailsOnWindowsServerContainers(t *testing.T) { 56 skip.If(t, testEnv.DaemonInfo.OSType != "windows" || testEnv.DaemonInfo.Isolation != "process") 57 58 defer setupTest(t)() 59 client := testEnv.APIClient() 60 ctx := context.Background() 61 62 cID := container.Run(ctx, t, client) 63 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 64 65 err := client.ContainerPause(ctx, cID) 66 assert.Check(t, is.ErrorContains(err, containerderrdefs.ErrNotImplemented.Error())) 67 } 68 69 func TestPauseStopPausedContainer(t *testing.T) { 70 skip.If(t, testEnv.DaemonInfo.OSType == "windows") 71 skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.31"), "broken in earlier versions") 72 skip.If(t, testEnv.DaemonInfo.CgroupDriver == "none") 73 defer setupTest(t)() 74 client := testEnv.APIClient() 75 ctx := context.Background() 76 77 cID := container.Run(ctx, t, client) 78 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 79 80 err := client.ContainerPause(ctx, cID) 81 assert.NilError(t, err) 82 83 err = client.ContainerStop(ctx, cID, nil) 84 assert.NilError(t, err) 85 86 poll.WaitOn(t, container.IsStopped(ctx, client, cID), poll.WithDelay(100*time.Millisecond)) 87 } 88 89 func getEventActions(t *testing.T, messages <-chan events.Message, errs <-chan error) []string { 90 var actions []string 91 for { 92 select { 93 case err := <-errs: 94 assert.Check(t, err == nil || err == io.EOF) 95 return actions 96 case e := <-messages: 97 actions = append(actions, e.Status) 98 } 99 } 100 }