github.com/guilhermebr/docker@v1.4.2-0.20150428121140-67da055cebca/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) TestLegacyImages(c *check.C) { 15 status, body, err := sockRequest("GET", "/v1.6/images/json", nil) 16 c.Assert(status, check.Equals, http.StatusOK) 17 c.Assert(err, check.IsNil) 18 19 images := []types.LegacyImage{} 20 if err = json.Unmarshal(body, &images); err != nil { 21 c.Fatalf("Error on unmarshal: %s", err) 22 } 23 24 if len(images) == 0 || images[0].Tag == "" || images[0].Repository == "" { 25 c.Fatalf("Bad data: %q", images) 26 } 27 } 28 29 func (s *DockerSuite) TestApiImagesFilter(c *check.C) { 30 name := "utest:tag1" 31 name2 := "utest/docker:tag2" 32 name3 := "utest:5000/docker:tag3" 33 for _, n := range []string{name, name2, name3} { 34 if out, err := exec.Command(dockerBinary, "tag", "busybox", n).CombinedOutput(); err != nil { 35 c.Fatal(err, out) 36 } 37 } 38 type image struct{ RepoTags []string } 39 getImages := func(filter string) []image { 40 v := url.Values{} 41 v.Set("filter", filter) 42 status, b, err := sockRequest("GET", "/images/json?"+v.Encode(), nil) 43 c.Assert(status, check.Equals, http.StatusOK) 44 c.Assert(err, check.IsNil) 45 46 var images []image 47 if err := json.Unmarshal(b, &images); err != nil { 48 c.Fatal(err) 49 } 50 51 return images 52 } 53 54 errMsg := "incorrect number of matches returned" 55 if images := getImages("utest*/*"); len(images[0].RepoTags) != 2 { 56 c.Fatal(errMsg) 57 } 58 if images := getImages("utest"); len(images[0].RepoTags) != 1 { 59 c.Fatal(errMsg) 60 } 61 if images := getImages("utest*"); len(images[0].RepoTags) != 1 { 62 c.Fatal(errMsg) 63 } 64 if images := getImages("*5000*/*"); len(images[0].RepoTags) != 1 { 65 c.Fatal(errMsg) 66 } 67 } 68 69 func (s *DockerSuite) TestApiImagesSaveAndLoad(c *check.C) { 70 testRequires(c, Network) 71 out, err := buildImage("saveandload", "FROM hello-world\nENV FOO bar", false) 72 if err != nil { 73 c.Fatal(err) 74 } 75 id := strings.TrimSpace(out) 76 77 status, body, err := sockRequestRaw("GET", "/images/"+id+"/get", nil, "") 78 c.Assert(status, check.Equals, http.StatusOK) 79 c.Assert(err, check.IsNil) 80 81 defer body.Close() 82 83 if out, err := exec.Command(dockerBinary, "rmi", id).CombinedOutput(); err != nil { 84 c.Fatal(err, out) 85 } 86 87 status, loadBody, err := sockRequestRaw("POST", "/images/load", body, "application/x-tar") 88 c.Assert(status, check.Equals, http.StatusOK) 89 c.Assert(err, check.IsNil) 90 91 defer loadBody.Close() 92 93 inspectOut, err := exec.Command(dockerBinary, "inspect", "--format='{{ .Id }}'", id).CombinedOutput() 94 if err != nil { 95 c.Fatal(err, inspectOut) 96 } 97 if strings.TrimSpace(string(inspectOut)) != id { 98 c.Fatal("load did not work properly") 99 } 100 }