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 }