create_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package container
  2. import (
  3. "context"
  4. "fmt"
  5. "os"
  6. "testing"
  7. "strconv"
  8. "github.com/docker/docker/api/types/container"
  9. "github.com/docker/docker/api/types/network"
  10. "github.com/docker/docker/client"
  11. "github.com/docker/docker/integration-cli/environment"
  12. "github.com/docker/docker/integration-cli/fixtures/load"
  13. "github.com/stretchr/testify/require"
  14. )
  15. var (
  16. testEnv *environment.Execution
  17. )
  18. func TestMain(m *testing.M) {
  19. var err error
  20. testEnv, err = environment.New()
  21. if err != nil {
  22. fmt.Println(err)
  23. os.Exit(1)
  24. }
  25. if testEnv.LocalDaemon() {
  26. fmt.Println("INFO: Testing against a local daemon")
  27. } else {
  28. fmt.Println("INFO: Testing against a remote daemon")
  29. }
  30. // TODO: ensure and protect images
  31. res := m.Run()
  32. os.Exit(res)
  33. }
  34. func TestAPICreateWithNotExistImage(t *testing.T) {
  35. defer setupTest(t)()
  36. clt := createClient(t)
  37. testCases := []struct {
  38. image string
  39. expectedError string
  40. }{
  41. {
  42. image: "test456:v1",
  43. expectedError: "No such image: test456:v1",
  44. },
  45. {
  46. image: "test456",
  47. expectedError: "No such image: test456",
  48. },
  49. {
  50. image: "sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
  51. expectedError: "No such image: sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
  52. },
  53. }
  54. for index, tc := range testCases {
  55. tc := tc
  56. t.Run(strconv.Itoa(index), func(t *testing.T) {
  57. t.Parallel()
  58. _, err := clt.ContainerCreate(context.Background(),
  59. &container.Config{
  60. Image: tc.image,
  61. },
  62. &container.HostConfig{},
  63. &network.NetworkingConfig{},
  64. "foo",
  65. )
  66. require.Error(t, err)
  67. require.Contains(t, err.Error(), tc.expectedError)
  68. })
  69. }
  70. }
  71. func TestAPICreateEmptyEnv(t *testing.T) {
  72. defer setupTest(t)()
  73. clt := createClient(t)
  74. testCases := []struct {
  75. env string
  76. expectedError string
  77. }{
  78. {
  79. env: "",
  80. expectedError: "invalid environment variable:",
  81. },
  82. {
  83. env: "=",
  84. expectedError: "invalid environment variable: =",
  85. },
  86. {
  87. env: "=foo",
  88. expectedError: "invalid environment variable: =foo",
  89. },
  90. }
  91. for index, tc := range testCases {
  92. tc := tc
  93. t.Run(strconv.Itoa(index), func(t *testing.T) {
  94. t.Parallel()
  95. _, err := clt.ContainerCreate(context.Background(),
  96. &container.Config{
  97. Image: "busybox",
  98. Env: []string{tc.env},
  99. },
  100. &container.HostConfig{},
  101. &network.NetworkingConfig{},
  102. "foo",
  103. )
  104. require.Error(t, err)
  105. require.Contains(t, err.Error(), tc.expectedError)
  106. })
  107. }
  108. }
  109. func createClient(t *testing.T) client.APIClient {
  110. clt, err := client.NewEnvClient()
  111. require.NoError(t, err)
  112. return clt
  113. }
  114. func setupTest(t *testing.T) func() {
  115. if testEnv.DaemonPlatform() == "linux" {
  116. images := []string{"busybox:latest", "hello-world:frozen", "debian:jessie"}
  117. err := load.FrozenImagesLinux(testEnv.DockerBinary(), images...)
  118. if err != nil {
  119. t.Fatalf("%+v", err)
  120. }
  121. defer testEnv.ProtectImage(t, images...)
  122. }
  123. return func() {
  124. testEnv.Clean(t, testEnv.DockerBinary())
  125. }
  126. }