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  }