github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/integration-cli/docker_api_images_test.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "net/http" 6 "net/url" 7 "strings" 8 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/image" 11 "github.com/docker/docker/integration-cli/checker" 12 "github.com/docker/docker/integration-cli/request" 13 "github.com/go-check/check" 14 ) 15 16 func (s *DockerSuite) TestAPIImagesFilter(c *check.C) { 17 name := "utest:tag1" 18 name2 := "utest/docker:tag2" 19 name3 := "utest:5000/docker:tag3" 20 for _, n := range []string{name, name2, name3} { 21 dockerCmd(c, "tag", "busybox", n) 22 } 23 type image types.ImageSummary 24 getImages := func(filter string) []image { 25 v := url.Values{} 26 v.Set("filter", filter) 27 status, b, err := request.SockRequest("GET", "/images/json?"+v.Encode(), nil, daemonHost()) 28 c.Assert(err, checker.IsNil) 29 c.Assert(status, checker.Equals, http.StatusOK) 30 31 var images []image 32 err = json.Unmarshal(b, &images) 33 c.Assert(err, checker.IsNil) 34 35 return images 36 } 37 38 //incorrect number of matches returned 39 images := getImages("utest*/*") 40 c.Assert(images[0].RepoTags, checker.HasLen, 2) 41 42 images = getImages("utest") 43 c.Assert(images[0].RepoTags, checker.HasLen, 1) 44 45 images = getImages("utest*") 46 c.Assert(images[0].RepoTags, checker.HasLen, 1) 47 48 images = getImages("*5000*/*") 49 c.Assert(images[0].RepoTags, checker.HasLen, 1) 50 } 51 52 func (s *DockerSuite) TestAPIImagesSaveAndLoad(c *check.C) { 53 // TODO Windows to Windows CI: Investigate further why this test fails. 54 testRequires(c, Network) 55 testRequires(c, DaemonIsLinux) 56 buildImageSuccessfully(c, "saveandload", withDockerfile("FROM busybox\nENV FOO bar")) 57 id := getIDByName(c, "saveandload") 58 59 res, body, err := request.SockRequestRaw("GET", "/images/"+id+"/get", nil, "", daemonHost()) 60 c.Assert(err, checker.IsNil) 61 defer body.Close() 62 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 63 64 dockerCmd(c, "rmi", id) 65 66 res, loadBody, err := request.SockRequestRaw("POST", "/images/load", body, "application/x-tar", daemonHost()) 67 c.Assert(err, checker.IsNil) 68 defer loadBody.Close() 69 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 70 71 inspectOut := inspectField(c, id, "Id") 72 c.Assert(strings.TrimSpace(string(inspectOut)), checker.Equals, id, check.Commentf("load did not work properly")) 73 } 74 75 func (s *DockerSuite) TestAPIImagesDelete(c *check.C) { 76 if testEnv.DaemonPlatform() != "windows" { 77 testRequires(c, Network) 78 } 79 name := "test-api-images-delete" 80 buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENV FOO bar")) 81 id := getIDByName(c, name) 82 83 dockerCmd(c, "tag", name, "test:tag1") 84 85 status, _, err := request.SockRequest("DELETE", "/images/"+id, nil, daemonHost()) 86 c.Assert(err, checker.IsNil) 87 c.Assert(status, checker.Equals, http.StatusConflict) 88 89 status, _, err = request.SockRequest("DELETE", "/images/test:noexist", nil, daemonHost()) 90 c.Assert(err, checker.IsNil) 91 c.Assert(status, checker.Equals, http.StatusNotFound) //Status Codes:404 – no such image 92 93 status, _, err = request.SockRequest("DELETE", "/images/test:tag1", nil, daemonHost()) 94 c.Assert(err, checker.IsNil) 95 c.Assert(status, checker.Equals, http.StatusOK) 96 } 97 98 func (s *DockerSuite) TestAPIImagesHistory(c *check.C) { 99 if testEnv.DaemonPlatform() != "windows" { 100 testRequires(c, Network) 101 } 102 name := "test-api-images-history" 103 buildImageSuccessfully(c, name, withDockerfile("FROM busybox\nENV FOO bar")) 104 id := getIDByName(c, name) 105 106 status, body, err := request.SockRequest("GET", "/images/"+id+"/history", nil, daemonHost()) 107 c.Assert(err, checker.IsNil) 108 c.Assert(status, checker.Equals, http.StatusOK) 109 110 var historydata []image.HistoryResponseItem 111 err = json.Unmarshal(body, &historydata) 112 c.Assert(err, checker.IsNil, check.Commentf("Error on unmarshal")) 113 114 c.Assert(historydata, checker.Not(checker.HasLen), 0) 115 c.Assert(historydata[0].Tags[0], checker.Equals, "test-api-images-history:latest") 116 } 117 118 // #14846 119 func (s *DockerSuite) TestAPIImagesSearchJSONContentType(c *check.C) { 120 testRequires(c, Network) 121 122 res, b, err := request.SockRequestRaw("GET", "/images/search?term=test", nil, "application/json", daemonHost()) 123 c.Assert(err, check.IsNil) 124 b.Close() 125 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 126 c.Assert(res.Header.Get("Content-Type"), checker.Equals, "application/json") 127 } 128 129 // Test case for 30027: image size reported as -1 in v1.12 client against v1.13 daemon. 130 // This test checks to make sure both v1.12 and v1.13 client against v1.13 daemon get correct `Size` after the fix. 131 func (s *DockerSuite) TestAPIImagesSizeCompatibility(c *check.C) { 132 status, b, err := request.SockRequest("GET", "/images/json", nil, daemonHost()) 133 c.Assert(err, checker.IsNil) 134 c.Assert(status, checker.Equals, http.StatusOK) 135 var images []types.ImageSummary 136 err = json.Unmarshal(b, &images) 137 c.Assert(err, checker.IsNil) 138 c.Assert(len(images), checker.Not(checker.Equals), 0) 139 for _, image := range images { 140 c.Assert(image.Size, checker.Not(checker.Equals), int64(-1)) 141 } 142 143 type v124Image struct { 144 ID string `json:"Id"` 145 ParentID string `json:"ParentId"` 146 RepoTags []string 147 RepoDigests []string 148 Created int64 149 Size int64 150 VirtualSize int64 151 Labels map[string]string 152 } 153 status, b, err = request.SockRequest("GET", "/v1.24/images/json", nil, daemonHost()) 154 c.Assert(err, checker.IsNil) 155 c.Assert(status, checker.Equals, http.StatusOK) 156 var v124Images []v124Image 157 err = json.Unmarshal(b, &v124Images) 158 c.Assert(err, checker.IsNil) 159 c.Assert(len(v124Images), checker.Not(checker.Equals), 0) 160 for _, image := range v124Images { 161 c.Assert(image.Size, checker.Not(checker.Equals), int64(-1)) 162 } 163 }