package mutate_test import ( "testing" "github.com/google/go-containerregistry/pkg/name" v1 "github.com/google/go-containerregistry/pkg/v1" "github.com/stretchr/testify/assert" "edge-infra.dev/pkg/f8n/warehouse" "edge-infra.dev/pkg/f8n/warehouse/oci" "edge-infra.dev/pkg/f8n/warehouse/oci/match" "edge-infra.dev/pkg/f8n/warehouse/oci/mutate" "edge-infra.dev/pkg/f8n/warehouse/pallet" ) func TestName(t *testing.T) { var ( certMgr oci.Artifact shoot oci.Artifact err error ) shoot, err = path.Get(name.MustParseReference("shoot:latest")) if err != nil { t.Fatal(err) } certMgr, err = path.Get(name.MustParseReference("cert-manager:latest")) if err != nil { t.Fatal(err) } t.Run("Image", func(t *testing.T) { name := "certy-boi" updated, err := mutate.Name(certMgr, name) assert.NoError(t, err) checkImgName(t, updated, name) p, err := pallet.New(certMgr) assert.NoError(t, err) updated, err = mutate.Name(p, name) assert.NoError(t, err) checkImgName(t, updated, name) }) t.Run("Image_Index", func(t *testing.T) { name := "bamboo-boi" descsToReplace, err := match.FindManifests(shoot.(v1.ImageIndex), match.Annotation( warehouse.AnnotationRefName, "shoot", )) assert.NoError(t, err) updated, err := mutate.Name(shoot, name) assert.NoError(t, err) checkIdxName(t, updated.(v1.ImageIndex), name, descsToReplace) p, err := pallet.New(shoot) assert.NoError(t, err) updated, err = mutate.Name(p, name) assert.NoError(t, err) checkIdxName(t, updated.(v1.ImageIndex), name, descsToReplace) }) } func checkImgName(t *testing.T, a oci.Artifact, name string) { t.Helper() annos, err := oci.Annotations(a) assert.NoError(t, err) assert.Equal(t, name, annos[warehouse.AnnotationName]) } func checkIdxName(t *testing.T, a v1.ImageIndex, name string, replaced []v1.Descriptor) { t.Helper() m, err := a.IndexManifest() assert.NoError(t, err) assert.Equal(t, name, m.Annotations[warehouse.AnnotationName]) for _, r := range replaced { found := false for _, d := range m.Manifests { if d.Annotations[warehouse.AnnotationRefName] == r.Annotations[warehouse.AnnotationRefName] { t.Error("found descriptor that should have been replaced", d) } if d.Annotations[warehouse.AnnotationRefName] == name { found = true if found { // Verify that the image was also updated img, err := oci.ArtifactFromIdx(a, d) assert.NoError(t, err) checkImgName(t, img, name) } } } if !found { t.Error("didnt find new descriptor") } } }