Tizen_4.0 base
[platform/upstream/docker-engine.git] / integration-cli / docker_api_create_test.go
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/integration-cli/checker"
10         "github.com/docker/docker/integration-cli/request"
11         "github.com/go-check/check"
12 )
13
14 func (s *DockerSuite) TestAPICreateWithNotExistImage(c *check.C) {
15         name := "test"
16         config := map[string]interface{}{
17                 "Image":   "test456:v1",
18                 "Volumes": map[string]struct{}{"/tmp": {}},
19         }
20
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)
26
27         config2 := map[string]interface{}{
28                 "Image":   "test456",
29                 "Volumes": map[string]struct{}{"/tmp": {}},
30         }
31
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)
37
38         config3 := map[string]interface{}{
39                 "Image": "sha256:0cb40641836c461bc97c793971d84d758371ed682042457523e4ae701efeaaaa",
40         }
41
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)
47
48 }
49
50 // Test for #25099
51 func (s *DockerSuite) TestAPICreateEmptyEnv(c *check.C) {
52         name := "test1"
53         config := map[string]interface{}{
54                 "Image": "busybox",
55                 "Env":   []string{"", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
56                 "Cmd":   []string{"true"},
57         }
58
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)
64
65         name = "test2"
66         config = map[string]interface{}{
67                 "Image": "busybox",
68                 "Env":   []string{"=", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
69                 "Cmd":   []string{"true"},
70         }
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)
76
77         name = "test3"
78         config = map[string]interface{}{
79                 "Image": "busybox",
80                 "Env":   []string{"=foo", "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"},
81                 "Cmd":   []string{"true"},
82         }
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)
88 }
89
90 func (s *DockerSuite) TestAPICreateWithInvalidHealthcheckParams(c *check.C) {
91         // test invalid Interval in Healthcheck: less than 0s
92         name := "test1"
93         config := map[string]interface{}{
94                 "Image": "busybox",
95                 "Healthcheck": map[string]interface{}{
96                         "Interval": -10 * time.Millisecond,
97                         "Timeout":  time.Second,
98                         "Retries":  int(1000),
99                 },
100         }
101
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)
107
108         // test invalid Interval in Healthcheck: larger than 0s but less than 1ms
109         name = "test2"
110         config = map[string]interface{}{
111                 "Image": "busybox",
112                 "Healthcheck": map[string]interface{}{
113                         "Interval": 500 * time.Microsecond,
114                         "Timeout":  time.Second,
115                         "Retries":  int(1000),
116                 },
117         }
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)
122
123         // test invalid Timeout in Healthcheck: less than 1ms
124         name = "test3"
125         config = map[string]interface{}{
126                 "Image": "busybox",
127                 "Healthcheck": map[string]interface{}{
128                         "Interval": time.Second,
129                         "Timeout":  -100 * time.Millisecond,
130                         "Retries":  int(1000),
131                 },
132         }
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)
138
139         // test invalid Retries in Healthcheck: less than 0
140         name = "test4"
141         config = map[string]interface{}{
142                 "Image": "busybox",
143                 "Healthcheck": map[string]interface{}{
144                         "Interval": time.Second,
145                         "Timeout":  time.Second,
146                         "Retries":  int(-10),
147                 },
148         }
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)
154
155         // test invalid StartPeriod in Healthcheck: not 0 and less than 1ms
156         name = "test3"
157         config = map[string]interface{}{
158                 "Image": "busybox",
159                 "Healthcheck": map[string]interface{}{
160                         "Interval":    time.Second,
161                         "Timeout":     time.Second,
162                         "Retries":     int(1000),
163                         "StartPeriod": 100 * time.Microsecond,
164                 },
165         }
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)
171 }