docker_api_create_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. "time"
  6. "github.com/docker/docker/api/types/container"
  7. "github.com/docker/docker/integration-cli/checker"
  8. "github.com/docker/docker/integration-cli/request"
  9. "github.com/go-check/check"
  10. )
  11. func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
  12. // test invalid Interval in Healthcheck: less than 0s
  13. name := "test1"
  14. config := map[string]interface{}{
  15. "Image": "busybox",
  16. "Healthcheck": map[string]interface{}{
  17. "Interval": -10 * time.Millisecond,
  18. "Timeout": time.Second,
  19. "Retries": int(1000),
  20. },
  21. }
  22. res, body, err := request.Post("/containers/create?name="+name, request.JSONBody(config))
  23. c.Assert(err, check.IsNil)
  24. c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
  25. buf, err := request.ReadBody(body)
  26. c.Assert(err, checker.IsNil)
  27. expected := fmt.Sprintf("Interval in Healthcheck cannot be less than %s", container.MinimumDuration)
  28. c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
  29. // test invalid Interval in Healthcheck: larger than 0s but less than 1ms
  30. name = "test2"
  31. config = map[string]interface{}{
  32. "Image": "busybox",
  33. "Healthcheck": map[string]interface{}{
  34. "Interval": 500 * time.Microsecond,
  35. "Timeout": time.Second,
  36. "Retries": int(1000),
  37. },
  38. }
  39. res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
  40. c.Assert(err, check.IsNil)
  41. buf, err = request.ReadBody(body)
  42. c.Assert(err, checker.IsNil)
  43. c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
  44. c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
  45. // test invalid Timeout in Healthcheck: less than 1ms
  46. name = "test3"
  47. config = map[string]interface{}{
  48. "Image": "busybox",
  49. "Healthcheck": map[string]interface{}{
  50. "Interval": time.Second,
  51. "Timeout": -100 * time.Millisecond,
  52. "Retries": int(1000),
  53. },
  54. }
  55. res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
  56. c.Assert(err, check.IsNil)
  57. c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
  58. buf, err = request.ReadBody(body)
  59. c.Assert(err, checker.IsNil)
  60. expected = fmt.Sprintf("Timeout in Healthcheck cannot be less than %s", container.MinimumDuration)
  61. c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
  62. // test invalid Retries in Healthcheck: less than 0
  63. name = "test4"
  64. config = map[string]interface{}{
  65. "Image": "busybox",
  66. "Healthcheck": map[string]interface{}{
  67. "Interval": time.Second,
  68. "Timeout": time.Second,
  69. "Retries": int(-10),
  70. },
  71. }
  72. res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
  73. c.Assert(err, check.IsNil)
  74. c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
  75. buf, err = request.ReadBody(body)
  76. c.Assert(err, checker.IsNil)
  77. expected = "Retries in Healthcheck cannot be negative"
  78. c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
  79. // test invalid StartPeriod in Healthcheck: not 0 and less than 1ms
  80. name = "test3"
  81. config = map[string]interface{}{
  82. "Image": "busybox",
  83. "Healthcheck": map[string]interface{}{
  84. "Interval": time.Second,
  85. "Timeout": time.Second,
  86. "Retries": int(1000),
  87. "StartPeriod": 100 * time.Microsecond,
  88. },
  89. }
  90. res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config))
  91. c.Assert(err, check.IsNil)
  92. c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest)
  93. buf, err = request.ReadBody(body)
  94. c.Assert(err, checker.IsNil)
  95. expected = fmt.Sprintf("StartPeriod in Healthcheck cannot be less than %s", container.MinimumDuration)
  96. c.Assert(getErrorMessage(c, buf), checker.Contains, expected)
  97. }