check_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. package resource_test
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "os/exec"
  6. . "github.com/onsi/ginkgo"
  7. . "github.com/onsi/gomega"
  8. resource "github.com/concourse/registry-image-resource"
  9. )
  10. var _ = Describe("Check", func() {
  11. var req struct {
  12. Source resource.Source
  13. Version *resource.Version
  14. }
  15. var res []resource.Version
  16. JustBeforeEach(func() {
  17. cmd := exec.Command(bins.Check)
  18. payload, err := json.Marshal(req)
  19. Expect(err).ToNot(HaveOccurred())
  20. outBuf := new(bytes.Buffer)
  21. cmd.Stdin = bytes.NewBuffer(payload)
  22. cmd.Stdout = outBuf
  23. cmd.Stderr = GinkgoWriter
  24. err = cmd.Run()
  25. Expect(err).ToNot(HaveOccurred())
  26. err = json.Unmarshal(outBuf.Bytes(), &res)
  27. Expect(err).ToNot(HaveOccurred())
  28. })
  29. Context("when invoked with no cursor version", func() {
  30. BeforeEach(func() {
  31. req.Source = resource.Source{
  32. Repository: "concourse/test-image-static",
  33. Tag: "latest",
  34. }
  35. req.Version = nil
  36. })
  37. It("returns the current digest", func() {
  38. Expect(res).To(Equal([]resource.Version{
  39. {Digest: LATEST_STATIC_DIGEST},
  40. }))
  41. })
  42. Context("against a private repo with credentials", func() {
  43. BeforeEach(func() {
  44. req.Source = resource.Source{
  45. Repository: dockerPrivateRepo,
  46. Tag: "latest",
  47. Username: dockerUsername,
  48. Password: dockerPassword,
  49. }
  50. checkDockerUserConfigured()
  51. })
  52. It("returns the current digest", func() {
  53. Expect(res).To(Equal([]resource.Version{
  54. {Digest: PRIVATE_LATEST_STATIC_DIGEST},
  55. }))
  56. })
  57. })
  58. })
  59. Context("when invoked with an up-to-date cursor version", func() {
  60. BeforeEach(func() {
  61. req.Source = resource.Source{
  62. Repository: "concourse/test-image-static",
  63. Tag: "latest",
  64. }
  65. req.Version = &resource.Version{
  66. Digest: LATEST_STATIC_DIGEST,
  67. }
  68. })
  69. It("returns the given digest", func() {
  70. Expect(res).To(Equal([]resource.Version{
  71. {Digest: LATEST_STATIC_DIGEST},
  72. }))
  73. })
  74. Context("against a private repo with credentials", func() {
  75. BeforeEach(func() {
  76. req.Source = resource.Source{
  77. Repository: dockerPrivateRepo,
  78. Tag: "latest",
  79. Username: dockerUsername,
  80. Password: dockerPassword,
  81. }
  82. checkDockerUserConfigured()
  83. req.Version = &resource.Version{
  84. Digest: PRIVATE_LATEST_STATIC_DIGEST,
  85. }
  86. })
  87. It("returns the current digest", func() {
  88. Expect(res).To(Equal([]resource.Version{
  89. {Digest: PRIVATE_LATEST_STATIC_DIGEST},
  90. }))
  91. })
  92. })
  93. })
  94. Context("when invoked with a valid but out-of-date cursor version", func() {
  95. BeforeEach(func() {
  96. req.Source = resource.Source{
  97. Repository: "concourse/test-image-static",
  98. Tag: "latest",
  99. }
  100. req.Version = &resource.Version{
  101. // this was previously pushed to the 'latest' tag
  102. Digest: OLDER_STATIC_DIGEST,
  103. }
  104. })
  105. It("returns the previous digest and the current digest", func() {
  106. Expect(res).To(Equal([]resource.Version{
  107. {Digest: OLDER_STATIC_DIGEST},
  108. {Digest: LATEST_STATIC_DIGEST},
  109. }))
  110. })
  111. Context("against a private repo with credentials", func() {
  112. BeforeEach(func() {
  113. req.Source = resource.Source{
  114. Repository: dockerPrivateRepo,
  115. Tag: "latest",
  116. Username: dockerUsername,
  117. Password: dockerPassword,
  118. }
  119. checkDockerUserConfigured()
  120. req.Version = &resource.Version{
  121. // this was previously pushed to the 'latest' tag
  122. Digest: PRIVATE_OLDER_STATIC_DIGEST,
  123. }
  124. })
  125. It("returns the current digest", func() {
  126. Expect(res).To(Equal([]resource.Version{
  127. {Digest: PRIVATE_OLDER_STATIC_DIGEST},
  128. {Digest: PRIVATE_LATEST_STATIC_DIGEST},
  129. }))
  130. })
  131. })
  132. })
  133. Context("when invoked with an invalid cursor version", func() {
  134. BeforeEach(func() {
  135. req.Source = resource.Source{
  136. Repository: "concourse/test-image-static",
  137. Tag: "latest",
  138. }
  139. req.Version = &resource.Version{
  140. // (note the end)
  141. Digest: "sha256:031567a617423a84ad68b62267c30693185bd2b92c2668732efc8c70deadbeef",
  142. }
  143. })
  144. It("returns only the current digest", func() {
  145. Expect(res).To(Equal([]resource.Version{
  146. {Digest: LATEST_STATIC_DIGEST},
  147. }))
  148. })
  149. Context("against a private repo with credentials", func() {
  150. BeforeEach(func() {
  151. req.Source = resource.Source{
  152. Repository: dockerPrivateRepo,
  153. Tag: "latest",
  154. Username: dockerUsername,
  155. Password: dockerPassword,
  156. }
  157. checkDockerUserConfigured()
  158. })
  159. It("returns the current digest", func() {
  160. Expect(res).To(Equal([]resource.Version{
  161. {Digest: PRIVATE_LATEST_STATIC_DIGEST},
  162. }))
  163. })
  164. })
  165. })
  166. })