Merge pull request #1180 from monopole/justTheTestRefactor

Move the rmBuilder test helper to a test package.
This commit is contained in:
Jeff Regan
2019-06-13 16:23:49 -07:00
committed by GitHub
9 changed files with 258 additions and 270 deletions

View File

@@ -345,9 +345,9 @@ func TestResolveVarsWithNoambiguiation(t *testing.T) {
} }
func find(name string, resMap resmap.ResMap) *resource.Resource { func find(name string, resMap resmap.ResMap) *resource.Resource {
for k, v := range resMap.AsMap() { for _, r := range resMap.Resources() {
if k.Name() == name { if r.GetName() == name {
return v return r
} }
} }
return nil return nil

View File

@@ -8,15 +8,13 @@ import (
"reflect" "reflect"
"testing" "testing"
"sigs.k8s.io/kustomize/pkg/resource"
"sigs.k8s.io/kustomize/internal/loadertest" "sigs.k8s.io/kustomize/internal/loadertest"
"sigs.k8s.io/kustomize/pkg/fs" "sigs.k8s.io/kustomize/pkg/fs"
"sigs.k8s.io/kustomize/pkg/gvk" "sigs.k8s.io/kustomize/pkg/gvk"
"sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/ifc"
"sigs.k8s.io/kustomize/pkg/loader" "sigs.k8s.io/kustomize/pkg/loader"
"sigs.k8s.io/kustomize/pkg/resid"
. "sigs.k8s.io/kustomize/pkg/resmap" . "sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/resmaptest"
"sigs.k8s.io/kustomize/pkg/types" "sigs.k8s.io/kustomize/pkg/types"
"sigs.k8s.io/kustomize/pkg/validators" "sigs.k8s.io/kustomize/pkg/validators"
) )
@@ -46,34 +44,27 @@ metadata:
if ferr := l.AddFile("/whatever/project/deployment.yaml", []byte(resourceStr)); ferr != nil { if ferr := l.AddFile("/whatever/project/deployment.yaml", []byte(resourceStr)); ferr != nil {
t.Fatalf("Error adding fake file: %v\n", ferr) t.Fatalf("Error adding fake file: %v\n", ferr)
} }
expected := New() expected := resmaptest_test.NewRmBuilder(t, rf).
expected.Append(rf.FromMap( Add(map[string]interface{}{
map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "dply1", "name": "dply1",
}, }}).
})) Add(map[string]interface{}{
expected.Append(rf.FromMap(
map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "dply2", "name": "dply2",
}, }}).
})) Add(map[string]interface{}{
expected.AppendWithId(
resid.NewResIdWithNamespace(deploy, "dply2", "test"),
rf.FromMap(
map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "dply2", "name": "dply2",
"namespace": "test", "namespace": "test",
}, }}).ResMap()
}))
m, _ := rmF.FromFile(l, "deployment.yaml") m, _ := rmF.FromFile(l, "deployment.yaml")
if m.Size() != 3 { if m.Size() != 3 {
t.Fatalf("result should contain 3, but got %d", m.Size()) t.Fatalf("result should contain 3, but got %d", m.Size())
@@ -94,23 +85,19 @@ kind: ConfigMap
metadata: metadata:
name: cm2 name: cm2
`) `)
expected := New() expected := resmaptest_test.NewRmBuilder(t, rf).
expected.Append(rf.FromMap( Add(map[string]interface{}{
map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm1", "name": "cm1",
}, }}).
})) Add(map[string]interface{}{
expected.Append(rf.FromMap(
map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm2", "name": "cm2",
}, }}).ResMap()
}))
m, err := rmF.NewResMapFromBytes(encoded) m, err := rmF.NewResMapFromBytes(encoded)
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
@@ -147,8 +134,7 @@ func TestNewFromConfigMaps(t *testing.T) {
}, },
filepath: "/whatever/project/app.env", filepath: "/whatever/project/app.env",
content: "DB_USERNAME=admin\nDB_PASSWORD=somepw", content: "DB_USERNAME=admin\nDB_PASSWORD=somepw",
expected: FromMap(map[resid.ResId]*resource.Resource{ expected: resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(cmap, "envConfigMap"): rf.FromMapAndOption(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
@@ -158,9 +144,7 @@ func TestNewFromConfigMaps(t *testing.T) {
"data": map[string]interface{}{ "data": map[string]interface{}{
"DB_USERNAME": "admin", "DB_USERNAME": "admin",
"DB_PASSWORD": "somepw", "DB_PASSWORD": "somepw",
}, }}).ResMap(),
}, &types.GeneratorArgs{}, nil),
}),
}, },
{ {
@@ -176,8 +160,7 @@ func TestNewFromConfigMaps(t *testing.T) {
}, },
filepath: "/whatever/project/app-init.ini", filepath: "/whatever/project/app-init.ini",
content: "FOO=bar\nBAR=baz\n", content: "FOO=bar\nBAR=baz\n",
expected: FromMap(map[resid.ResId]*resource.Resource{ expected: resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(cmap, "fileConfigMap"): rf.FromMapAndOption(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
@@ -189,8 +172,7 @@ func TestNewFromConfigMaps(t *testing.T) {
BAR=baz BAR=baz
`, `,
}, },
}, &types.GeneratorArgs{}, nil), }).ResMap(),
}),
}, },
{ {
description: "construct config map from literal", description: "construct config map from literal",
@@ -204,8 +186,7 @@ BAR=baz
}, },
}, },
}, },
expected: FromMap(map[resid.ResId]*resource.Resource{ expected: resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(cmap, "literalConfigMap"): rf.FromMapAndOption(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
@@ -218,8 +199,7 @@ BAR=baz
"c": "Good Morning", "c": "Good Morning",
"d": "false", "d": "false",
}, },
}, &types.GeneratorArgs{}, nil), }).ResMap(),
}),
}, },
// TODO: add testcase for data coming from multiple sources like // TODO: add testcase for data coming from multiple sources like
@@ -233,14 +213,12 @@ BAR=baz
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }
if !reflect.DeepEqual(r, tc.expected) { if err = tc.expected.ErrorIfNotEqualLists(r); err != nil {
t.Fatalf("in testcase: %q got:\n%+v\n expected:\n%+v\n", tc.description, r, tc.expected) t.Fatalf("testcase: %q, err: %v", tc.description, err)
} }
} }
} }
var secret = gvk.Gvk{Version: "v1", Kind: "Secret"}
func TestNewResMapFromSecretArgs(t *testing.T) { func TestNewResMapFromSecretArgs(t *testing.T) {
secrets := []types.SecretArgs{ secrets := []types.SecretArgs{
{ {
@@ -264,8 +242,7 @@ func TestNewResMapFromSecretArgs(t *testing.T) {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
} }
expected := FromMap(map[resid.ResId]*resource.Resource{ expected := resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(secret, "apple"): rf.FromMapAndOption(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "Secret", "kind": "Secret",
@@ -277,9 +254,8 @@ func TestNewResMapFromSecretArgs(t *testing.T) {
"DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")), "DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")),
"DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")), "DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
}, },
}, &types.GeneratorArgs{}, nil), }).ResMap()
}) if err = expected.ErrorIfNotEqualLists(actual); err != nil {
if !reflect.DeepEqual(actual, expected) { t.Fatalf("error: %s", err)
t.Fatalf("%#v\ndoesn't match expected:\n%#v", actual, expected)
} }
} }

