github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/integration-cli/docker_api_create_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "net/http" 6 "time" 7 8 "github.com/docker/docker/api/types/container" 9 "github.com/docker/docker/api/types/versions" 10 "github.com/docker/docker/integration-cli/checker" 11 "github.com/docker/docker/internal/test/request" 12 "github.com/go-check/check" 13 ) 14 15 func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) { 16 // test invalid Interval in Healthcheck: less than 0s 17 name := "test1" 18 config := map[string]interface{}{ 19 "Image": "busybox", 20 "Healthcheck": map[string]interface{}{ 21 "Interval": -10 * time.Millisecond, 22 "Timeout": time.Second, 23 "Retries": int(1000), 24 }, 25 } 26 27 res, body, err := request.Post("/containers/create?name="+name, request.JSONBody(config)) 28 c.Assert(err, check.IsNil) 29 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 30 c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError) 31 } else { 32 c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest) 33 } 34 35 buf, err := request.ReadBody(body) 36 c.Assert(err, checker.IsNil) 37 38 expected := fmt.Sprintf("Interval in Healthcheck cannot be less than %s", container.MinimumDuration) 39 c.Assert(getErrorMessage(c, buf), checker.Contains, expected) 40 41 // test invalid Interval in Healthcheck: larger than 0s but less than 1ms 42 name = "test2" 43 config = map[string]interface{}{ 44 "Image": "busybox", 45 "Healthcheck": map[string]interface{}{ 46 "Interval": 500 * time.Microsecond, 47 "Timeout": time.Second, 48 "Retries": int(1000), 49 }, 50 } 51 res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config)) 52 c.Assert(err, check.IsNil) 53 54 buf, err = request.ReadBody(body) 55 c.Assert(err, checker.IsNil) 56 57 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 58 c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError) 59 } else { 60 c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest) 61 } 62 c.Assert(getErrorMessage(c, buf), checker.Contains, expected) 63 64 // test invalid Timeout in Healthcheck: less than 1ms 65 name = "test3" 66 config = map[string]interface{}{ 67 "Image": "busybox", 68 "Healthcheck": map[string]interface{}{ 69 "Interval": time.Second, 70 "Timeout": -100 * time.Millisecond, 71 "Retries": int(1000), 72 }, 73 } 74 res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config)) 75 c.Assert(err, check.IsNil) 76 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 77 c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError) 78 } else { 79 c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest) 80 } 81 82 buf, err = request.ReadBody(body) 83 c.Assert(err, checker.IsNil) 84 85 expected = fmt.Sprintf("Timeout in Healthcheck cannot be less than %s", container.MinimumDuration) 86 c.Assert(getErrorMessage(c, buf), checker.Contains, expected) 87 88 // test invalid Retries in Healthcheck: less than 0 89 name = "test4" 90 config = map[string]interface{}{ 91 "Image": "busybox", 92 "Healthcheck": map[string]interface{}{ 93 "Interval": time.Second, 94 "Timeout": time.Second, 95 "Retries": int(-10), 96 }, 97 } 98 res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config)) 99 c.Assert(err, check.IsNil) 100 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 101 c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError) 102 } else { 103 c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest) 104 } 105 106 buf, err = request.ReadBody(body) 107 c.Assert(err, checker.IsNil) 108 109 expected = "Retries in Healthcheck cannot be negative" 110 c.Assert(getErrorMessage(c, buf), checker.Contains, expected) 111 112 // test invalid StartPeriod in Healthcheck: not 0 and less than 1ms 113 name = "test3" 114 config = map[string]interface{}{ 115 "Image": "busybox", 116 "Healthcheck": map[string]interface{}{ 117 "Interval": time.Second, 118 "Timeout": time.Second, 119 "Retries": int(1000), 120 "StartPeriod": 100 * time.Microsecond, 121 }, 122 } 123 res, body, err = request.Post("/containers/create?name="+name, request.JSONBody(config)) 124 c.Assert(err, check.IsNil) 125 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 126 c.Assert(res.StatusCode, check.Equals, http.StatusInternalServerError) 127 } else { 128 c.Assert(res.StatusCode, check.Equals, http.StatusBadRequest) 129 } 130 131 buf, err = request.ReadBody(body) 132 c.Assert(err, checker.IsNil) 133 134 expected = fmt.Sprintf("StartPeriod in Healthcheck cannot be less than %s", container.MinimumDuration) 135 c.Assert(getErrorMessage(c, buf), checker.Contains, expected) 136 }