out_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. package resource_test
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io/ioutil"
  6. "os"
  7. "os/exec"
  8. "path/filepath"
  9. "github.com/google/go-containerregistry/pkg/name"
  10. "github.com/google/go-containerregistry/pkg/v1"
  11. "github.com/google/go-containerregistry/pkg/v1/random"
  12. "github.com/google/go-containerregistry/pkg/v1/remote"
  13. "github.com/google/go-containerregistry/pkg/v1/tarball"
  14. . "github.com/onsi/ginkgo"
  15. . "github.com/onsi/gomega"
  16. "github.com/concourse/registry-image-resource"
  17. )
  18. var _ = Describe("Out", func() {
  19. var srcDir string
  20. var req struct {
  21. Source resource.Source
  22. Params resource.PutParams
  23. }
  24. var res struct {
  25. Version resource.Version
  26. Metadata []resource.MetadataField
  27. }
  28. BeforeEach(func() {
  29. var err error
  30. srcDir, err = ioutil.TempDir("", "docker-image-out-dir")
  31. Expect(err).ToNot(HaveOccurred())
  32. })
  33. AfterEach(func() {
  34. Expect(os.RemoveAll(srcDir)).To(Succeed())
  35. })
  36. JustBeforeEach(func() {
  37. cmd := exec.Command(bins.Out, srcDir)
  38. payload, err := json.Marshal(req)
  39. Expect(err).ToNot(HaveOccurred())
  40. outBuf := new(bytes.Buffer)
  41. cmd.Stdin = bytes.NewBuffer(payload)
  42. cmd.Stdout = outBuf
  43. cmd.Stderr = GinkgoWriter
  44. err = cmd.Run()
  45. Expect(err).ToNot(HaveOccurred())
  46. err = json.Unmarshal(outBuf.Bytes(), &res)
  47. Expect(err).ToNot(HaveOccurred())
  48. })
  49. Describe("pushing an OCI image tarball", func() {
  50. var randomImage v1.Image
  51. BeforeEach(func() {
  52. req.Source = resource.Source{
  53. Repository: dockerPushRepo,
  54. Tag: "latest",
  55. Username: dockerUsername,
  56. Password: dockerPassword,
  57. }
  58. checkDockerUserConfigured()
  59. tag, err := name.NewTag(req.Source.Name(), name.WeakValidation)
  60. Expect(err).ToNot(HaveOccurred())
  61. randomImage, err = random.Image(1024, 1)
  62. Expect(err).ToNot(HaveOccurred())
  63. err = tarball.WriteToFile(filepath.Join(srcDir, "image.tar"), tag, randomImage)
  64. Expect(err).ToNot(HaveOccurred())
  65. req.Params.Image = "image.tar"
  66. })
  67. It("works", func() {
  68. name, err := name.ParseReference(req.Source.Name(), name.WeakValidation)
  69. Expect(err).ToNot(HaveOccurred())
  70. image, err := remote.Image(name)
  71. Expect(err).ToNot(HaveOccurred())
  72. pushedDigest, err := image.Digest()
  73. Expect(err).ToNot(HaveOccurred())
  74. randomDigest, err := randomImage.Digest()
  75. Expect(err).ToNot(HaveOccurred())
  76. Expect(pushedDigest).To(Equal(randomDigest))
  77. })
  78. })
  79. })