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  }