| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package resource_test
- import (
- "encoding/json"
- "io/ioutil"
- "os"
- "testing"
- "github.com/google/go-containerregistry/pkg/name"
- "github.com/google/go-containerregistry/pkg/v1"
- "github.com/google/go-containerregistry/pkg/v1/remote"
- . "github.com/onsi/ginkgo"
- . "github.com/onsi/gomega"
- "github.com/onsi/gomega/gexec"
- )
- var bins struct {
- In string `json:"in"`
- Out string `json:"out"`
- Check string `json:"check"`
- }
- // see testdata/static/Dockerfile
- const OLDER_STATIC_DIGEST = "sha256:031567a617423a84ad68b62267c30693185bd2b92c2668732efc8c70b036bd3a"
- const LATEST_STATIC_DIGEST = "sha256:64a6988c58cbdd634198f56452e8f8945e5b54a4bbca4bff7e960e1c830671ff"
- // same Dockerfile, but pushed again (twice; old + latest) to a private repo
- const PRIVATE_OLDER_STATIC_DIGEST = "sha256:a5e6442b86fd5f555f528deea32326e9709851f6b18d490d6dfb290c22d6ff52"
- const PRIVATE_LATEST_STATIC_DIGEST = "sha256:96c8ddb11d01b236fbf063e5a468d17f4c44ccffa19470471162dbd5bdc922a4"
- // a Docker Hub account used for testing interactions w/ credentials
- var dockerUsername = os.Getenv("DOCKER_USERNAME")
- var dockerPassword = os.Getenv("DOCKER_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")
- }
- }
- var _ = SynchronizedBeforeSuite(func() []byte {
- var err error
- b := bins
- if _, err := os.Stat("/opt/resource/in"); err == nil {
- b.In = "/opt/resource/in"
- } else {
- b.In, err = gexec.Build("github.com/concourse/registry-image-resource/cmd/in")
- Expect(err).ToNot(HaveOccurred())
- }
- if _, err := os.Stat("/opt/resource/out"); err == nil {
- b.Out = "/opt/resource/out"
- } else {
- b.Out, err = gexec.Build("github.com/concourse/registry-image-resource/cmd/out")
- Expect(err).ToNot(HaveOccurred())
- }
- if _, err := os.Stat("/opt/resource/check"); err == nil {
- b.Check = "/opt/resource/check"
- } else {
- b.Check, err = gexec.Build("github.com/concourse/registry-image-resource/cmd/check")
- Expect(err).ToNot(HaveOccurred())
- }
- j, err := json.Marshal(b)
- Expect(err).ToNot(HaveOccurred())
- return j
- }, func(bp []byte) {
- err := json.Unmarshal(bp, &bins)
- Expect(err).ToNot(HaveOccurred())
- })
- var _ = SynchronizedAfterSuite(func() {
- }, func() {
- gexec.CleanupBuildArtifacts()
- })
- func TestRegistryImageResource(t *testing.T) {
- RegisterFailHandler(Fail)
- RunSpecs(t, "RegistryImageResource Suite")
- }
- func latestDigest(ref string) string {
- n, err := name.ParseReference(ref, name.WeakValidation)
- Expect(err).ToNot(HaveOccurred())
- image, err := remote.Image(n)
- Expect(err).ToNot(HaveOccurred())
- digest, err := image.Digest()
- Expect(err).ToNot(HaveOccurred())
- return digest.String()
- }
- func latestManifest(ref string) (string, *v1.Manifest) {
- n, err := name.ParseReference(ref, name.WeakValidation)
- Expect(err).ToNot(HaveOccurred())
- image, err := remote.Image(n)
- Expect(err).ToNot(HaveOccurred())
- manifest, err := image.Manifest()
- Expect(err).ToNot(HaveOccurred())
- digest, err := image.Digest()
- Expect(err).ToNot(HaveOccurred())
- return digest.String(), manifest
- }
- func cat(path string) string {
- bytes, err := ioutil.ReadFile(path)
- Expect(err).ToNot(HaveOccurred())
- return string(bytes)
- }
|