docker_api_images_test.go 2.5 KB

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