github.com/devdivbcp/moby@v17.12.0-ce-rc1.0.20200726071732-2d4bfdc789ad+incompatible/integration/internal/container/container.go (about)

     1  package container
     2  
     3  import (
     4  	"context"
     5  	"runtime"
     6  	"testing"
     7  
     8  	"github.com/docker/docker/api/types"
     9  	"github.com/docker/docker/api/types/container"
    10  	"github.com/docker/docker/api/types/network"
    11  	"github.com/docker/docker/client"
    12  	"gotest.tools/assert"
    13  )
    14  
    15  // TestContainerConfig holds container configuration struct that
    16  // are used in api calls.
    17  type TestContainerConfig struct {
    18  	Name             string
    19  	Config           *container.Config
    20  	HostConfig       *container.HostConfig
    21  	NetworkingConfig *network.NetworkingConfig
    22  }
    23  
    24  // Create creates a container with the specified options
    25  func Create(ctx context.Context, t *testing.T, client client.APIClient, ops ...func(*TestContainerConfig)) string {
    26  	t.Helper()
    27  	cmd := []string{"top"}
    28  	if runtime.GOOS == "windows" {
    29  		cmd = []string{"sleep", "240"}
    30  	}
    31  	config := &TestContainerConfig{
    32  		Config: &container.Config{
    33  			Image: "busybox",
    34  			Cmd:   cmd,
    35  		},
    36  		HostConfig:       &container.HostConfig{},
    37  		NetworkingConfig: &network.NetworkingConfig{},
    38  	}
    39  
    40  	for _, op := range ops {
    41  		op(config)
    42  	}
    43  
    44  	c, err := client.ContainerCreate(ctx, config.Config, config.HostConfig, config.NetworkingConfig, config.Name)
    45  	assert.NilError(t, err)
    46  
    47  	return c.ID
    48  }
    49  
    50  // Run creates and start a container with the specified options
    51  func Run(ctx context.Context, t *testing.T, client client.APIClient, ops ...func(*TestContainerConfig)) string {
    52  	t.Helper()
    53  	id := Create(ctx, t, client, ops...)
    54  
    55  	err := client.ContainerStart(ctx, id, types.ContainerStartOptions{})
    56  	assert.NilError(t, err)
    57  
    58  	return id
    59  }