container.go 1.6 KB

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