mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
Add the rmBuilder test helper.
This commit is contained in:
@@ -345,9 +345,9 @@ func TestResolveVarsWithNoambiguiation(t *testing.T) {
|
||||
}
|
||||
|
||||
func find(name string, resMap resmap.ResMap) *resource.Resource {
|
||||
for k, v := range resMap.AsMap() {
|
||||
if k.Name() == name {
|
||||
return v
|
||||
for _, r := range resMap.Resources() {
|
||||
if r.GetName() == name {
|
||||
return r
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -8,15 +8,13 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"sigs.k8s.io/kustomize/pkg/resource"
|
||||
|
||||
"sigs.k8s.io/kustomize/internal/loadertest"
|
||||
"sigs.k8s.io/kustomize/pkg/fs"
|
||||
"sigs.k8s.io/kustomize/pkg/gvk"
|
||||
"sigs.k8s.io/kustomize/pkg/ifc"
|
||||
"sigs.k8s.io/kustomize/pkg/loader"
|
||||
"sigs.k8s.io/kustomize/pkg/resid"
|
||||
. "sigs.k8s.io/kustomize/pkg/resmap"
|
||||
"sigs.k8s.io/kustomize/pkg/resmaptest"
|
||||
"sigs.k8s.io/kustomize/pkg/types"
|
||||
"sigs.k8s.io/kustomize/pkg/validators"
|
||||
)
|
||||
@@ -46,34 +44,27 @@ metadata:
|
||||
if ferr := l.AddFile("/whatever/project/deployment.yaml", []byte(resourceStr)); ferr != nil {
|
||||
t.Fatalf("Error adding fake file: %v\n", ferr)
|
||||
}
|
||||
expected := New()
|
||||
expected.Append(rf.FromMap(
|
||||
map[string]interface{}{
|
||||
expected := resmaptest_test.NewRmBuilder(t, rf).
|
||||
Add(map[string]interface{}{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "dply1",
|
||||
},
|
||||
}))
|
||||
expected.Append(rf.FromMap(
|
||||
map[string]interface{}{
|
||||
}}).
|
||||
Add(map[string]interface{}{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "dply2",
|
||||
},
|
||||
}))
|
||||
expected.AppendWithId(
|
||||
resid.NewResIdWithNamespace(deploy, "dply2", "test"),
|
||||
rf.FromMap(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "dply2",
|
||||
"namespace": "test",
|
||||
},
|
||||
}))
|
||||
}}).
|
||||
Add(map[string]interface{}{
|
||||
"apiVersion": "apps/v1",
|
||||
"kind": "Deployment",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "dply2",
|
||||
"namespace": "test",
|
||||
}}).ResMap()
|
||||
|
||||
m, _ := rmF.FromFile(l, "deployment.yaml")
|
||||
if m.Size() != 3 {
|
||||
t.Fatalf("result should contain 3, but got %d", m.Size())
|
||||
@@ -94,23 +85,19 @@ kind: ConfigMap
|
||||
metadata:
|
||||
name: cm2
|
||||
`)
|
||||
expected := New()
|
||||
expected.Append(rf.FromMap(
|
||||
map[string]interface{}{
|
||||
expected := resmaptest_test.NewRmBuilder(t, rf).
|
||||
Add(map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}))
|
||||
expected.Append(rf.FromMap(
|
||||
map[string]interface{}{
|
||||
}}).
|
||||
Add(map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm2",
|
||||
},
|
||||
}))
|
||||
}}).ResMap()
|
||||
m, err := rmF.NewResMapFromBytes(encoded)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
@@ -147,20 +134,17 @@ func TestNewFromConfigMaps(t *testing.T) {
|
||||
},
|
||||
filepath: "/whatever/project/app.env",
|
||||
content: "DB_USERNAME=admin\nDB_PASSWORD=somepw",
|
||||
expected: FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(cmap, "envConfigMap"): rf.FromMapAndOption(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "envConfigMap",
|
||||
},
|
||||
"data": map[string]interface{}{
|
||||
"DB_USERNAME": "admin",
|
||||
"DB_PASSWORD": "somepw",
|
||||
},
|
||||
}, &types.GeneratorArgs{}, nil),
|
||||
}),
|
||||
expected: resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "envConfigMap",
|
||||
},
|
||||
"data": map[string]interface{}{
|
||||
"DB_USERNAME": "admin",
|
||||
"DB_PASSWORD": "somepw",
|
||||
}}).ResMap(),
|
||||
},
|
||||
|
||||
{
|
||||
@@ -176,21 +160,19 @@ func TestNewFromConfigMaps(t *testing.T) {
|
||||
},
|
||||
filepath: "/whatever/project/app-init.ini",
|
||||
content: "FOO=bar\nBAR=baz\n",
|
||||
expected: FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(cmap, "fileConfigMap"): rf.FromMapAndOption(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "fileConfigMap",
|
||||
},
|
||||
"data": map[string]interface{}{
|
||||
"app-init.ini": `FOO=bar
|
||||
expected: resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "fileConfigMap",
|
||||
},
|
||||
"data": map[string]interface{}{
|
||||
"app-init.ini": `FOO=bar
|
||||
BAR=baz
|
||||
`,
|
||||
},
|
||||
}, &types.GeneratorArgs{}, nil),
|
||||
}),
|
||||
},
|
||||
}).ResMap(),
|
||||
},
|
||||
{
|
||||
description: "construct config map from literal",
|
||||
@@ -204,22 +186,20 @@ BAR=baz
|
||||
},
|
||||
},
|
||||
},
|
||||
expected: FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(cmap, "literalConfigMap"): rf.FromMapAndOption(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "literalConfigMap",
|
||||
},
|
||||
"data": map[string]interface{}{
|
||||
"a": "x",
|
||||
"b": "y",
|
||||
"c": "Good Morning",
|
||||
"d": "false",
|
||||
},
|
||||
}, &types.GeneratorArgs{}, nil),
|
||||
}),
|
||||
expected: resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "literalConfigMap",
|
||||
},
|
||||
"data": map[string]interface{}{
|
||||
"a": "x",
|
||||
"b": "y",
|
||||
"c": "Good Morning",
|
||||
"d": "false",
|
||||
},
|
||||
}).ResMap(),
|
||||
},
|
||||
|
||||
// TODO: add testcase for data coming from multiple sources like
|
||||
@@ -233,14 +213,12 @@ BAR=baz
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if !reflect.DeepEqual(r, tc.expected) {
|
||||
t.Fatalf("in testcase: %q got:\n%+v\n expected:\n%+v\n", tc.description, r, tc.expected)
|
||||
if err = tc.expected.ErrorIfNotEqualLists(r); err != nil {
|
||||
t.Fatalf("testcase: %q, err: %v", tc.description, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var secret = gvk.Gvk{Version: "v1", Kind: "Secret"}
|
||||
|
||||
func TestNewResMapFromSecretArgs(t *testing.T) {
|
||||
secrets := []types.SecretArgs{
|
||||
{
|
||||
@@ -264,22 +242,20 @@ func TestNewResMapFromSecretArgs(t *testing.T) {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
expected := FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(secret, "apple"): rf.FromMapAndOption(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "Secret",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "apple",
|
||||
},
|
||||
"type": ifc.SecretTypeOpaque,
|
||||
"data": map[string]interface{}{
|
||||
"DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")),
|
||||
"DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
|
||||
},
|
||||
}, &types.GeneratorArgs{}, nil),
|
||||
})
|
||||
if !reflect.DeepEqual(actual, expected) {
|
||||
t.Fatalf("%#v\ndoesn't match expected:\n%#v", actual, expected)
|
||||
expected := resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "Secret",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "apple",
|
||||
},
|
||||
"type": ifc.SecretTypeOpaque,
|
||||
"data": map[string]interface{}{
|
||||
"DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")),
|
||||
"DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
|
||||
},
|
||||
}).ResMap()
|
||||
if err = expected.ErrorIfNotEqualLists(actual); err != nil {
|
||||
t.Fatalf("error: %s", err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,11 @@ import (
|
||||
"sigs.k8s.io/kustomize/pkg/gvk"
|
||||
"sigs.k8s.io/kustomize/pkg/resid"
|
||||
. "sigs.k8s.io/kustomize/pkg/resmap"
|
||||
"sigs.k8s.io/kustomize/pkg/resmaptest"
|
||||
"sigs.k8s.io/kustomize/pkg/resource"
|
||||
"sigs.k8s.io/kustomize/pkg/types"
|
||||
)
|
||||
|
||||
var deploy = gvk.Gvk{Group: "apps", Version: "v1", Kind: "Deployment"}
|
||||
var rf = resource.NewFactory(
|
||||
kunstruct.NewKunstructuredFactoryImpl())
|
||||
var rmF = NewFactory(rf)
|
||||
@@ -160,23 +160,21 @@ kind: ConfigMap
|
||||
metadata:
|
||||
name: cm2
|
||||
`)
|
||||
input := New()
|
||||
input.Append(rf.FromMap(
|
||||
input := resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}))
|
||||
input.Append(rf.FromMap(
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm2",
|
||||
},
|
||||
}))
|
||||
}).ResMap()
|
||||
out, err := input.AsYaml()
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
@@ -391,24 +389,21 @@ func TestFilterBy(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestDeepCopy(t *testing.T) {
|
||||
rm1 := FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(cmap, "cm1"): rf.FromMap(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}),
|
||||
resid.NewResId(cmap, "cm2"): rf.FromMap(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm2",
|
||||
},
|
||||
}),
|
||||
})
|
||||
rm1 := resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm2",
|
||||
},
|
||||
}).ResMap()
|
||||
|
||||
rm2 := rm1.DeepCopy()
|
||||
|
||||
@@ -505,40 +500,34 @@ func TestGetMatchingIds(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestErrorIfNotEqual(t *testing.T) {
|
||||
rm1 := FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(cmap, "cm1"): rf.FromMap(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}),
|
||||
resid.NewResId(cmap, "cm2"): rf.FromMap(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm2",
|
||||
},
|
||||
}),
|
||||
})
|
||||
rm1 := resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}).Add(map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm2",
|
||||
},
|
||||
}).ResMap()
|
||||
|
||||
err := rm1.ErrorIfNotEqualSets(rm1)
|
||||
if err != nil {
|
||||
t.Fatalf("%v should equal itself %v", rm1, err)
|
||||
}
|
||||
|
||||
rm2 := FromMap(map[resid.ResId]*resource.Resource{
|
||||
resid.NewResId(cmap, "cm1"): rf.FromMap(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}),
|
||||
})
|
||||
rm2 := resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ConfigMap",
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "cm1",
|
||||
},
|
||||
}).ResMap()
|
||||
|
||||
// test the different number of keys path
|
||||
err = rm1.ErrorIfNotEqualSets(rm2)
|
||||
@@ -602,8 +591,12 @@ func TestAppendAll(t *testing.T) {
|
||||
input2 := rmF.FromResource(r2)
|
||||
|
||||
expected := New()
|
||||
expected.Append(r1)
|
||||
expected.Append(r2)
|
||||
if err := expected.Append(r1); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
if err := expected.Append(r2); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if err := input1.AppendAll(input2); err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
|
||||
72
pkg/resmaptest/rmbuilder.go
Normal file
72
pkg/resmaptest/rmbuilder.go
Normal file
@@ -0,0 +1,72 @@
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package resmaptest_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"sigs.k8s.io/kustomize/pkg/resid"
|
||||
"sigs.k8s.io/kustomize/pkg/resmap"
|
||||
"sigs.k8s.io/kustomize/pkg/resource"
|
||||
)
|
||||
|
||||
// Builds ResMaps for tests, with test-aware error handling.
|
||||
type rmBuilder struct {
|
||||
t *testing.T
|
||||
m resmap.ResMap
|
||||
rf *resource.Factory
|
||||
}
|
||||
|
||||
func NewSeededRmBuilder(t *testing.T, rf *resource.Factory, m resmap.ResMap) *rmBuilder {
|
||||
return &rmBuilder{t: t, rf: rf, m: m}
|
||||
}
|
||||
|
||||
func NewRmBuilder(t *testing.T, rf *resource.Factory) *rmBuilder {
|
||||
return NewSeededRmBuilder(t, rf, resmap.New())
|
||||
}
|
||||
|
||||
func (rm *rmBuilder) Add(m map[string]interface{}) *rmBuilder {
|
||||
err := rm.m.Append(rm.rf.FromMap(m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmBuilder) AddWithId(id resid.ResId, m map[string]interface{}) *rmBuilder {
|
||||
err := rm.m.AppendWithId(id, rm.rf.FromMap(m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmBuilder) AddWithName(n string, m map[string]interface{}) *rmBuilder {
|
||||
err := rm.m.Append(rm.rf.FromMapWithName(n, m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmBuilder) AddWithNs(ns string, m map[string]interface{}) *rmBuilder {
|
||||
err := rm.m.Append(rm.rf.FromMapWithNamespace(ns, m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmBuilder) ReplaceResource(m map[string]interface{}) *rmBuilder {
|
||||
r := rm.rf.FromMap(m)
|
||||
err := rm.m.ReplaceResource(r.Id(), r)
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmBuilder) ResMap() resmap.ResMap {
|
||||
return rm.m
|
||||
}
|
||||
@@ -1,18 +1,5 @@
|
||||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package resource
|
||||
|
||||
@@ -51,6 +38,11 @@ func (rf *Factory) FromMapWithName(n string, m map[string]interface{}) *Resource
|
||||
return rf.makeOne(rf.kf.FromMap(m), nil).setOriginalName(n)
|
||||
}
|
||||
|
||||
// FromMapWithNamespace returns a new instance with the given "original" namespace.
|
||||
func (rf *Factory) FromMapWithNamespace(n string, m map[string]interface{}) *Resource {
|
||||
return rf.makeOne(rf.kf.FromMap(m), nil).setOriginalNs(n)
|
||||
}
|
||||
|
||||
// FromMapAndOption returns a new instance of Resource with given options.
|
||||
func (rf *Factory) FromMapAndOption(
|
||||
m map[string]interface{}, args *types.GeneratorArgs, option *types.GeneratorOptions) *Resource {
|
||||
@@ -75,7 +67,7 @@ func (rf *Factory) makeOne(
|
||||
Kunstructured: u,
|
||||
options: o,
|
||||
}
|
||||
return r.setOriginalName(r.GetName())
|
||||
return r.setOriginalName(r.GetName()).setOriginalNs(r.GetNamespace())
|
||||
}
|
||||
|
||||
// SliceFromPatches returns a slice of resources given a patch path
|
||||
|
||||
@@ -32,6 +32,7 @@ import (
|
||||
type Resource struct {
|
||||
ifc.Kunstructured
|
||||
originalName string
|
||||
originalNs string
|
||||
options *types.GenArgs
|
||||
refBy []resid.ResId
|
||||
refVarNames []string
|
||||
@@ -57,6 +58,7 @@ func (r *Resource) Replace(other *Resource) {
|
||||
|
||||
func (r *Resource) copyOtherFields(other *Resource) {
|
||||
r.originalName = other.originalName
|
||||
r.originalNs = other.originalNs
|
||||
r.options = other.options
|
||||
r.refBy = other.copyRefBy()
|
||||
r.refVarNames = other.copyRefVarNames()
|
||||
@@ -98,6 +100,16 @@ func (r *Resource) setOriginalName(n string) *Resource {
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *Resource) GetOriginalNs() string {
|
||||
return r.originalNs
|
||||
}
|
||||
|
||||
// Making this public would be bad.
|
||||
func (r *Resource) setOriginalNs(n string) *Resource {
|
||||
r.originalNs = n
|
||||
return r
|
||||
}
|
||||
|
||||
// String returns resource as JSON.
|
||||
func (r *Resource) String() string {
|
||||
bs, err := r.MarshalJSON()
|
||||
@@ -134,10 +146,16 @@ func (r *Resource) GetNamespace() string {
|
||||
return namespace
|
||||
}
|
||||
|
||||
// Id returns the ResId for the resource.
|
||||
// Id returns the immutable ResId for the resource.
|
||||
func (r *Resource) Id() resid.ResId {
|
||||
return resid.NewResIdWithPrefixNamespace(
|
||||
r.GetGvk(), r.GetOriginalName(), "", r.GetNamespace())
|
||||
return resid.NewResIdWithNamespace(
|
||||
r.GetGvk(), r.GetOriginalName(), r.GetOriginalNs())
|
||||
}
|
||||
|
||||
// FinalId returns a ResId for the resource using the mutable bits.
|
||||
func (r *Resource) FinalId() resid.ResId {
|
||||
return resid.NewResIdWithNamespace(
|
||||
r.GetGvk(), r.GetName(), r.GetNamespace())
|
||||
}
|
||||
|
||||
// GetRefBy returns the ResIds that referred to current resource
|
||||
|
||||
@@ -214,9 +214,9 @@ func TestResourceNotFound(t *testing.T) {
|
||||
}
|
||||
|
||||
func findSecret(m resmap.ResMap) *resource.Resource {
|
||||
for id, res := range m.AsMap() {
|
||||
if id.Gvk().Kind == "Secret" {
|
||||
return res
|
||||
for _, r := range m.Resources() {
|
||||
if r.Id().Gvk().Kind == "Secret" {
|
||||
return r
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -1,18 +1,5 @@
|
||||
/*
|
||||
Copyright 2018 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package target_test
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ package transformers
|
||||
|
||||
import (
|
||||
"sigs.k8s.io/kustomize/pkg/gvk"
|
||||
"sigs.k8s.io/kustomize/pkg/resmaptest"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -14,61 +15,10 @@ import (
|
||||
"sigs.k8s.io/kustomize/pkg/resource"
|
||||
)
|
||||
|
||||
type rmFactory struct {
|
||||
t *testing.T
|
||||
m resmap.ResMap
|
||||
rf *resource.Factory
|
||||
}
|
||||
|
||||
func NewSeededRmFactory(t *testing.T, rf *resource.Factory, m resmap.ResMap) *rmFactory {
|
||||
return &rmFactory{t: t, rf: rf, m: m}
|
||||
}
|
||||
|
||||
func NewRmFactory(t *testing.T, rf *resource.Factory) *rmFactory {
|
||||
return NewSeededRmFactory(t, rf, resmap.New())
|
||||
}
|
||||
|
||||
func (rm *rmFactory) add(m map[string]interface{}) *rmFactory {
|
||||
err := rm.m.Append(rm.rf.FromMap(m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmFactory) addWithId(id resid.ResId, m map[string]interface{}) *rmFactory {
|
||||
err := rm.m.AppendWithId(id, rm.rf.FromMap(m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmFactory) addWithName(n string, m map[string]interface{}) *rmFactory {
|
||||
err := rm.m.Append(rm.rf.FromMapWithName(n, m))
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmFactory) replaceResource(m map[string]interface{}) *rmFactory {
|
||||
r := rm.rf.FromMap(m)
|
||||
err := rm.m.ReplaceResource(r.Id(), r)
|
||||
if err != nil {
|
||||
rm.t.Fatalf("test setup failure: %v", err)
|
||||
}
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rm *rmFactory) resMap() resmap.ResMap {
|
||||
return rm.m
|
||||
}
|
||||
|
||||
func TestNameReferenceHappyRun(t *testing.T) {
|
||||
rf := resource.NewFactory(
|
||||
kunstruct.NewKunstructuredFactoryImpl())
|
||||
m := NewRmFactory(t, rf).addWithName(
|
||||
m := resmaptest_test.NewRmBuilder(t, rf).AddWithName(
|
||||
"cm1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -76,7 +26,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "someprefix-cm1-somehash",
|
||||
},
|
||||
}).addWithName(
|
||||
}).AddWithName(
|
||||
"cm2",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -84,7 +34,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "someprefix-cm2-somehash",
|
||||
},
|
||||
}).addWithName(
|
||||
}).AddWithName(
|
||||
"secret1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -92,7 +42,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "someprefix-secret1-somehash",
|
||||
},
|
||||
}).addWithName(
|
||||
}).AddWithName(
|
||||
"claim1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -100,7 +50,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "someprefix-claim1",
|
||||
},
|
||||
}).add(
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"group": "extensions",
|
||||
"apiVersion": "v1beta1",
|
||||
@@ -119,7 +69,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
).add(
|
||||
).Add(
|
||||
map[string]interface{}{
|
||||
"group": "apps",
|
||||
"apiVersion": "v1",
|
||||
@@ -199,7 +149,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).add(
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"group": "apps",
|
||||
"apiVersion": "v1",
|
||||
@@ -231,7 +181,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).addWithName("sa",
|
||||
}).AddWithName("sa",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
"kind": "ServiceAccount",
|
||||
@@ -239,7 +189,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"name": "someprefix-sa",
|
||||
"namespace": "test",
|
||||
},
|
||||
}).add(
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "rbac.authorization.k8s.io/v1",
|
||||
"kind": "ClusterRoleBinding",
|
||||
@@ -253,7 +203,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"namespace": "test",
|
||||
},
|
||||
},
|
||||
}).add(
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "rbac.authorization.k8s.io/v1",
|
||||
"kind": "ClusterRole",
|
||||
@@ -272,7 +222,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).add(
|
||||
}).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "batch/v1beta1",
|
||||
"kind": "CronJob",
|
||||
@@ -308,9 +258,9 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).resMap()
|
||||
}).ResMap()
|
||||
|
||||
expected := NewSeededRmFactory(t, rf, m.ShallowCopy()).replaceResource(
|
||||
expected := resmaptest_test.NewSeededRmBuilder(t, rf, m.ShallowCopy()).ReplaceResource(
|
||||
map[string]interface{}{
|
||||
"group": "apps",
|
||||
"apiVersion": "v1",
|
||||
@@ -390,7 +340,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).replaceResource(
|
||||
}).ReplaceResource(
|
||||
map[string]interface{}{
|
||||
"group": "apps",
|
||||
"apiVersion": "v1",
|
||||
@@ -422,7 +372,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).replaceResource(
|
||||
}).ReplaceResource(
|
||||
map[string]interface{}{
|
||||
"group": "extensions",
|
||||
"apiVersion": "v1beta1",
|
||||
@@ -440,7 +390,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"servicePort": "80",
|
||||
},
|
||||
},
|
||||
}).replaceResource(
|
||||
}).ReplaceResource(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "rbac.authorization.k8s.io/v1",
|
||||
"kind": "ClusterRoleBinding",
|
||||
@@ -454,7 +404,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
"namespace": "test",
|
||||
},
|
||||
},
|
||||
}).replaceResource(
|
||||
}).ReplaceResource(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "rbac.authorization.k8s.io/v1",
|
||||
"kind": "ClusterRole",
|
||||
@@ -473,7 +423,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).replaceResource(
|
||||
}).ReplaceResource(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "batch/v1beta1",
|
||||
"kind": "CronJob",
|
||||
@@ -509,7 +459,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).resMap()
|
||||
}).ResMap()
|
||||
|
||||
nrt := NewNameReferenceTransformer(defaultTransformerConfig.NameReference)
|
||||
err := nrt.Transform(m)
|
||||
@@ -529,7 +479,7 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
|
||||
expectedErr string
|
||||
}{
|
||||
{
|
||||
resMap: NewRmFactory(t, rf).add(
|
||||
resMap: resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "rbac.authorization.k8s.io/v1",
|
||||
"kind": "ClusterRole",
|
||||
@@ -546,10 +496,10 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).resMap(),
|
||||
}).ResMap(),
|
||||
expectedErr: "is expected to be string"},
|
||||
{
|
||||
resMap: NewRmFactory(t, rf).add(
|
||||
resMap: resmaptest_test.NewRmBuilder(t, rf).Add(
|
||||
map[string]interface{}{
|
||||
"apiVersion": "rbac.authorization.k8s.io/v1",
|
||||
"kind": "ClusterRole",
|
||||
@@ -566,7 +516,7 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
}).resMap(),
|
||||
}).ResMap(),
|
||||
expectedErr: "is expected to be either a string or a []interface{}"},
|
||||
}
|
||||
|
||||
@@ -587,7 +537,7 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
|
||||
func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
|
||||
rf := resource.NewFactory(
|
||||
kunstruct.NewKunstructuredFactoryImpl())
|
||||
m := NewRmFactory(t, rf).addWithName(
|
||||
m := resmaptest_test.NewRmBuilder(t, rf).AddWithName(
|
||||
"volume1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -595,7 +545,7 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "someprefix-volume1",
|
||||
},
|
||||
}).addWithName(
|
||||
}).AddWithName(
|
||||
"claim1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -607,9 +557,9 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
|
||||
"spec": map[string]interface{}{
|
||||
"volumeName": "volume1",
|
||||
},
|
||||
}).resMap()
|
||||
}).ResMap()
|
||||
|
||||
expected := NewRmFactory(t, rf).addWithName(
|
||||
expected := resmaptest_test.NewRmBuilder(t, rf).AddWithName(
|
||||
"volume1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -617,7 +567,7 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "someprefix-volume1",
|
||||
},
|
||||
}).addWithName(
|
||||
}).AddWithName(
|
||||
"claim1",
|
||||
map[string]interface{}{
|
||||
"apiVersion": "v1",
|
||||
@@ -629,7 +579,7 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
|
||||
"spec": map[string]interface{}{
|
||||
"volumeName": "someprefix-volume1",
|
||||
},
|
||||
}).resMap()
|
||||
}).ResMap()
|
||||
expected.GetById(
|
||||
resid.NewResId(gvk.Gvk{Version: "v1", Kind: "PersistentVolume"}, "volume1")).AppendRefBy(
|
||||
resid.NewResId(gvk.Gvk{Version: "v1", Kind: "PersistentVolumeClaim"}, "claim1"))
|
||||
|
||||
Reference in New Issue
Block a user