Files
kustomize/api/resmap/selector_test.go
Karl Isenberg 43868688d5 Use require for Error and NoError
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.
2024-03-20 13:19:18 -07:00

192 lines
3.4 KiB
Go

// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.
package resmap_test
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
. "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/kyaml/resid"
)
func setupRMForPatchTargets(t *testing.T) ResMap {
t.Helper()
result, err := rmF.NewResMapFromBytes([]byte(`
apiVersion: group1/v1
kind: Kind1
metadata:
name: name1
namespace: ns1
labels:
app: name1
annotations:
foo: bar
---
apiVersion: group1/v1
kind: Kind1
metadata:
name: name2
namespace: default
labels:
app: name2
annotations:
foo: bar
---
apiVersion: group1/v1
kind: Kind2
metadata:
name: name3
labels:
app: name3
annotations:
bar: baz
---
apiVersion: group1/v1
kind: Kind2
metadata:
name: x-name1
namespace: x-default
`))
require.NoError(t, err)
return result
}
func TestFindPatchTargets(t *testing.T) {
rm := setupRMForPatchTargets(t)
testcases := map[string]struct {
target types.Selector
count int
}{
"select_01": {
target: types.Selector{
ResId: resid.ResId{Name: "name.*"},
},
count: 3,
},
"select_02": {
target: types.Selector{
ResId: resid.ResId{Name: "name.*"},
AnnotationSelector: "foo=bar",
},
count: 2,
},
"select_03": {
target: types.Selector{
LabelSelector: "app=name1",
},
count: 1,
},
"select_04": {
target: types.Selector{
ResId: resid.ResId{
Gvk: resid.Gvk{
Kind: "Kind1",
},
Name: "name.*",
},
},
count: 2,
},
"select_05": {
target: types.Selector{
ResId: resid.ResId{Name: "NotMatched"},
},
count: 0,
},
"select_06": {
target: types.Selector{
ResId: resid.ResId{Name: ""},
},
count: 4,
},
"select_07": {
target: types.Selector{
ResId: resid.ResId{Namespace: "default"},
},
count: 2,
},
"select_08": {
target: types.Selector{
ResId: resid.ResId{Namespace: ""},
},
count: 4,
},
"select_09": {
target: types.Selector{
ResId: resid.ResId{
Namespace: "default",
Name: "name.*",
Gvk: resid.Gvk{
Kind: "Kind1",
},
},
},
count: 1,
},
"select_10": {
target: types.Selector{
ResId: resid.ResId{Name: "^name.*"},
},
count: 3,
},
"select_11": {
target: types.Selector{
ResId: resid.ResId{Name: "name.*$"},
},
count: 3,
},
"select_12": {
target: types.Selector{
ResId: resid.ResId{Name: "^name.*$"},
},
count: 3,
},
"select_13": {
target: types.Selector{
ResId: resid.ResId{Namespace: "^def.*"},
},
count: 2,
},
"select_14": {
target: types.Selector{
ResId: resid.ResId{Namespace: "def.*$"},
},
count: 2,
},
"select_15": {
target: types.Selector{
ResId: resid.ResId{Namespace: "^def.*$"},
},
count: 2,
},
"select_16": {
target: types.Selector{
ResId: resid.ResId{Namespace: "default"},
},
count: 2,
},
"select_17": {
target: types.Selector{
ResId: resid.ResId{Namespace: "NotMatched"},
},
count: 0,
},
"select_18": {
target: types.Selector{
ResId: resid.ResId{Namespace: "ns1"},
},
count: 1,
},
}
for n, testcase := range testcases {
actual, err := rm.Select(testcase.target)
require.NoError(t, err)
assert.Equalf(
t, testcase.count, len(actual), "test=%s target=%v", n, testcase.target)
}
}