docker_api_create_test.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package main
  2. import (
  3. "net/http"
  4. "time"
  5. "github.com/docker/docker/integration-cli/checker"
  6. "github.com/docker/docker/integration-cli/request"
  7. "github.com/go-check/check"
  8. )
  9. func (s *DockerSuite) TestAPICreateWithNotExistImage(c *check.C) {
  10. name := "test"
  11. config := map[string]interface{}{
  12. "Image": "test456:v1",
  13. "Volumes": map[string]struct{}{"/tmp": {}},
  14. }
  15. status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  16. c.Assert(err, check.IsNil)
  17. c.Assert(status, check.Equals, http.StatusNotFound)
  18. expected := "No such image: test456:v1"
  19. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  20. config2 := map[string]interface{}{
  21. "Image": "test456",
  22. "Volumes": map[string]struct{}{"/tmp": {}},
  23. }
  24. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config2, daemonHost())
  25. c.Assert(err, check.IsNil)
  26. c.Assert(status, check.Equals, http.StatusNotFound)
  27. expected = "No such image: test456:latest"
  28. c.Assert(getErrorMessage(c, body), checker.Equals, expected)
  29. config3 := map[string]interface{}{
  30. "Image": "sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
  31. }
  32. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config3, daemonHost())
  33. c.Assert(err, check.IsNil)
  34. c.Assert(status, check.Equals, http.StatusNotFound)
  35. expected = "No such image: sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa"
  36. c.Assert(getErrorMessage(c, body), checker.Equals, expected)
  37. }
  38. // Test for #25099
  39. func (s *DockerSuite) TestAPICreateEmptyEnv(c *check.C) {
  40. name := "test1"
  41. config := map[string]interface{}{
  42. "Image": "busybox",
  43. "Env": []string{"", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
  44. "Cmd": []string{"true"},
  45. }
  46. status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  47. c.Assert(err, check.IsNil)
  48. c.Assert(status, check.Equals, http.StatusInternalServerError)
  49. expected := "invalid environment variable:"
  50. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  51. name = "test2"
  52. config = map[string]interface{}{
  53. "Image": "busybox",
  54. "Env": []string{"=", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
  55. "Cmd": []string{"true"},
  56. }
  57. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  58. c.Assert(err, check.IsNil)
  59. c.Assert(status, check.Equals, http.StatusInternalServerError)
  60. expected = "invalid environment variable: ="
  61. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  62. name = "test3"
  63. config = map[string]interface{}{
  64. "Image": "busybox",
  65. "Env": []string{"=foo", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
  66. "Cmd": []string{"true"},
  67. }
  68. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  69. c.Assert(err, check.IsNil)
  70. c.Assert(status, check.Equals, http.StatusInternalServerError)
  71. expected = "invalid environment variable: =foo"
  72. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  73. }
  74. func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
  75. // test invalid Interval in Healthcheck: less than 0s
  76. name := "test1"
  77. config := map[string]interface{}{
  78. "Image": "busybox",
  79. "Healthcheck": map[string]interface{}{
  80. "Interval": time.Duration(-10000000),
  81. "Timeout": time.Duration(1000000000),
  82. "Retries": int(1000),
  83. },
  84. }
  85. status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  86. c.Assert(err, check.IsNil)
  87. c.Assert(status, check.Equals, http.StatusInternalServerError)
  88. expected := "Interval in Healthcheck cannot be less than one second"
  89. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  90. // test invalid Interval in Healthcheck: larger than 0s but less than 1s
  91. name = "test2"
  92. config = map[string]interface{}{
  93. "Image": "busybox",
  94. "Healthcheck": map[string]interface{}{
  95. "Interval": time.Duration(500000000),
  96. "Timeout": time.Duration(1000000000),
  97. "Retries": int(1000),
  98. },
  99. }
  100. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  101. c.Assert(err, check.IsNil)
  102. c.Assert(status, check.Equals, http.StatusInternalServerError)
  103. expected = "Interval in Healthcheck cannot be less than one second"
  104. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  105. // test invalid Timeout in Healthcheck: less than 1s
  106. name = "test3"
  107. config = map[string]interface{}{
  108. "Image": "busybox",
  109. "Healthcheck": map[string]interface{}{
  110. "Interval": time.Duration(1000000000),
  111. "Timeout": time.Duration(-100000000),
  112. "Retries": int(1000),
  113. },
  114. }
  115. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  116. c.Assert(err, check.IsNil)
  117. c.Assert(status, check.Equals, http.StatusInternalServerError)
  118. expected = "Timeout in Healthcheck cannot be less than one second"
  119. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  120. // test invalid Retries in Healthcheck: less than 0
  121. name = "test4"
  122. config = map[string]interface{}{
  123. "Image": "busybox",
  124. "Healthcheck": map[string]interface{}{
  125. "Interval": time.Duration(1000000000),
  126. "Timeout": time.Duration(1000000000),
  127. "Retries": int(-10),
  128. },
  129. }
  130. status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
  131. c.Assert(err, check.IsNil)
  132. c.Assert(status, check.Equals, http.StatusInternalServerError)
  133. expected = "Retries in Healthcheck cannot be negative"
  134. c.Assert(getErrorMessage(c, body), checker.Contains, expected)
  135. }