diff --git a/test/e2e/suite/command/tag.go b/test/e2e/suite/command/tag.go index f35b56f64..bb35a26e6 100644 --- a/test/e2e/suite/command/tag.go +++ b/test/e2e/suite/command/tag.go @@ -61,3 +61,32 @@ var _ = Describe("Common registry users:", func() { }) }) }) + +var _ = Describe("OCI image layout users:", func() { + var tagAndValidate = func(root string, tagOrDigest string, digest string, tags ...string) { + out := ORAS(append([]string{"tag", LayoutRef(root, tagOrDigest), Flags.Layout}, tags...)...).MatchKeyWords(tags...).Exec().Out + hint := regexp.QuoteMeta(fmt.Sprintf("Tagging [oci-layout] %s", LayoutRef(root, digest))) + gomega.Expect(out).To(gbytes.Say(hint)) + gomega.Expect(out).NotTo(gbytes.Say(hint)) // should only say hint once + ORAS("repo", "tags", Flags.Layout, LayoutRef(root, "")).MatchKeyWords(tags...).Exec() + } + When("running `tag`", func() { + prepare := func() string { + root := GinkgoT().TempDir() + ORAS("cp", RegistryRef(Host, ImageRepo, multi_arch.Tag), Flags.ToLayout, LayoutRef(root, multi_arch.Tag)).Exec() + return root + } + It("should add a tag to an existent manifest when providing tag reference", func() { + tagAndValidate(prepare(), multi_arch.Tag, multi_arch.Digest, "tag-via-tag") + }) + It("should add a tag to an existent manifest when providing digest reference", func() { + tagAndValidate(prepare(), multi_arch.Digest, multi_arch.Digest, "tag-via-digest") + }) + It("should add multiple tags to an existent manifest when providing digest reference", func() { + tagAndValidate(prepare(), multi_arch.Digest, multi_arch.Digest, "tag1-via-digest", "tag2-via-digest", "tag3-via-digest") + }) + It("should add multiple tags to an existent manifest when providing tag reference", func() { + tagAndValidate(prepare(), multi_arch.Tag, multi_arch.Digest, "tag1-via-tag", "tag1-via-tag", "tag1-via-tag") + }) + }) +})