package edgerelease import ( "errors" "testing" "github.com/stretchr/testify/assert" "edge-infra.dev/pkg/edge/component/build/image" ) func TestConfigValidation(t *testing.T) { validMetadata := Metadata{ "97117a2b07f13a6ffe423af362e13912412d3492", "499021129", "0.0.1-rc.499021129.97117a.2021-01-20", "built.2021-01-20.17-04-04.0000UTC", "edge-infra", "ncrvoyix-swt-retail", } validImgShort := []PodImage{ { Image: image.Image{ Repository: "edge-agent", Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f", }, }, } validImgRepo := []PodImage{ { Image: image.Image{ Repository: "edge-agent", Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f", Registry: "ncr-emeraldedge-docker-dev.jfrog.io", }, }, } validCmpShort := []Component{ { Name: "edge-agent", Images: validImgShort, }, } tcs := []struct { name string config EdgeRelease expected error }{ { name: "Incomplete metadata: id", config: config(Spec{ "gcr.io/edge-dev-alpha", Metadata{ "97117a2b07f13a6ffe423af362e13912412d3492", "", "0.0.1-rc.499021129.97117a.2021-01-20", "built.2021-01-20.17-04-04.0000UTC", "edge-infra", "ncrvoyix-swt-retail", }, true, validCmpShort, []image.Image{}, }), expected: ErrIncompleteMetadata, }, { name: "Incomplete metadata: semver", config: config(Spec{ "gcr.io/edge-dev-alpha", Metadata{ "97117a2b07f13a6ffe423af362e13912412d3492", "499021129", "", "built.2021-01-20.17-04-04.0000UTC", "edge-infra", "ncrvoyix-swt-retail", }, true, validCmpShort, []image.Image{}, }), expected: ErrIncompleteMetadata, }, { name: "Incomplete metadata: timestamp", config: config(Spec{ "gcr.io/edge-dev-alpha", Metadata{ "97117a2b07f13a6ffe423af362e13912412d3492", "499021129", "0.0.1-rc.499021129.97117a.2021-01-20", "", "edge-infra", "ncrvoyix-swt-retail", }, true, validCmpShort, []image.Image{}, }), expected: ErrIncompleteMetadata, }, { name: "Incomplete metadata: repo", config: config(Spec{ "gcr.io/edge-dev-alpha", Metadata{ "97117a2b07f13a6ffe423af362e13912412d3492", "499021129", "0.0.1-rc.499021129.97117a.2021-01-20", "built.2021-01-20.17-04-04.0000UTC", "", "", }, true, validCmpShort, []image.Image{}, }), expected: ErrIncompleteMetadata, }, { name: "Incomplete metadata: commit", config: config(Spec{ "gcr.io/edge-dev-alpha", Metadata{ "", "499021129", "0.0.1-rc.499021129.97117a.2021-01-20", "built.2021-01-20.17-04-04.0000UTC", "edge-infra", "ncrvoyix-swt-retail", }, true, validCmpShort, []image.Image{}, }), expected: ErrIncompleteMetadata, }, { name: "Incomplete metadata", config: config(Spec{ "gcr.io/edge-dev-alpha", Metadata{ "", "499021129", "0.0.1-rc.499021129.97117a.2021-01-20", "built.2021-01-20.17-04-04.0000UTC", "edge-infra", "ncrvoyix-swt-retail", }, true, validCmpShort, []image.Image{}, }), expected: ErrIncompleteMetadata, }, { name: "Simple valid Config", config: config(Spec{"gcr.io/edge-dev-alpha", validMetadata, false, validCmpShort, []image.Image{}}), expected: nil, }, { name: "No registry", config: config(Spec{"", validMetadata, false, validCmpShort, []image.Image{}}), expected: ErrNoRegistry, }, { name: "No registry, but provided registry for each image", config: config(Spec{"", validMetadata, false, []Component{{"edge-agent", validImgRepo}}, []image.Image{}}), expected: nil, }, { name: "No input provided", config: config(Spec{"gcr.io/edge-dev-alpha", validMetadata, false, []Component{}, []image.Image{}}), expected: ErrNoInput, }, { name: "No images provided", config: config(Spec{ "gcr.io/edge-dev-alpha", validMetadata, false, []Component{{"edge-agent", []PodImage{}}}, []image.Image{}, }), expected: ErrNoImages, }, } for _, tc := range tcs { err := tc.config.Spec.Validate() if !errors.Is(err, tc.expected) { t.Errorf("\n%s: Expected:\n%v\nGot:\n%v\n", tc.name, tc.expected, err) } } } func config(data Spec) EdgeRelease { return EdgeRelease{ Spec: data, } } func TestInitFns(t *testing.T) { er := config(Spec{ "ncr-emeraldedge-docker-dev.jfrog.io", Metadata{ "97117a2b07f13a6ffe423af362e13912412d3492", "499021129", "0.0.1-rc.499021129.97117a.2021-01-20", "built.2021-01-20.17-04-04.0000UTC", "edge-infra", "ncrvoyix-swt-retail", }, false, []Component{ { "edge-agent", []PodImage{ { Image: image.Image{ Repository: "edge-agent", Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f", }, }, }, }, { "fake-agent", []PodImage{ { Image: image.Image{ Repository: "fake-agent", Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f", Registry: "alternate.gcr.io", }, }, }, }, }, []image.Image{{Repository: "kpt-unthos-sorter", Digest: "fakeShaFakeShaWhatchaGonnaDo"}}, }) er.init() assert.Equal(t, er.Spec.Registry, er.Spec.Components[0].Images[0].Registry, "image.Registry did not match Spec.Registry after init") assert.Equal(t, er.Spec.Registry, er.Spec.KptFns[0].Registry, "image.Registry did not match Spec.Registry after init") assert.Equal(t, "alternate.gcr.io", er.Spec.Components[1].Images[0].Registry, "image.Registry was overridden by init functions when it shouldn't have been") assert.NotEmpty(t, er.componentMap) assert.NotEmpty(t, er.kptFnMap) }