mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-18 08:51:45 +00:00
158 lines
3.7 KiB
Go
158 lines
3.7 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package transform_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"sigs.k8s.io/kustomize/api/ifc"
|
|
"sigs.k8s.io/kustomize/api/k8sdeps/kunstruct"
|
|
. "sigs.k8s.io/kustomize/api/transform"
|
|
)
|
|
|
|
type noopMutator struct {
|
|
wasCalled bool
|
|
errorToReturn error
|
|
}
|
|
|
|
var errExpected = fmt.Errorf("oops")
|
|
|
|
const originalValue = "tomato"
|
|
const newValue = "notThe" + originalValue
|
|
|
|
func (m *noopMutator) mutate(_ interface{}) (interface{}, error) {
|
|
m.wasCalled = true
|
|
return newValue, m.errorToReturn
|
|
}
|
|
|
|
func makeTestDeployment() ifc.Kunstructured {
|
|
factory := kunstruct.NewKunstructuredFactoryImpl()
|
|
return factory.FromMap(
|
|
map[string]interface{}{
|
|
"group": "apps",
|
|
"apiVersion": "v1",
|
|
"kind": "Deployment",
|
|
"metadata": map[string]interface{}{
|
|
"name": originalValue,
|
|
},
|
|
"spec": map[string]interface{}{
|
|
"template": map[string]interface{}{
|
|
"env": []interface{}{
|
|
map[string]interface{}{
|
|
"name": "HELLO",
|
|
"value": "hi there",
|
|
},
|
|
map[string]interface{}{
|
|
"name": "GOODBYE",
|
|
"value": "adios!",
|
|
},
|
|
},
|
|
"metadata": map[string]interface{}{
|
|
"labels": map[string]interface{}{
|
|
"vegetable": originalValue,
|
|
},
|
|
},
|
|
"spec": map[string]interface{}{
|
|
"containers": []interface{}{
|
|
map[string]interface{}{
|
|
"name": "tangerine",
|
|
"image": originalValue,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
})
|
|
}
|
|
|
|
func getFieldValue(t *testing.T, obj ifc.Kunstructured, fieldName string) string {
|
|
v, err := obj.GetString(fieldName)
|
|
if err != nil {
|
|
t.Fatalf("unexpected field error: %v", err)
|
|
}
|
|
return v
|
|
}
|
|
|
|
func TestNoPath(t *testing.T) {
|
|
obj := makeTestDeployment()
|
|
m := &noopMutator{}
|
|
err := MutateField(
|
|
obj.Map(), []string{}, false, m.mutate)
|
|
if m.wasCalled {
|
|
t.Fatalf("mutator should not have been called.")
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestHappyPath(t *testing.T) {
|
|
obj := makeTestDeployment()
|
|
v := getFieldValue(t, obj, "metadata.name")
|
|
if v != originalValue {
|
|
t.Fatalf("unexpected original value: %v", v)
|
|
}
|
|
v = getFieldValue(t, obj, "spec.template.metadata.labels.vegetable")
|
|
if v != originalValue {
|
|
t.Fatalf("unexpected original value: %v", v)
|
|
}
|
|
|
|
m := &noopMutator{}
|
|
err := MutateField(
|
|
obj.Map(), []string{"metadata", "name"}, false, m.mutate)
|
|
if !m.wasCalled {
|
|
t.Fatalf("mutator should have been called.")
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("unexpected mutate error: %v", err)
|
|
}
|
|
v = getFieldValue(t, obj, "metadata.name")
|
|
if v != newValue {
|
|
t.Fatalf("unexpected new value: %v", v)
|
|
}
|
|
|
|
m = &noopMutator{}
|
|
err = MutateField(
|
|
obj.Map(), []string{"spec", "template", "metadata", "labels", "vegetable"}, false, m.mutate)
|
|
if !m.wasCalled {
|
|
t.Fatalf("mutator should have been called.")
|
|
}
|
|
if err != nil {
|
|
t.Fatalf("unexpected mutate error: %v", err)
|
|
}
|
|
v = getFieldValue(t, obj, "spec.template.metadata.labels.vegetable")
|
|
if v != newValue {
|
|
t.Fatalf("unexpected new value: %v", v)
|
|
}
|
|
}
|
|
|
|
func TestWithError(t *testing.T) {
|
|
obj := makeTestDeployment()
|
|
m := noopMutator{errorToReturn: errExpected}
|
|
err := MutateField(
|
|
obj.Map(), []string{"metadata", "name"}, false, m.mutate)
|
|
if !m.wasCalled {
|
|
t.Fatalf("mutator was not called!")
|
|
}
|
|
if err != errExpected {
|
|
t.Fatalf("unexpected error: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestWithNil(t *testing.T) {
|
|
obj := makeTestDeployment()
|
|
foo := obj.Map()["spec"]
|
|
foo = foo.(map[string]interface{})["template"]
|
|
foo = foo.(map[string]interface{})["metadata"]
|
|
foo.(map[string]interface{})["labels"] = nil
|
|
|
|
m := &noopMutator{}
|
|
err := MutateField(
|
|
obj.Map(), []string{"spec", "template", "metadata", "labels", "vegetable"}, false, m.mutate)
|
|
if err != nil {
|
|
t.Fatalf("Unexpected error: %v", err)
|
|
}
|
|
}
|