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