8 "github.com/docker/docker/api/types/container"
9 "github.com/docker/docker/integration-cli/checker"
10 "github.com/docker/docker/integration-cli/request"
11 "github.com/go-check/check"
14 func (s *DockerSuite) TestAPICreateWithNotExistImage(c *check.C) {
16 config := map[string]interface{}{
17 "Image": "test456:v1",
18 "Volumes": map[string]struct{}{"/tmp": {}},
21 status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
22 c.Assert(err, check.IsNil)
23 c.Assert(status, check.Equals, http.StatusNotFound)
24 expected := "No such image: test456:v1"
25 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
27 config2 := map[string]interface{}{
29 "Volumes": map[string]struct{}{"/tmp": {}},
32 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config2, daemonHost())
33 c.Assert(err, check.IsNil)
34 c.Assert(status, check.Equals, http.StatusNotFound)
35 expected = "No such image: test456:latest"
36 c.Assert(getErrorMessage(c, body), checker.Equals, expected)
38 config3 := map[string]interface{}{
39 "Image": "sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
42 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config3, daemonHost())
43 c.Assert(err, check.IsNil)
44 c.Assert(status, check.Equals, http.StatusNotFound)
45 expected = "No such image: sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa"
46 c.Assert(getErrorMessage(c, body), checker.Equals, expected)
51 func (s *DockerSuite) TestAPICreateEmptyEnv(c *check.C) {
53 config := map[string]interface{}{
55 "Env": []string{"", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
56 "Cmd": []string{"true"},
59 status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
60 c.Assert(err, check.IsNil)
61 c.Assert(status, check.Equals, http.StatusInternalServerError)
62 expected := "invalid environment variable:"
63 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
66 config = map[string]interface{}{
68 "Env": []string{"=", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
69 "Cmd": []string{"true"},
71 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
72 c.Assert(err, check.IsNil)
73 c.Assert(status, check.Equals, http.StatusInternalServerError)
74 expected = "invalid environment variable: ="
75 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
78 config = map[string]interface{}{
80 "Env": []string{"=foo", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
81 "Cmd": []string{"true"},
83 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
84 c.Assert(err, check.IsNil)
85 c.Assert(status, check.Equals, http.StatusInternalServerError)
86 expected = "invalid environment variable: =foo"
87 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
90 func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
91 // test invalid Interval in Healthcheck: less than 0s
93 config := map[string]interface{}{
95 "Healthcheck": map[string]interface{}{
96 "Interval": -10 * time.Millisecond,
97 "Timeout": time.Second,
102 status, body, err := request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
103 c.Assert(err, check.IsNil)
104 c.Assert(status, check.Equals, http.StatusInternalServerError)
105 expected := fmt.Sprintf("Interval in Healthcheck cannot be less than %s", container.MinimumDuration)
106 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
108 // test invalid Interval in Healthcheck: larger than 0s but less than 1ms
110 config = map[string]interface{}{
112 "Healthcheck": map[string]interface{}{
113 "Interval": 500 * time.Microsecond,
114 "Timeout": time.Second,
115 "Retries": int(1000),
118 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
119 c.Assert(err, check.IsNil)
120 c.Assert(status, check.Equals, http.StatusInternalServerError)
121 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
123 // test invalid Timeout in Healthcheck: less than 1ms
125 config = map[string]interface{}{
127 "Healthcheck": map[string]interface{}{
128 "Interval": time.Second,
129 "Timeout": -100 * time.Millisecond,
130 "Retries": int(1000),
133 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
134 c.Assert(err, check.IsNil)
135 c.Assert(status, check.Equals, http.StatusInternalServerError)
136 expected = fmt.Sprintf("Timeout in Healthcheck cannot be less than %s", container.MinimumDuration)
137 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
139 // test invalid Retries in Healthcheck: less than 0
141 config = map[string]interface{}{
143 "Healthcheck": map[string]interface{}{
144 "Interval": time.Second,
145 "Timeout": time.Second,
149 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
150 c.Assert(err, check.IsNil)
151 c.Assert(status, check.Equals, http.StatusInternalServerError)
152 expected = "Retries in Healthcheck cannot be negative"
153 c.Assert(getErrorMessage(c, body), checker.Contains, expected)
155 // test invalid StartPeriod in Healthcheck: not 0 and less than 1ms
157 config = map[string]interface{}{
159 "Healthcheck": map[string]interface{}{
160 "Interval": time.Second,
161 "Timeout": time.Second,
162 "Retries": int(1000),
163 "StartPeriod": 100 * time.Microsecond,
166 status, body, err = request.SockRequest("POST", "/containers/create?name="+name, config, daemonHost())
167 c.Assert(err, check.IsNil)
168 c.Assert(status, check.Equals, http.StatusInternalServerError)
169 expected = fmt.Sprintf("StartPeriod in Healthcheck cannot be less than %s", container.MinimumDuration)
170 c.Assert(getErrorMessage(c, body), checker.Contains, expected)