Ctrl K
ComunidadGuías…

internal/compare/malformed_test.go

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

Archivo original ↗Preguntar a KiBot
package compare

import (
	"strings"
	"testing"

	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)

func TestMutatingWebhookCABundlesAreDropped(t *testing.T) {
	here := webhook("first-cluster")
	here.SetKind(mutatingKind)
	there := webhook("second-cluster")
	there.SetKind(mutatingKind)

	left := rendered(t, Normalise(here))
	right := rendered(t, Normalise(there))

	if left != right {
		t.Fatalf("the same mutating webhook differed across clusters:\n%s\n---\n%s", left, right)
	}
	if strings.Contains(left, "caBundle") {
		t.Fatalf("the injected CA bundle survived:\n%s", left)
	}
}

func TestMalformedServicePortEntriesSurviveNormalisation(t *testing.T) {
	item := service("10.43.0.5", 31080)
	ports := []any{
		"not an object",
		map[string]any{"name": "http", "port": int64(80), "nodePort": int64(31080)},
	}
	if err := unstructured.SetNestedSlice(item.Object, ports, specField, "ports"); err != nil {
		t.Fatalf("seed ports: %v", err)
	}

	clean := Normalise(item)
	found, ok, err := unstructured.NestedSlice(clean.Object, specField, "ports")
	if err != nil || !ok {
		t.Fatalf("ports = %v found=%t err=%v", found, ok, err)
	}
	if found[0] != "not an object" {
		t.Fatalf("malformed entry = %#v, want it preserved", found[0])
	}
	port, ok := found[1].(map[string]any)
	if !ok {
		t.Fatalf("valid entry = %T, want a map", found[1])
	}
	if _, carried := port["nodePort"]; carried {
		t.Fatalf("server allocation survived: %#v", port)
	}
	if port["port"] != int64(80) {
		t.Fatalf("authored port was changed: %#v", port)
	}
}

func TestMalformedWebhookEntriesSurviveNormalisation(t *testing.T) {
	item := &unstructured.Unstructured{Object: map[string]any{
		"apiVersion": "admissionregistration.k8s.io/v1",
		"kind":       validatingKind,
		"metadata":   map[string]any{"name": "guard"},
		"webhooks": []any{
			"not an object",
			map[string]any{"name": "missing.example.com", "clientConfig": "not an object"},
			map[string]any{
				"name": "valid.example.com",
				"clientConfig": map[string]any{
					"caBundle": "injected",
					"service":  map[string]any{"name": "guard", "namespace": "prod"},
				},
			},
		},
	}}

	clean := Normalise(item)
	hooks, found, err := unstructured.NestedSlice(clean.Object, "webhooks")
	if err != nil || !found {
		t.Fatalf("webhooks = %v found=%t err=%v", hooks, found, err)
	}
	if len(hooks) != 3 {
		t.Fatalf("webhooks = %d, want every entry preserved", len(hooks))
	}
	if hooks[0] != "not an object" {
		t.Fatalf("malformed hook = %#v", hooks[0])
	}
	missing, ok := hooks[1].(map[string]any)
	if !ok || missing["clientConfig"] != "not an object" {
		t.Fatalf("malformed client config = %#v", hooks[1])
	}
	valid, ok := hooks[2].(map[string]any)
	if !ok {
		t.Fatalf("valid hook = %T", hooks[2])
	}
	config, ok := valid["clientConfig"].(map[string]any)
	if !ok {
		t.Fatalf("valid client config = %T", valid["clientConfig"])
	}
	if _, carried := config["caBundle"]; carried {
		t.Fatalf("CA bundle survived: %#v", config)
	}
	if config["service"] == nil {
		t.Fatalf("authored service was dropped: %#v", config)
	}
}

func TestWrongShapedAllocationsAreLeftAlone(t *testing.T) {
	service := &unstructured.Unstructured{Object: map[string]any{
		"apiVersion": "v1",
		"kind":       serviceKind,
		"metadata":   map[string]any{"name": "web"},
		"spec":       map[string]any{"ports": "not a list", "clusterIPs": "not a list"},
	}}
	webhook := &unstructured.Unstructured{Object: map[string]any{
		"apiVersion": "admissionregistration.k8s.io/v1",
		"kind":       validatingKind,
		"metadata":   map[string]any{"name": "guard"},
		"webhooks":   "not a list",
	}}

	cleanService := Normalise(service)
	cleanWebhook := Normalise(webhook)

	ports, _, _ := unstructured.NestedFieldNoCopy(cleanService.Object, specField, "ports")
	if ports != "not a list" {
		t.Fatalf("ports = %#v, want the malformed value preserved", ports)
	}
	clusterIPs, _, _ := unstructured.NestedFieldNoCopy(cleanService.Object, specField, "clusterIPs")
	if clusterIPs != "not a list" {
		t.Fatalf("clusterIPs = %#v, want the malformed value preserved", clusterIPs)
	}
	hooks, _, _ := unstructured.NestedFieldNoCopy(cleanWebhook.Object, "webhooks")
	if hooks != "not a list" {
		t.Fatalf("webhooks = %#v, want the malformed value preserved", hooks)
	}
}

func TestYAMLReportsAnUnsupportedValue(t *testing.T) {
	item := &unstructured.Unstructured{Object: map[string]any{"unsupported": make(chan int)}}

	_, err := YAML(item)

	if err == nil {
		t.Fatal("an unsupported value was rendered")
	}
	if !strings.Contains(err.Error(), "could not be written as yaml") {
		t.Fatalf("error = %v", err)
	}
}