From 923537e13effffeb3a0fda4fe8a5ca4263155685 Mon Sep 17 00:00:00 2001 From: Billy Zha Date: Mon, 10 Apr 2023 16:34:52 +0800 Subject: [PATCH] test(e2e): OCI layout specs for `oras tag` (#902) Signed-off-by: Billy Zha --- test/e2e/suite/command/tag.go | 58 +++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/test/e2e/suite/command/tag.go b/test/e2e/suite/command/tag.go index f35b56f64..0878a7d7f 100644 --- a/test/e2e/suite/command/tag.go +++ b/test/e2e/suite/command/tag.go @@ -61,3 +61,61 @@ 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") + }) + }) +}) + +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") + }) + }) +})