github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/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 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/events" 11 "github.com/docker/docker/api/types/filters" 12 "github.com/docker/docker/integration/internal/container" 13 "github.com/docker/docker/integration/internal/request" 14 "github.com/docker/docker/internal/testutil" 15 "github.com/gotestyourself/gotestyourself/assert" 16 is "github.com/gotestyourself/gotestyourself/assert/cmp" 17 "github.com/gotestyourself/gotestyourself/poll" 18 "github.com/gotestyourself/gotestyourself/skip" 19 ) 20 21 func TestPause(t *testing.T) { 22 skip.If(t, testEnv.DaemonInfo.OSType == "windows" && testEnv.DaemonInfo.Isolation == "process") 23 24 defer setupTest(t)() 25 client := request.NewAPIClient(t) 26 ctx := context.Background() 27 28 cID := container.Run(t, ctx, client) 29 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 30 31 since := request.DaemonUnixTime(ctx, t, client, testEnv) 32 33 err := client.ContainerPause(ctx, cID) 34 assert.NilError(t, err) 35 36 inspect, err := client.ContainerInspect(ctx, cID) 37 assert.NilError(t, err) 38 assert.Check(t, is.Equal(true, inspect.State.Paused)) 39 40 err = client.ContainerUnpause(ctx, cID) 41 assert.NilError(t, err) 42 43 until := request.DaemonUnixTime(ctx, t, client, testEnv) 44 45 messages, errs := client.Events(ctx, types.EventsOptions{ 46 Since: since, 47 Until: until, 48 Filters: filters.NewArgs(filters.Arg("container", cID)), 49 }) 50 assert.Check(t, is.DeepEqual([]string{"pause", "unpause"}, 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 defer setupTest(t)() 57 client := request.NewAPIClient(t) 58 ctx := context.Background() 59 60 cID := container.Run(t, ctx, client) 61 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 62 63 err := client.ContainerPause(ctx, cID) 64 testutil.ErrorContains(t, err, "cannot pause Windows Server Containers") 65 } 66 67 func TestPauseStopPausedContainer(t *testing.T) { 68 skip.If(t, testEnv.DaemonInfo.OSType != "linux") 69 70 defer setupTest(t)() 71 client := request.NewAPIClient(t) 72 ctx := context.Background() 73 74 cID := container.Run(t, ctx, client) 75 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 76 77 err := client.ContainerPause(ctx, cID) 78 assert.NilError(t, err) 79 80 err = client.ContainerStop(ctx, cID, nil) 81 assert.NilError(t, err) 82 83 poll.WaitOn(t, container.IsStopped(ctx, client, cID), poll.WithDelay(100*time.Millisecond)) 84 } 85 86 func getEventActions(t *testing.T, messages <-chan events.Message, errs <-chan error) []string { 87 actions := []string{} 88 for { 89 select { 90 case err := <-errs: 91 assert.Check(t, err == nil || err == io.EOF) 92 return actions 93 case e := <-messages: 94 actions = append(actions, e.Status) 95 } 96 } 97 }