github.com/gunjan5/docker@v1.8.2/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/go-check/check" 11 ) 12 13 func (s *DockerSuite) TestApiImagesFilter(c *check.C) { 14 name := "utest:tag1" 15 name2 := "utest/docker:tag2" 16 name3 := "utest:5000/docker:tag3" 17 for _, n := range []string{name, name2, name3} { 18 dockerCmd(c, "tag", "busybox", n) 19 } 20 type image types.Image 21 getImages := func(filter string) []image { 22 v := url.Values{} 23 v.Set("filter", filter) 24 status, b, err := sockRequest("GET", "/images/json?"+v.Encode(), nil) 25 c.Assert(err, check.IsNil) 26 c.Assert(status, check.Equals, http.StatusOK) 27 28 var images []image 29 if err := json.Unmarshal(b, &images); err != nil { 30 c.Fatal(err) 31 } 32 33 return images 34 } 35 36 errMsg := "incorrect number of matches returned" 37 if images := getImages("utest*/*"); len(images[0].RepoTags) != 2 { 38 c.Fatal(errMsg) 39 } 40 if images := getImages("utest"); len(images[0].RepoTags) != 1 { 41 c.Fatal(errMsg) 42 } 43 if images := getImages("utest*"); len(images[0].RepoTags) != 1 { 44 c.Fatal(errMsg) 45 } 46 if images := getImages("*5000*/*"); len(images[0].RepoTags) != 1 { 47 c.Fatal(errMsg) 48 } 49 } 50 51 func (s *DockerSuite) TestApiImagesSaveAndLoad(c *check.C) { 52 testRequires(c, Network) 53 out, err := buildImage("saveandload", "FROM hello-world\nENV FOO bar", false) 54 if err != nil { 55 c.Fatal(err) 56 } 57 id := strings.TrimSpace(out) 58 59 res, body, err := sockRequestRaw("GET", "/images/"+id+"/get", nil, "") 60 c.Assert(err, check.IsNil) 61 c.Assert(res.StatusCode, check.Equals, http.StatusOK) 62 63 defer body.Close() 64 65 dockerCmd(c, "rmi", id) 66 67 res, loadBody, err := sockRequestRaw("POST", "/images/load", body, "application/x-tar") 68 c.Assert(err, check.IsNil) 69 c.Assert(res.StatusCode, check.Equals, http.StatusOK) 70 71 defer loadBody.Close() 72 73 inspectOut, _ := dockerCmd(c, "inspect", "--format='{{ .Id }}'", id) 74 if strings.TrimSpace(string(inspectOut)) != id { 75 c.Fatal("load did not work properly") 76 } 77 } 78 79 func (s *DockerSuite) TestApiImagesDelete(c *check.C) { 80 testRequires(c, Network) 81 name := "test-api-images-delete" 82 out, err := buildImage(name, "FROM hello-world\nENV FOO bar", false) 83 if err != nil { 84 c.Fatal(err) 85 } 86 id := strings.TrimSpace(out) 87 88 dockerCmd(c, "tag", name, "test:tag1") 89 90 status, _, err := sockRequest("DELETE", "/images/"+id, nil) 91 c.Assert(err, check.IsNil) 92 c.Assert(status, check.Equals, http.StatusConflict) 93 94 status, _, err = sockRequest("DELETE", "/images/test:noexist", nil) 95 c.Assert(err, check.IsNil) 96 c.Assert(status, check.Equals, http.StatusNotFound) //Status Codes:404 – no such image 97 98 status, _, err = sockRequest("DELETE", "/images/test:tag1", nil) 99 c.Assert(err, check.IsNil) 100 c.Assert(status, check.Equals, http.StatusOK) 101 } 102 103 func (s *DockerSuite) TestApiImagesHistory(c *check.C) { 104 testRequires(c, Network) 105 name := "test-api-images-history" 106 out, err := buildImage(name, "FROM hello-world\nENV FOO bar", false) 107 c.Assert(err, check.IsNil) 108 109 id := strings.TrimSpace(out) 110 111 status, body, err := sockRequest("GET", "/images/"+id+"/history", nil) 112 c.Assert(err, check.IsNil) 113 c.Assert(status, check.Equals, http.StatusOK) 114 115 var historydata []types.ImageHistory 116 if err = json.Unmarshal(body, &historydata); err != nil { 117 c.Fatalf("Error on unmarshal: %s", err) 118 } 119 120 c.Assert(len(historydata), check.Not(check.Equals), 0) 121 c.Assert(historydata[0].Tags[0], check.Equals, "test-api-images-history:latest") 122 } 123 124 // #14846 125 func (s *DockerSuite) TestApiImagesSearchJSONContentType(c *check.C) { 126 testRequires(c, Network) 127 128 res, b, err := sockRequestRaw("GET", "/images/search?term=test", nil, "application/json") 129 c.Assert(err, check.IsNil) 130 b.Close() 131 c.Assert(res.StatusCode, check.Equals, http.StatusOK) 132 c.Assert(res.Header.Get("Content-Type"), check.Equals, "application/json") 133 }