github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/integration/container/pause_test.go (about)

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