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  }