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