github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/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  // nolint: golint
    26  func Create(t *testing.T, ctx context.Context, client client.APIClient, ops ...func(*TestContainerConfig)) string { // nolint: golint
    27  	t.Helper()
    28  	cmd := []string{"top"}
    29  	if runtime.GOOS == "windows" {
    30  		cmd = []string{"sleep", "240"}
    31  	}
    32  	config := &TestContainerConfig{
    33  		Config: &container.Config{
    34  			Image: "busybox",
    35  			Cmd:   cmd,
    36  		},
    37  		HostConfig:       &container.HostConfig{},
    38  		NetworkingConfig: &network.NetworkingConfig{},
    39  	}
    40  
    41  	for _, op := range ops {
    42  		op(config)
    43  	}
    44  
    45  	c, err := client.ContainerCreate(ctx, config.Config, config.HostConfig, config.NetworkingConfig, config.Name)
    46  	assert.NilError(t, err)
    47  
    48  	return c.ID
    49  }
    50  
    51  // Run creates and start a container with the specified options
    52  // nolint: golint
    53  func Run(t *testing.T, ctx context.Context, client client.APIClient, ops ...func(*TestContainerConfig)) string { // nolint: golint
    54  	t.Helper()
    55  	id := Create(t, ctx, client, ops...)
    56  
    57  	err := client.ContainerStart(ctx, id, types.ContainerStartOptions{})
    58  	assert.NilError(t, err)
    59  
    60  	return id
    61  }