Ctrl K
ComunidadGuías…

pkg/configrefs/flagger_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
package configrefs

import (
	"reflect"
	"testing"

	"github.com/skyhook-io/radar/pkg/resourceid"
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)

func TestFlaggerAnalysisFollowsNativePreference(t *testing.T) {
	for _, tc := range []struct {
		name string
		spec map[string]any
		want string
	}{
		{"current", map[string]any{"analysis": map[string]any{"interval": "1m"}}, "1m"},
		{"served deprecated field", map[string]any{"canaryAnalysis": map[string]any{"interval": "2m"}}, "2m"},
		{"current wins", map[string]any{"analysis": map[string]any{"interval": "1m"}, "canaryAnalysis": map[string]any{"interval": "2m"}}, "1m"},
		{"empty current wins", map[string]any{"analysis": map[string]any{}, "canaryAnalysis": map[string]any{"interval": "2m"}}, ""},
		{"null current", map[string]any{"analysis": nil, "canaryAnalysis": map[string]any{"interval": "2m"}}, "2m"},
	} {
		t.Run(tc.name, func(t *testing.T) {
			u := &unstructured.Unstructured{Object: map[string]any{"spec": tc.spec}}
			got, _, _ := unstructured.NestedString(FlaggerAnalysis(u), "interval")
			if got != tc.want {
				t.Fatalf("got %q; want %q", got, tc.want)
			}
		})
	}
	if FlaggerAnalysis(nil) != nil {
		t.Fatal("nil Canary has analysis")
	}
}

func TestFlaggerNativeTargetReference(t *testing.T) {
	for _, tc := range []struct{ kind, version, group string }{
		{"Deployment", "ignored.example/v1", "apps"},
		{"DaemonSet", "apps/v1", "apps"},
		{"Service", "v1", ""},
		{"Service", "serving.knative.dev/v1", "serving.knative.dev"},
		{"Service", "serving.knative.dev/v1beta1", ""},
	} {
		t.Run(tc.kind+tc.version, func(t *testing.T) {
			u := &unstructured.Unstructured{Object: map[string]any{
				"apiVersion": "flagger.app/v1beta1", "kind": "Canary", "metadata": map[string]any{"namespace": "release"},
				"spec": map[string]any{"targetRef": map[string]any{"apiVersion": tc.version, "kind": tc.kind, "name": "app", "namespace": "ignored"}},
			}}
			ref, ok := FlaggerTargetReference(u)
			if !ok || ref != (resourceid.Ref{Group: tc.group, Kind: tc.kind, Namespace: "release", Name: "app"}) {
				t.Fatalf("reference=%+v/%v", ref, ok)
			}
			u.SetAPIVersion("other.example/v1")
			if _, ok := FlaggerTargetReference(u); ok {
				t.Fatal("foreign group received native target semantics")
			}
		})
	}
}

func TestFlaggerMetricTemplateReferencesFollowNativeClient(t *testing.T) {
	u := &unstructured.Unstructured{Object: map[string]any{
		"apiVersion": "flagger.app/v1beta1", "kind": "Canary", "metadata": map[string]any{"namespace": "release"},
		"spec": map[string]any{"analysis": map[string]any{"metrics": []any{
			map[string]any{"name": "builtin"},
			map[string]any{"query": "inline"},
			map[string]any{"templateRef": map[string]any{"name": "latency", "apiVersion": "other.example/v1", "kind": "Unrelated"}},
			map[string]any{"templateRef": map[string]any{"name": "latency"}},
			map[string]any{"templateRef": map[string]any{"name": "latency", "namespace": "metrics"}},
		}}},
	}}
	want := []resourceid.Ref{
		{Group: "flagger.app", Kind: "MetricTemplate", Namespace: "release", Name: "latency"},
		{Group: "flagger.app", Kind: "MetricTemplate", Namespace: "metrics", Name: "latency"},
	}
	if got := FlaggerMetricTemplateReferences(u); !reflect.DeepEqual(got, want) {
		t.Fatalf("got %+v; want %+v", got, want)
	}
	u.SetAPIVersion("other.example/v1")
	if len(FlaggerMetricTemplateReferences(u)) != 0 {
		t.Fatal("foreign group received template semantics")
	}
}

func TestFlaggerProviderSecretStaysWithTemplate(t *testing.T) {
	u := &unstructured.Unstructured{Object: map[string]any{
		"apiVersion": "flagger.app/v1beta1", "kind": "MetricTemplate", "metadata": map[string]any{"namespace": "metrics"},
		"spec": map[string]any{"provider": map[string]any{"secretRef": map[string]any{"name": "credentials", "namespace": "ignored"}}},
	}}
	got, ok := FlaggerProviderSecretReference(u)
	if !ok || got != (resourceid.Ref{Kind: "Secret", Namespace: "metrics", Name: "credentials"}) {
		t.Fatalf("got %+v/%v", got, ok)
	}
	u.SetKind("Canary")
	if _, ok := FlaggerProviderSecretReference(u); ok {
		t.Fatal("non-template received provider Secret semantics")
	}
}