Kaynağa Gözat

add tests for 'out', remove warning

Alex Suraci 7 yıl önce
ebeveyn
işleme
2fcdab199a
6 değiştirilmiş dosya ile 142 ekleme ve 31 silme
  1. 4 3
      Dockerfile
  2. 16 16
      check_test.go
  3. 0 2
      cmd/out/main.go
  4. 4 4
      in_test.go
  5. 106 0
      out_test.go
  6. 12 6
      suite_test.go

+ 4 - 3
Dockerfile

@@ -18,9 +18,10 @@ RUN chmod +x /opt/resource/*
 FROM resource AS tests
 COPY --from=builder /tests /tests
 ADD . /docker-image-resource
-ARG PRIVATE_REPO
-ARG PRIVATE_REPO_USERNAME
-ARG PRIVATE_REPO_PASSWORD
+ARG DOCKER_USERNAME
+ARG DOCKER_PASSWORD
+ARG DOCKER_PRIVATE_REPO
+ARG DOCKER_PUSH_REPO
 RUN set -e; for test in /tests/*.test; do \
 		$test -ginkgo.v; \
 	done

+ 16 - 16
check_test.go

@@ -57,14 +57,14 @@ var _ = Describe("Check", func() {
 		Context("against a private repo with credentials", func() {
 			BeforeEach(func() {
 				req.Source = resource.Source{
-					Repository: privateRepo,
+					Repository: dockerPrivateRepo,
 					Tag:        "latest",
 
-					Username: privateRepoUsername,
-					Password: privateRepoPassword,
+					Username: dockerUsername,
+					Password: dockerPassword,
 				}
 
-				checkPrivateRepoConfigured()
+				checkDockerUserConfigured()
 			})
 
 			It("returns the current digest", func() {
@@ -96,14 +96,14 @@ var _ = Describe("Check", func() {
 		Context("against a private repo with credentials", func() {
 			BeforeEach(func() {
 				req.Source = resource.Source{
-					Repository: privateRepo,
+					Repository: dockerPrivateRepo,
 					Tag:        "latest",
 
-					Username: privateRepoUsername,
-					Password: privateRepoPassword,
+					Username: dockerUsername,
+					Password: dockerPassword,
 				}
 
-				checkPrivateRepoConfigured()
+				checkDockerUserConfigured()
 
 				req.Version = &resource.Version{
 					Digest: PRIVATE_LATEST_STATIC_DIGEST,
@@ -141,14 +141,14 @@ var _ = Describe("Check", func() {
 		Context("against a private repo with credentials", func() {
 			BeforeEach(func() {
 				req.Source = resource.Source{
-					Repository: privateRepo,
+					Repository: dockerPrivateRepo,
 					Tag:        "latest",
 
-					Username: privateRepoUsername,
-					Password: privateRepoPassword,
+					Username: dockerUsername,
+					Password: dockerPassword,
 				}
 
-				checkPrivateRepoConfigured()
+				checkDockerUserConfigured()
 
 				req.Version = &resource.Version{
 					// this was previously pushed to the 'latest' tag
@@ -187,14 +187,14 @@ var _ = Describe("Check", func() {
 		Context("against a private repo with credentials", func() {
 			BeforeEach(func() {
 				req.Source = resource.Source{
-					Repository: privateRepo,
+					Repository: dockerPrivateRepo,
 					Tag:        "latest",
 
-					Username: privateRepoUsername,
-					Password: privateRepoPassword,
+					Username: dockerUsername,
+					Password: dockerPassword,
 				}
 
-				checkPrivateRepoConfigured()
+				checkDockerUserConfigured()
 			})
 
 			It("returns the current digest", func() {

+ 0 - 2
cmd/out/main.go

@@ -56,8 +56,6 @@ func main() {
 
 	src := os.Args[1]
 
-	logrus.Warnln("'put' is experimental, untested, and subject to change!")
-
 	ref := req.Source.Name()
 
 	n, err := name.ParseReference(ref, name.WeakValidation)

+ 4 - 4
in_test.go

@@ -187,14 +187,14 @@ var _ = Describe("In", func() {
 	Describe("fetching from a private repository with credentials", func() {
 		BeforeEach(func() {
 			req.Source = resource.Source{
-				Repository: privateRepo,
+				Repository: dockerPrivateRepo,
 				Tag:        "latest",
 
-				Username: privateRepoUsername,
-				Password: privateRepoPassword,
+				Username: dockerUsername,
+				Password: dockerPassword,
 			}
 
-			checkPrivateRepoConfigured()
+			checkDockerUserConfigured()
 
 			req.Version = resource.Version{
 				Digest: PRIVATE_LATEST_STATIC_DIGEST,

+ 106 - 0
out_test.go

@@ -0,0 +1,106 @@
+package resource_test
+
+import (
+	"bytes"
+	"encoding/json"
+	"io/ioutil"
+	"os"
+	"os/exec"
+	"path/filepath"
+
+	"github.com/google/go-containerregistry/pkg/name"
+	"github.com/google/go-containerregistry/pkg/v1"
+	"github.com/google/go-containerregistry/pkg/v1/random"
+	"github.com/google/go-containerregistry/pkg/v1/remote"
+	"github.com/google/go-containerregistry/pkg/v1/tarball"
+	. "github.com/onsi/ginkgo"
+	. "github.com/onsi/gomega"
+
+	"github.com/concourse/registry-image-resource"
+)
+
+var _ = Describe("Out", func() {
+	var srcDir string
+
+	var req struct {
+		Source resource.Source
+		Params resource.PutParams
+	}
+
+	var res struct {
+		Version  resource.Version
+		Metadata []resource.MetadataField
+	}
+
+	BeforeEach(func() {
+		var err error
+		srcDir, err = ioutil.TempDir("", "docker-image-out-dir")
+		Expect(err).ToNot(HaveOccurred())
+	})
+
+	AfterEach(func() {
+		Expect(os.RemoveAll(srcDir)).To(Succeed())
+	})
+
+	JustBeforeEach(func() {
+		cmd := exec.Command(bins.Out, srcDir)
+
+		payload, err := json.Marshal(req)
+		Expect(err).ToNot(HaveOccurred())
+
+		outBuf := new(bytes.Buffer)
+
+		cmd.Stdin = bytes.NewBuffer(payload)
+		cmd.Stdout = outBuf
+		cmd.Stderr = GinkgoWriter
+
+		err = cmd.Run()
+		Expect(err).ToNot(HaveOccurred())
+
+		err = json.Unmarshal(outBuf.Bytes(), &res)
+		Expect(err).ToNot(HaveOccurred())
+	})
+
+	Describe("pushing an OCI image tarball", func() {
+		var randomImage v1.Image
+
+		BeforeEach(func() {
+			req.Source = resource.Source{
+				Repository: dockerPushRepo,
+				Tag:        "latest",
+
+				Username: dockerUsername,
+				Password: dockerPassword,
+			}
+
+			checkDockerUserConfigured()
+
+			tag, err := name.NewTag(req.Source.Name(), name.WeakValidation)
+			Expect(err).ToNot(HaveOccurred())
+
+			randomImage, err = random.Image(1024, 1)
+			Expect(err).ToNot(HaveOccurred())
+
+			err = tarball.WriteToFile(filepath.Join(srcDir, "image.tar"), tag, randomImage)
+			Expect(err).ToNot(HaveOccurred())
+
+			req.Params.Image = "image.tar"
+		})
+
+		It("works", func() {
+			name, err := name.ParseReference(req.Source.Name(), name.WeakValidation)
+			Expect(err).ToNot(HaveOccurred())
+
+			image, err := remote.Image(name)
+			Expect(err).ToNot(HaveOccurred())
+
+			pushedDigest, err := image.Digest()
+			Expect(err).ToNot(HaveOccurred())
+
+			randomDigest, err := randomImage.Digest()
+			Expect(err).ToNot(HaveOccurred())
+
+			Expect(pushedDigest).To(Equal(randomDigest))
+		})
+	})
+})

+ 12 - 6
suite_test.go

@@ -28,13 +28,19 @@ const LATEST_STATIC_DIGEST = "sha256:64a6988c58cbdd634198f56452e8f8945e5b54a4bbc
 const PRIVATE_OLDER_STATIC_DIGEST = "sha256:a5e6442b86fd5f555f528deea32326e9709851f6b18d490d6dfb290c22d6ff52"
 const PRIVATE_LATEST_STATIC_DIGEST = "sha256:96c8ddb11d01b236fbf063e5a468d17f4c44ccffa19470471162dbd5bdc922a4"
 
-var privateRepo = os.Getenv("PRIVATE_REPO")
-var privateRepoUsername = os.Getenv("PRIVATE_REPO_USERNAME")
-var privateRepoPassword = os.Getenv("PRIVATE_REPO_PASSWORD")
+// a Docker Hub account used for testing interactions w/ credentials
+var dockerUsername = os.Getenv("DOCKER_USERNAME")
+var dockerPassword = os.Getenv("DOCKER_PASSWORD")
 
-func checkPrivateRepoConfigured() {
-	if privateRepo == "" || privateRepoUsername == "" || privateRepoPassword == "" {
-		Skip("must specify $PRIVATE_REPO, $PRIVATE_REPO_USERNAME, and $PRIVATE_REPO_PASSWORD")
+// a pre-configured, static private repo used for testing 'check' and 'in'
+var dockerPrivateRepo = os.Getenv("DOCKER_PRIVATE_REPO")
+
+// a repo to which random images will be pushed when testing 'out'
+var dockerPushRepo = os.Getenv("DOCKER_PUSH_REPO")
+
+func checkDockerUserConfigured() {
+	if dockerUsername == "" || dockerPassword == "" || dockerPrivateRepo == "" || dockerPushRepo == "" {
+		Skip("must specify $DOCKER_USERNAME, $DOCKER_PASSWORD, $DOCKER_PRIVATE_REPO, and $DOCKER_PUSH_REPO")
 	}
 }