github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/transform/image_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package transform provides helper functions to transform URLs to airgap equivalents 5 package transform 6 7 import ( 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 ) 12 13 var imageRefs = []string{ 14 "nginx", 15 "nginx:1.23.3", 16 "Racer159/jackal-agent:v0.22.1", 17 "Racer159/jackal-agent@sha256:84605f731c6a18194794c51e70021c671ab064654b751aa57e905bce55be13de", 18 "busybox:latest@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79", 19 "ghcr.io/stefanprodan/podinfo:6.3.3", 20 "registry1.dso.mil/ironbank/opensource/Racer159/jackal/jackal-agent:v0.25.0", 21 "gitlab.com/project/gitea/gitea:1.19.3-rootless-jackal-3431384023", 22 } 23 24 var badImageRefs = []string{ 25 "i am not a ref at all", 26 "C:\\Users\\jackal", 27 "http://urls.are/not/refs", 28 } 29 30 func TestImageTransformHost(t *testing.T) { 31 var expectedResult = []string{ 32 // Normal git repos and references for pushing/pulling 33 "gitlab.com/project/library/nginx:latest-jackal-3793515731", 34 "gitlab.com/project/library/nginx:1.23.3-jackal-3793515731", 35 "gitlab.com/project/Racer159/jackal-agent:v0.22.1-jackal-4283503412", 36 "gitlab.com/project/Racer159/jackal-agent@sha256:84605f731c6a18194794c51e70021c671ab064654b751aa57e905bce55be13de", 37 "gitlab.com/project/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79", 38 "gitlab.com/project/stefanprodan/podinfo:6.3.3-jackal-2985051089", 39 "gitlab.com/project/ironbank/opensource/Racer159/jackal/jackal-agent:v0.25.0-jackal-2003217571", 40 "gitlab.com/project/gitea/gitea:1.19.3-rootless-jackal-3431384023", 41 } 42 43 for idx, ref := range imageRefs { 44 newRef, err := ImageTransformHost("gitlab.com/project", ref) 45 require.NoError(t, err) 46 require.Equal(t, expectedResult[idx], newRef) 47 } 48 49 for _, ref := range badImageRefs { 50 _, err := ImageTransformHost("gitlab.com/project", ref) 51 require.Error(t, err) 52 } 53 } 54 55 func TestImageTransformHostWithoutChecksum(t *testing.T) { 56 var expectedResult = []string{ 57 "gitlab.com/project/library/nginx:latest", 58 "gitlab.com/project/library/nginx:1.23.3", 59 "gitlab.com/project/Racer159/jackal-agent:v0.22.1", 60 "gitlab.com/project/Racer159/jackal-agent@sha256:84605f731c6a18194794c51e70021c671ab064654b751aa57e905bce55be13de", 61 "gitlab.com/project/library/busybox@sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79", 62 "gitlab.com/project/stefanprodan/podinfo:6.3.3", 63 "gitlab.com/project/ironbank/opensource/Racer159/jackal/jackal-agent:v0.25.0", 64 "gitlab.com/project/gitea/gitea:1.19.3-rootless-jackal-3431384023", 65 } 66 67 for idx, ref := range imageRefs { 68 newRef, err := ImageTransformHostWithoutChecksum("gitlab.com/project", ref) 69 require.NoError(t, err) 70 require.Equal(t, expectedResult[idx], newRef) 71 } 72 73 for _, ref := range badImageRefs { 74 _, err := ImageTransformHostWithoutChecksum("gitlab.com/project", ref) 75 require.Error(t, err) 76 } 77 } 78 79 func TestParseImageRef(t *testing.T) { 80 var expectedResult = [][]string{ 81 {"docker.io/", "library/nginx", "latest", ""}, 82 {"docker.io/", "library/nginx", "1.23.3", ""}, 83 {"docker.io/", "Racer159/jackal-agent", "v0.22.1", ""}, 84 {"docker.io/", "Racer159/jackal-agent", "", "sha256:84605f731c6a18194794c51e70021c671ab064654b751aa57e905bce55be13de"}, 85 {"docker.io/", "library/busybox", "latest", "sha256:3fbc632167424a6d997e74f52b878d7cc478225cffac6bc977eedfe51c7f4e79"}, 86 {"ghcr.io/", "stefanprodan/podinfo", "6.3.3", ""}, 87 {"registry1.dso.mil/", "ironbank/opensource/Racer159/jackal/jackal-agent", "v0.25.0", ""}, 88 {"gitlab.com/", "project/gitea/gitea", "1.19.3-rootless-jackal-3431384023", ""}, 89 } 90 91 for idx, ref := range imageRefs { 92 img, err := ParseImageRef(ref) 93 require.NoError(t, err) 94 tag := expectedResult[idx][2] 95 digest := expectedResult[idx][3] 96 var tagOrDigest string 97 var tagAndDigest string 98 if tag != "" { 99 tagOrDigest = ":" + tag 100 tagAndDigest = ":" + tag 101 } 102 if digest != "" { 103 tagOrDigest = "@" + digest 104 tagAndDigest += "@" + digest 105 } 106 path := expectedResult[idx][1] 107 name := expectedResult[idx][0] + path 108 reference := name + tagAndDigest 109 110 require.Equal(t, reference, img.Reference) 111 require.Equal(t, name, img.Name) 112 require.Equal(t, path, img.Path) 113 require.Equal(t, tag, img.Tag) 114 require.Equal(t, digest, img.Digest) 115 require.Equal(t, tagOrDigest, img.TagOrDigest) 116 } 117 118 for _, ref := range badImageRefs { 119 _, err := ParseImageRef(ref) 120 require.Error(t, err) 121 } 122 }