suite_test.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package resource_test
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "os"
  6. "testing"
  7. "github.com/google/go-containerregistry/pkg/name"
  8. "github.com/google/go-containerregistry/pkg/v1"
  9. "github.com/google/go-containerregistry/pkg/v1/remote"
  10. . "github.com/onsi/ginkgo"
  11. . "github.com/onsi/gomega"
  12. "github.com/onsi/gomega/gexec"
  13. )
  14. var bins struct {
  15. In string `json:"in"`
  16. Out string `json:"out"`
  17. Check string `json:"check"`
  18. }
  19. // see testdata/static/Dockerfile
  20. const OLDER_STATIC_DIGEST = "sha256:031567a617423a84ad68b62267c30693185bd2b92c2668732efc8c70b036bd3a"
  21. const LATEST_STATIC_DIGEST = "sha256:64a6988c58cbdd634198f56452e8f8945e5b54a4bbca4bff7e960e1c830671ff"
  22. // same Dockerfile, but pushed again (twice; old + latest) to a private repo
  23. const PRIVATE_OLDER_STATIC_DIGEST = "sha256:a5e6442b86fd5f555f528deea32326e9709851f6b18d490d6dfb290c22d6ff52"
  24. const PRIVATE_LATEST_STATIC_DIGEST = "sha256:96c8ddb11d01b236fbf063e5a468d17f4c44ccffa19470471162dbd5bdc922a4"
  25. // a Docker Hub account used for testing interactions w/ credentials
  26. var dockerUsername = os.Getenv("DOCKER_USERNAME")
  27. var dockerPassword = os.Getenv("DOCKER_PASSWORD")
  28. // a pre-configured, static private repo used for testing 'check' and 'in'
  29. var dockerPrivateRepo = os.Getenv("DOCKER_PRIVATE_REPO")
  30. // a repo to which random images will be pushed when testing 'out'
  31. var dockerPushRepo = os.Getenv("DOCKER_PUSH_REPO")
  32. func checkDockerUserConfigured() {
  33. if dockerUsername == "" || dockerPassword == "" || dockerPrivateRepo == "" || dockerPushRepo == "" {
  34. Skip("must specify $DOCKER_USERNAME, $DOCKER_PASSWORD, $DOCKER_PRIVATE_REPO, and $DOCKER_PUSH_REPO")
  35. }
  36. }
  37. var _ = SynchronizedBeforeSuite(func() []byte {
  38. var err error
  39. b := bins
  40. if _, err := os.Stat("/opt/resource/in"); err == nil {
  41. b.In = "/opt/resource/in"
  42. } else {
  43. b.In, err = gexec.Build("github.com/concourse/registry-image-resource/cmd/in")
  44. Expect(err).ToNot(HaveOccurred())
  45. }
  46. if _, err := os.Stat("/opt/resource/out"); err == nil {
  47. b.Out = "/opt/resource/out"
  48. } else {
  49. b.Out, err = gexec.Build("github.com/concourse/registry-image-resource/cmd/out")
  50. Expect(err).ToNot(HaveOccurred())
  51. }
  52. if _, err := os.Stat("/opt/resource/check"); err == nil {
  53. b.Check = "/opt/resource/check"
  54. } else {
  55. b.Check, err = gexec.Build("github.com/concourse/registry-image-resource/cmd/check")
  56. Expect(err).ToNot(HaveOccurred())
  57. }
  58. j, err := json.Marshal(b)
  59. Expect(err).ToNot(HaveOccurred())
  60. return j
  61. }, func(bp []byte) {
  62. err := json.Unmarshal(bp, &bins)
  63. Expect(err).ToNot(HaveOccurred())
  64. })
  65. var _ = SynchronizedAfterSuite(func() {
  66. }, func() {
  67. gexec.CleanupBuildArtifacts()
  68. })
  69. func TestRegistryImageResource(t *testing.T) {
  70. RegisterFailHandler(Fail)
  71. RunSpecs(t, "RegistryImageResource Suite")
  72. }
  73. func latestDigest(ref string) string {
  74. n, err := name.ParseReference(ref, name.WeakValidation)
  75. Expect(err).ToNot(HaveOccurred())
  76. image, err := remote.Image(n)
  77. Expect(err).ToNot(HaveOccurred())
  78. digest, err := image.Digest()
  79. Expect(err).ToNot(HaveOccurred())
  80. return digest.String()
  81. }
  82. func latestManifest(ref string) (string, *v1.Manifest) {
  83. n, err := name.ParseReference(ref, name.WeakValidation)
  84. Expect(err).ToNot(HaveOccurred())
  85. image, err := remote.Image(n)
  86. Expect(err).ToNot(HaveOccurred())
  87. manifest, err := image.Manifest()
  88. Expect(err).ToNot(HaveOccurred())
  89. digest, err := image.Digest()
  90. Expect(err).ToNot(HaveOccurred())
  91. return digest.String(), manifest
  92. }
  93. func cat(path string) string {
  94. bytes, err := ioutil.ReadFile(path)
  95. Expect(err).ToNot(HaveOccurred())
  96. return string(bytes)
  97. }