github.com/skanehira/moby@v17.12.1-ce-rc2+incompatible/integration-cli/docker_api_images_test.go (about) 1 package main 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "strings" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/api/types/filters" 10 "github.com/docker/docker/client" 11 "github.com/docker/docker/integration-cli/checker" 12 "github.com/docker/docker/integration-cli/cli" 13 "github.com/docker/docker/integration-cli/cli/build" 14 "github.com/docker/docker/integration-cli/request" 15 "github.com/go-check/check" 16 "golang.org/x/net/context" 17 ) 18 19 func (s *DockerSuite) TestAPIImagesFilter(c *check.C) { 20 cli, err := client.NewEnvClient() 21 c.Assert(err, checker.IsNil) 22 defer cli.Close() 23 24 name := "utest:tag1" 25 name2 := "utest/docker:tag2" 26 name3 := "utest:5000/docker:tag3" 27 for _, n := range []string{name, name2, name3} { 28 dockerCmd(c, "tag", "busybox", n) 29 } 30 getImages := func(filter string) []types.ImageSummary { 31 filters := filters.NewArgs() 32 filters.Add("reference", filter) 33 options := types.ImageListOptions{ 34 All: false, 35 Filters: filters, 36 } 37 images, err := cli.ImageList(context.Background(), options) 38 c.Assert(err, checker.IsNil) 39 40 return images 41 } 42 43 //incorrect number of matches returned 44 images := getImages("utest*/*") 45 c.Assert(images[0].RepoTags, checker.HasLen, 2) 46 47 images = getImages("utest") 48 c.Assert(images[0].RepoTags, checker.HasLen, 1) 49 50 images = getImages("utest*") 51 c.Assert(images[0].RepoTags, checker.HasLen, 1) 52 53 images = getImages("*5000*/*") 54 c.Assert(images[0].RepoTags, checker.HasLen, 1) 55 } 56 57 func (s *DockerSuite) TestAPIImagesSaveAndLoad(c *check.C) { 58 testRequires(c, Network) 59 buildImageSuccessfully(c, "saveandload", build.WithDockerfile("FROM busybox\nENV FOO bar")) 60 id := getIDByName(c, "saveandload") 61 62 res, body, err := request.Get("/images/" + id + "/get") 63 c.Assert(err, checker.IsNil) 64 defer body.Close() 65 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 66 67 dockerCmd(c, "rmi", id) 68 69 res, loadBody, err := request.Post("/images/load", request.RawContent(body), request.ContentType("application/x-tar")) 70 c.Assert(err, checker.IsNil) 71 defer loadBody.Close() 72 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 73 74 inspectOut := cli.InspectCmd(c, id, cli.Format(".Id")).Combined() 75 c.Assert(strings.TrimSpace(string(inspectOut)), checker.Equals, id, check.Commentf("load did not work properly")) 76 } 77 78 func (s *DockerSuite) TestAPIImagesDelete(c *check.C) { 79 cli, err := client.NewEnvClient() 80 c.Assert(err, checker.IsNil) 81 defer cli.Close() 82 83 if testEnv.DaemonPlatform() != "windows" { 84 testRequires(c, Network) 85 } 86 name := "test-api-images-delete" 87 buildImageSuccessfully(c, name, build.WithDockerfile("FROM busybox\nENV FOO bar")) 88 id := getIDByName(c, name) 89 90 dockerCmd(c, "tag", name, "test:tag1") 91 92 _, err = cli.ImageRemove(context.Background(), id, types.ImageRemoveOptions{}) 93 c.Assert(err.Error(), checker.Contains, "unable to delete") 94 95 _, err = cli.ImageRemove(context.Background(), "test:noexist", types.ImageRemoveOptions{}) 96 c.Assert(err.Error(), checker.Contains, "No such image") 97 98 _, err = cli.ImageRemove(context.Background(), "test:tag1", types.ImageRemoveOptions{}) 99 c.Assert(err, checker.IsNil) 100 } 101 102 func (s *DockerSuite) TestAPIImagesHistory(c *check.C) { 103 cli, err := client.NewEnvClient() 104 c.Assert(err, checker.IsNil) 105 defer cli.Close() 106 107 if testEnv.DaemonPlatform() != "windows" { 108 testRequires(c, Network) 109 } 110 name := "test-api-images-history" 111 buildImageSuccessfully(c, name, build.WithDockerfile("FROM busybox\nENV FOO bar")) 112 id := getIDByName(c, name) 113 114 historydata, err := cli.ImageHistory(context.Background(), id) 115 c.Assert(err, checker.IsNil) 116 117 c.Assert(historydata, checker.Not(checker.HasLen), 0) 118 c.Assert(historydata[0].Tags[0], checker.Equals, "test-api-images-history:latest") 119 } 120 121 func (s *DockerSuite) TestAPIImagesImportBadSrc(c *check.C) { 122 testRequires(c, Network, SameHostDaemon) 123 124 server := httptest.NewServer(http.NewServeMux()) 125 defer server.Close() 126 127 tt := []struct { 128 statusExp int 129 fromSrc string 130 }{ 131 {http.StatusNotFound, server.URL + "/nofile.tar"}, 132 {http.StatusNotFound, strings.TrimPrefix(server.URL, "http://") + "/nofile.tar"}, 133 {http.StatusNotFound, strings.TrimPrefix(server.URL, "http://") + "%2Fdata%2Ffile.tar"}, 134 {http.StatusInternalServerError, "%2Fdata%2Ffile.tar"}, 135 } 136 137 for _, te := range tt { 138 res, _, err := request.Post(strings.Join([]string{"/images/create?fromSrc=", te.fromSrc}, ""), request.JSON) 139 c.Assert(err, check.IsNil) 140 c.Assert(res.StatusCode, checker.Equals, te.statusExp) 141 c.Assert(res.Header.Get("Content-Type"), checker.Equals, "application/json") 142 } 143 144 } 145 146 // #14846 147 func (s *DockerSuite) TestAPIImagesSearchJSONContentType(c *check.C) { 148 testRequires(c, Network) 149 150 res, b, err := request.Get("/images/search?term=test", request.JSON) 151 c.Assert(err, check.IsNil) 152 b.Close() 153 c.Assert(res.StatusCode, checker.Equals, http.StatusOK) 154 c.Assert(res.Header.Get("Content-Type"), checker.Equals, "application/json") 155 } 156 157 // Test case for 30027: image size reported as -1 in v1.12 client against v1.13 daemon. 158 // This test checks to make sure both v1.12 and v1.13 client against v1.13 daemon get correct `Size` after the fix. 159 func (s *DockerSuite) TestAPIImagesSizeCompatibility(c *check.C) { 160 cli, err := client.NewEnvClient() 161 c.Assert(err, checker.IsNil) 162 defer cli.Close() 163 164 images, err := cli.ImageList(context.Background(), types.ImageListOptions{}) 165 c.Assert(err, checker.IsNil) 166 c.Assert(len(images), checker.Not(checker.Equals), 0) 167 for _, image := range images { 168 c.Assert(image.Size, checker.Not(checker.Equals), int64(-1)) 169 } 170 171 type v124Image struct { 172 ID string `json:"Id"` 173 ParentID string `json:"ParentId"` 174 RepoTags []string 175 RepoDigests []string 176 Created int64 177 Size int64 178 VirtualSize int64 179 Labels map[string]string 180 } 181 182 cli, err = request.NewEnvClientWithVersion("v1.24") 183 c.Assert(err, checker.IsNil) 184 defer cli.Close() 185 186 v124Images, err := cli.ImageList(context.Background(), types.ImageListOptions{}) 187 c.Assert(err, checker.IsNil) 188 c.Assert(len(v124Images), checker.Not(checker.Equals), 0) 189 for _, image := range v124Images { 190 c.Assert(image.Size, checker.Not(checker.Equals), int64(-1)) 191 } 192 }