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