View File

@@ -12,11 +12,11 @@ import (
"sigs.k8s.io/kustomize/pkg/gvk" "sigs.k8s.io/kustomize/pkg/gvk"
"sigs.k8s.io/kustomize/pkg/resid" "sigs.k8s.io/kustomize/pkg/resid"
. "sigs.k8s.io/kustomize/pkg/resmap" . "sigs.k8s.io/kustomize/pkg/resmap"
"sigs.k8s.io/kustomize/pkg/resmaptest"
"sigs.k8s.io/kustomize/pkg/resource" "sigs.k8s.io/kustomize/pkg/resource"
"sigs.k8s.io/kustomize/pkg/types" "sigs.k8s.io/kustomize/pkg/types"
) )
var deploy = gvk.Gvk{Group: "apps", Version: "v1", Kind: "Deployment"}
var rf = resource.NewFactory( var rf = resource.NewFactory(
kunstruct.NewKunstructuredFactoryImpl()) kunstruct.NewKunstructuredFactoryImpl())
var rmF = NewFactory(rf) var rmF = NewFactory(rf)
@@ -160,23 +160,21 @@ kind: ConfigMap
metadata: metadata:
name: cm2 name: cm2
`) `)
input := New() input := resmaptest_test.NewRmBuilder(t, rf).Add(
input.Append(rf.FromMap(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm1", "name": "cm1",
}, },
})) }).Add(
input.Append(rf.FromMap(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm2", "name": "cm2",
}, },
})) }).ResMap()
out, err := input.AsYaml() out, err := input.AsYaml()
if err != nil { if err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)
@@ -391,24 +389,21 @@ func TestFilterBy(t *testing.T) {
} }
func TestDeepCopy(t *testing.T) { func TestDeepCopy(t *testing.T) {
rm1 := FromMap(map[resid.ResId]*resource.Resource{ rm1 := resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(cmap, "cm1"): rf.FromMap(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm1", "name": "cm1",
}, },
}), }).Add(
resid.NewResId(cmap, "cm2"): rf.FromMap(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm2", "name": "cm2",
}, },
}), }).ResMap()
})
rm2 := rm1.DeepCopy() rm2 := rm1.DeepCopy()
@@ -505,40 +500,34 @@ func TestGetMatchingIds(t *testing.T) {
} }
func TestErrorIfNotEqual(t *testing.T) { func TestErrorIfNotEqual(t *testing.T) {
rm1 := FromMap(map[resid.ResId]*resource.Resource{ rm1 := resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(cmap, "cm1"): rf.FromMap(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm1", "name": "cm1",
}, },
}), }).Add(map[string]interface{}{
resid.NewResId(cmap, "cm2"): rf.FromMap(
map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm2", "name": "cm2",
}, },
}), }).ResMap()
})
err := rm1.ErrorIfNotEqualSets(rm1) err := rm1.ErrorIfNotEqualSets(rm1)
if err != nil { if err != nil {
t.Fatalf("%v should equal itself %v", rm1, err) t.Fatalf("%v should equal itself %v", rm1, err)
} }
rm2 := FromMap(map[resid.ResId]*resource.Resource{ rm2 := resmaptest_test.NewRmBuilder(t, rf).Add(
resid.NewResId(cmap, "cm1"): rf.FromMap(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ConfigMap", "kind": "ConfigMap",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "cm1", "name": "cm1",
}, },
}), }).ResMap()
})
// test the different number of keys path // test the different number of keys path
err = rm1.ErrorIfNotEqualSets(rm2) err = rm1.ErrorIfNotEqualSets(rm2)
@@ -602,8 +591,12 @@ func TestAppendAll(t *testing.T) {
input2 := rmF.FromResource(r2) input2 := rmF.FromResource(r2)
expected := New() expected := New()
expected.Append(r1) if err := expected.Append(r1); err != nil {
expected.Append(r2) 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 { if err := input1.AppendAll(input2); err != nil {
t.Fatalf("unexpected error: %v", err) t.Fatalf("unexpected error: %v", err)

View 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
}

View File

@@ -1,18 +1,5 @@
/* // Copyright 2019 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors. // SPDX-License-Identifier: Apache-2.0
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.
*/
package resource 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) 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. // FromMapAndOption returns a new instance of Resource with given options.
func (rf *Factory) FromMapAndOption( func (rf *Factory) FromMapAndOption(
m map[string]interface{}, args *types.GeneratorArgs, option *types.GeneratorOptions) *Resource { m map[string]interface{}, args *types.GeneratorArgs, option *types.GeneratorOptions) *Resource {
@@ -75,7 +67,7 @@ func (rf *Factory) makeOne(
Kunstructured: u, Kunstructured: u,
options: o, 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 // SliceFromPatches returns a slice of resources given a patch path

View File

@@ -32,6 +32,7 @@ import (
type Resource struct { type Resource struct {
ifc.Kunstructured ifc.Kunstructured
originalName string originalName string
originalNs string
options *types.GenArgs options *types.GenArgs
refBy []resid.ResId refBy []resid.ResId
refVarNames []string refVarNames []string
@@ -57,6 +58,7 @@ func (r *Resource) Replace(other *Resource) {
func (r *Resource) copyOtherFields(other *Resource) { func (r *Resource) copyOtherFields(other *Resource) {
r.originalName = other.originalName r.originalName = other.originalName
r.originalNs = other.originalNs
r.options = other.options r.options = other.options
r.refBy = other.copyRefBy() r.refBy = other.copyRefBy()
r.refVarNames = other.copyRefVarNames() r.refVarNames = other.copyRefVarNames()
@@ -98,6 +100,16 @@ func (r *Resource) setOriginalName(n string) *Resource {
return r 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. // String returns resource as JSON.
func (r *Resource) String() string { func (r *Resource) String() string {
bs, err := r.MarshalJSON() bs, err := r.MarshalJSON()
@@ -134,10 +146,16 @@ func (r *Resource) GetNamespace() string {
return namespace return namespace
} }
// Id returns the ResId for the resource. // Id returns the immutable ResId for the resource.
func (r *Resource) Id() resid.ResId { func (r *Resource) Id() resid.ResId {
return resid.NewResIdWithPrefixNamespace( return resid.NewResIdWithNamespace(
r.GetGvk(), r.GetOriginalName(), "", r.GetNamespace()) 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 // GetRefBy returns the ResIds that referred to current resource

View File

@@ -214,9 +214,9 @@ func TestResourceNotFound(t *testing.T) {
} }
func findSecret(m resmap.ResMap) *resource.Resource { func findSecret(m resmap.ResMap) *resource.Resource {
for id, res := range m.AsMap() { for _, r := range m.Resources() {
if id.Gvk().Kind == "Secret" { if r.Id().Gvk().Kind == "Secret" {
return res return r
} }
} }
return nil return nil

View File

@@ -1,18 +1,5 @@
/* // Copyright 2019 The Kubernetes Authors.
Copyright 2018 The Kubernetes Authors. // SPDX-License-Identifier: Apache-2.0
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.
*/
package target_test package target_test

View File

@@ -5,6 +5,7 @@ package transformers
import ( import (
"sigs.k8s.io/kustomize/pkg/gvk" "sigs.k8s.io/kustomize/pkg/gvk"
"sigs.k8s.io/kustomize/pkg/resmaptest"
"strings" "strings"
"testing" "testing"
@@ -14,61 +15,10 @@ import (
"sigs.k8s.io/kustomize/pkg/resource" "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) { func TestNameReferenceHappyRun(t *testing.T) {
rf := resource.NewFactory( rf := resource.NewFactory(
kunstruct.NewKunstructuredFactoryImpl()) kunstruct.NewKunstructuredFactoryImpl())
m := NewRmFactory(t, rf).addWithName( m := resmaptest_test.NewRmBuilder(t, rf).AddWithName(
"cm1", "cm1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -76,7 +26,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "someprefix-cm1-somehash", "name": "someprefix-cm1-somehash",
}, },
}).addWithName( }).AddWithName(
"cm2", "cm2",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -84,7 +34,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "someprefix-cm2-somehash", "name": "someprefix-cm2-somehash",
}, },
}).addWithName( }).AddWithName(
"secret1", "secret1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -92,7 +42,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "someprefix-secret1-somehash", "name": "someprefix-secret1-somehash",
}, },
}).addWithName( }).AddWithName(
"claim1", "claim1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -100,7 +50,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "someprefix-claim1", "name": "someprefix-claim1",
}, },
}).add( }).Add(
map[string]interface{}{ map[string]interface{}{
"group": "extensions", "group": "extensions",
"apiVersion": "v1beta1", "apiVersion": "v1beta1",
@@ -119,7 +69,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
).add( ).Add(
map[string]interface{}{ map[string]interface{}{
"group": "apps", "group": "apps",
"apiVersion": "v1", "apiVersion": "v1",
@@ -199,7 +149,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).add( }).Add(
map[string]interface{}{ map[string]interface{}{
"group": "apps", "group": "apps",
"apiVersion": "v1", "apiVersion": "v1",
@@ -231,7 +181,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).addWithName("sa", }).AddWithName("sa",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
"kind": "ServiceAccount", "kind": "ServiceAccount",
@@ -239,7 +189,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"name": "someprefix-sa", "name": "someprefix-sa",
"namespace": "test", "namespace": "test",
}, },
}).add( }).Add(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "rbac.authorization.k8s.io/v1", "apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRoleBinding", "kind": "ClusterRoleBinding",
@@ -253,7 +203,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"namespace": "test", "namespace": "test",
}, },
}, },
}).add( }).Add(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "rbac.authorization.k8s.io/v1", "apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRole", "kind": "ClusterRole",
@@ -272,7 +222,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).add( }).Add(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "batch/v1beta1", "apiVersion": "batch/v1beta1",
"kind": "CronJob", "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{}{ map[string]interface{}{
"group": "apps", "group": "apps",
"apiVersion": "v1", "apiVersion": "v1",
@@ -390,7 +340,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).replaceResource( }).ReplaceResource(
map[string]interface{}{ map[string]interface{}{
"group": "apps", "group": "apps",
"apiVersion": "v1", "apiVersion": "v1",
@@ -422,7 +372,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).replaceResource( }).ReplaceResource(
map[string]interface{}{ map[string]interface{}{
"group": "extensions", "group": "extensions",
"apiVersion": "v1beta1", "apiVersion": "v1beta1",
@@ -440,7 +390,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"servicePort": "80", "servicePort": "80",
}, },
}, },
}).replaceResource( }).ReplaceResource(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "rbac.authorization.k8s.io/v1", "apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRoleBinding", "kind": "ClusterRoleBinding",
@@ -454,7 +404,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
"namespace": "test", "namespace": "test",
}, },
}, },
}).replaceResource( }).ReplaceResource(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "rbac.authorization.k8s.io/v1", "apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRole", "kind": "ClusterRole",
@@ -473,7 +423,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).replaceResource( }).ReplaceResource(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "batch/v1beta1", "apiVersion": "batch/v1beta1",
"kind": "CronJob", "kind": "CronJob",
@@ -509,7 +459,7 @@ func TestNameReferenceHappyRun(t *testing.T) {
}, },
}, },
}, },
}).resMap() }).ResMap()
nrt := NewNameReferenceTransformer(defaultTransformerConfig.NameReference) nrt := NewNameReferenceTransformer(defaultTransformerConfig.NameReference)
err := nrt.Transform(m) err := nrt.Transform(m)
@@ -529,7 +479,7 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
expectedErr string expectedErr string
}{ }{
{ {
resMap: NewRmFactory(t, rf).add( resMap: resmaptest_test.NewRmBuilder(t, rf).Add(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "rbac.authorization.k8s.io/v1", "apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRole", "kind": "ClusterRole",
@@ -546,10 +496,10 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
}, },
}, },
}, },
}).resMap(), }).ResMap(),
expectedErr: "is expected to be string"}, expectedErr: "is expected to be string"},
{ {
resMap: NewRmFactory(t, rf).add( resMap: resmaptest_test.NewRmBuilder(t, rf).Add(
map[string]interface{}{ map[string]interface{}{
"apiVersion": "rbac.authorization.k8s.io/v1", "apiVersion": "rbac.authorization.k8s.io/v1",
"kind": "ClusterRole", "kind": "ClusterRole",
@@ -566,7 +516,7 @@ func TestNameReferenceUnhappyRun(t *testing.T) {
}, },
}, },
}, },
}).resMap(), }).ResMap(),
expectedErr: "is expected to be either a string or a []interface{}"}, 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) { func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
rf := resource.NewFactory( rf := resource.NewFactory(
kunstruct.NewKunstructuredFactoryImpl()) kunstruct.NewKunstructuredFactoryImpl())
m := NewRmFactory(t, rf).addWithName( m := resmaptest_test.NewRmBuilder(t, rf).AddWithName(
"volume1", "volume1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -595,7 +545,7 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "someprefix-volume1", "name": "someprefix-volume1",
}, },
}).addWithName( }).AddWithName(
"claim1", "claim1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -607,9 +557,9 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"volumeName": "volume1", "volumeName": "volume1",
}, },
}).resMap() }).ResMap()
expected := NewRmFactory(t, rf).addWithName( expected := resmaptest_test.NewRmBuilder(t, rf).AddWithName(
"volume1", "volume1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -617,7 +567,7 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "someprefix-volume1", "name": "someprefix-volume1",
}, },
}).addWithName( }).AddWithName(
"claim1", "claim1",
map[string]interface{}{ map[string]interface{}{
"apiVersion": "v1", "apiVersion": "v1",
@@ -629,7 +579,7 @@ func TestNameReferencePersistentVolumeHappyRun(t *testing.T) {
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"volumeName": "someprefix-volume1", "volumeName": "someprefix-volume1",
}, },
}).resMap() }).ResMap()
expected.GetById( expected.GetById(
resid.NewResId(gvk.Gvk{Version: "v1", Kind: "PersistentVolume"}, "volume1")).AppendRefBy( resid.NewResId(gvk.Gvk{Version: "v1", Kind: "PersistentVolume"}, "volume1")).AppendRefBy(
resid.NewResId(gvk.Gvk{Version: "v1", Kind: "PersistentVolumeClaim"}, "claim1")) resid.NewResId(gvk.Gvk{Version: "v1", Kind: "PersistentVolumeClaim"}, "claim1"))