mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
Assert keeps going after failure, but require immediately fails the tests, making it easier to find the output related to the test failure, rather than having to comb through a bunch of subsequent assertion failures. For equality tests, we may or may not want to continue, but for error checks we almost always want to immediately fail the test. Exceptions can be changed as-needed.
120 lines
3.2 KiB
Go
120 lines
3.2 KiB
Go
// Copyright 2020 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
"sigs.k8s.io/kustomize/api/konfig"
|
|
"sigs.k8s.io/kustomize/api/provider"
|
|
"sigs.k8s.io/kustomize/api/resmap"
|
|
"sigs.k8s.io/kustomize/api/resource"
|
|
"sigs.k8s.io/kustomize/api/types"
|
|
"sigs.k8s.io/kustomize/kyaml/filesys"
|
|
)
|
|
|
|
func TestDeterminePluginSrcRoot(t *testing.T) {
|
|
actual, err := DeterminePluginSrcRoot(filesys.MakeFsOnDisk())
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if !filepath.IsAbs(actual) {
|
|
t.Errorf("expected absolute path, but got '%s'", actual)
|
|
}
|
|
if !strings.HasSuffix(actual, konfig.RelPluginHome) {
|
|
t.Errorf("expected suffix '%s' in '%s'", konfig.RelPluginHome, actual)
|
|
}
|
|
}
|
|
|
|
func makeConfigMap(rf *resource.Factory, name, behavior string, hashValue *string) *resource.Resource {
|
|
r := rf.FromMap(map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": name},
|
|
})
|
|
annotations := map[string]string{}
|
|
if behavior != "" {
|
|
annotations[BehaviorAnnotation] = behavior
|
|
}
|
|
if hashValue != nil {
|
|
annotations[HashAnnotation] = *hashValue
|
|
}
|
|
if len(annotations) > 0 {
|
|
if err := r.SetAnnotations(annotations); err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
return r
|
|
}
|
|
|
|
func makeConfigMapOptions(rf *resource.Factory, name, behavior string, disableHash bool) (*resource.Resource, error) {
|
|
return rf.FromMapAndOption(map[string]interface{}{
|
|
"apiVersion": "v1",
|
|
"kind": "ConfigMap",
|
|
"metadata": map[string]interface{}{"name": name},
|
|
}, &types.GeneratorArgs{
|
|
Behavior: behavior,
|
|
Options: &types.GeneratorOptions{DisableNameSuffixHash: disableHash}})
|
|
}
|
|
|
|
func strptr(s string) *string {
|
|
return &s
|
|
}
|
|
|
|
func TestUpdateResourceOptions(t *testing.T) {
|
|
rf := provider.NewDefaultDepProvider().GetResourceFactory()
|
|
in := resmap.New()
|
|
expected := resmap.New()
|
|
cases := []struct {
|
|
behavior string
|
|
needsHash bool
|
|
hashValue *string
|
|
}{
|
|
{hashValue: strptr("false")},
|
|
{hashValue: strptr("true"), needsHash: true},
|
|
{behavior: "replace"},
|
|
{behavior: "merge"},
|
|
{behavior: "create"},
|
|
{behavior: "nonsense"},
|
|
{behavior: "merge", hashValue: strptr("false")},
|
|
{behavior: "merge", hashValue: strptr("true"), needsHash: true},
|
|
}
|
|
for i, c := range cases {
|
|
name := fmt.Sprintf("test%d", i)
|
|
err := in.Append(makeConfigMap(rf, name, c.behavior, c.hashValue))
|
|
require.NoError(t, err)
|
|
config, err := makeConfigMapOptions(rf, name, c.behavior, !c.needsHash)
|
|
if err != nil {
|
|
t.Errorf("expected new instance with an options but got error: %v", err)
|
|
}
|
|
err = expected.Append(config)
|
|
require.NoError(t, err)
|
|
}
|
|
actual, err := UpdateResourceOptions(in)
|
|
require.NoError(t, err)
|
|
require.NoError(t, expected.ErrorIfNotEqualLists(actual))
|
|
}
|
|
|
|
func TestUpdateResourceOptionsWithInvalidHashAnnotationValues(t *testing.T) {
|
|
rf := provider.NewDefaultDepProvider().GetResourceFactory()
|
|
cases := []string{
|
|
"",
|
|
"FaLsE",
|
|
"TrUe",
|
|
"potato",
|
|
}
|
|
for i := range cases {
|
|
name := fmt.Sprintf("test%d", i)
|
|
in := resmap.New()
|
|
err := in.Append(makeConfigMap(rf, name, "", &cases[i]))
|
|
require.NoError(t, err)
|
|
_, err = UpdateResourceOptions(in)
|
|
require.Error(t, err)
|
|
}
|
|
}
|