github.com/jwhonce/docker@v0.6.7-0.20190327063223-da823cf3a5a3/integration-cli/docker_api_test.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "net/http" 7 "runtime" 8 "strconv" 9 "strings" 10 11 "github.com/docker/docker/api" 12 "github.com/docker/docker/api/types/versions" 13 "github.com/docker/docker/integration-cli/checker" 14 "github.com/docker/docker/internal/test/request" 15 "github.com/go-check/check" 16 ) 17 18 func (s *DockerSuite) TestAPIOptionsRoute(c *check.C) { 19 resp, _, err := request.Do("/", request.Method(http.MethodOptions)) 20 c.Assert(err, checker.IsNil) 21 c.Assert(resp.StatusCode, checker.Equals, http.StatusOK) 22 } 23 24 func (s *DockerSuite) TestAPIGetEnabledCORS(c *check.C) { 25 res, body, err := request.Get("/version") 26 c.Assert(err, checker.IsNil) 27 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 28 body.Close() 29 // TODO: @runcom incomplete tests, why old integration tests had this headers 30 // and here none of the headers below are in the response? 31 //c.Log(res.Header) 32 //c.Assert(res.Header.Get("Access-Control-Allow-Origin"), check.Equals, "*") 33 //c.Assert(res.Header.Get("Access-Control-Allow-Headers"), check.Equals, "Origin, X-Requested-With, Content-Type, Accept, X-Registry-Auth") 34 } 35 36 func (s *DockerSuite) TestAPIClientVersionOldNotSupported(c *check.C) { 37 if testEnv.OSType != runtime.GOOS { 38 c.Skip("Daemon platform doesn't match test platform") 39 } 40 if api.MinVersion == api.DefaultVersion { 41 c.Skip("API MinVersion==DefaultVersion") 42 } 43 v := strings.Split(api.MinVersion, ".") 44 vMinInt, err := strconv.Atoi(v[1]) 45 c.Assert(err, checker.IsNil) 46 vMinInt-- 47 v[1] = strconv.Itoa(vMinInt) 48 version := strings.Join(v, ".") 49 50 resp, body, err := request.Get("/v" + version + "/version") 51 c.Assert(err, checker.IsNil) 52 defer body.Close() 53 c.Assert(resp.StatusCode, checker.Equals, http.StatusBadRequest) 54 expected := fmt.Sprintf("client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", version, api.MinVersion) 55 content, err := ioutil.ReadAll(body) 56 c.Assert(err, checker.IsNil) 57 c.Assert(strings.TrimSpace(string(content)), checker.Contains, expected) 58 } 59 60 func (s *DockerSuite) TestAPIErrorJSON(c *check.C) { 61 httpResp, body, err := request.Post("/containers/create", request.JSONBody(struct{}{})) 62 c.Assert(err, checker.IsNil) 63 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 64 c.Assert(httpResp.StatusCode, checker.Equals, http.StatusInternalServerError) 65 } else { 66 c.Assert(httpResp.StatusCode, checker.Equals, http.StatusBadRequest) 67 } 68 c.Assert(httpResp.Header.Get("Content-Type"), checker.Equals, "application/json") 69 b, err := request.ReadBody(body) 70 c.Assert(err, checker.IsNil) 71 c.Assert(getErrorMessage(c, b), checker.Equals, "Config cannot be empty in order to create a container") 72 } 73 74 func (s *DockerSuite) TestAPIErrorPlainText(c *check.C) { 75 // Windows requires API 1.25 or later. This test is validating a behaviour which was present 76 // in v1.23, but changed in 1.24, hence not applicable on Windows. See apiVersionSupportsJSONErrors 77 testRequires(c, DaemonIsLinux) 78 httpResp, body, err := request.Post("/v1.23/containers/create", request.JSONBody(struct{}{})) 79 c.Assert(err, checker.IsNil) 80 if versions.LessThan(testEnv.DaemonAPIVersion(), "1.32") { 81 c.Assert(httpResp.StatusCode, checker.Equals, http.StatusInternalServerError) 82 } else { 83 c.Assert(httpResp.StatusCode, checker.Equals, http.StatusBadRequest) 84 } 85 c.Assert(httpResp.Header.Get("Content-Type"), checker.Contains, "text/plain") 86 b, err := request.ReadBody(body) 87 c.Assert(err, checker.IsNil) 88 c.Assert(strings.TrimSpace(string(b)), checker.Equals, "Config cannot be empty in order to create a container") 89 } 90 91 func (s *DockerSuite) TestAPIErrorNotFoundJSON(c *check.C) { 92 // 404 is a different code path to normal errors, so test separately 93 httpResp, body, err := request.Get("/notfound", request.JSON) 94 c.Assert(err, checker.IsNil) 95 c.Assert(httpResp.StatusCode, checker.Equals, http.StatusNotFound) 96 c.Assert(httpResp.Header.Get("Content-Type"), checker.Equals, "application/json") 97 b, err := request.ReadBody(body) 98 c.Assert(err, checker.IsNil) 99 c.Assert(getErrorMessage(c, b), checker.Equals, "page not found") 100 } 101 102 func (s *DockerSuite) TestAPIErrorNotFoundPlainText(c *check.C) { 103 httpResp, body, err := request.Get("/v1.23/notfound", request.JSON) 104 c.Assert(err, checker.IsNil) 105 c.Assert(httpResp.StatusCode, checker.Equals, http.StatusNotFound) 106 c.Assert(httpResp.Header.Get("Content-Type"), checker.Contains, "text/plain") 107 b, err := request.ReadBody(body) 108 c.Assert(err, checker.IsNil) 109 c.Assert(strings.TrimSpace(string(b)), checker.Equals, "page not found") 110 }