github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/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/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 }