mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
Merge pull request #250 from ivan4th/fix-resource-load-crash
Don't crash on resource load errors
This commit is contained in:
@@ -19,6 +19,7 @@ package app
|
|||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/kubernetes-sigs/kustomize/pkg/constants"
|
"github.com/kubernetes-sigs/kustomize/pkg/constants"
|
||||||
@@ -197,6 +198,27 @@ func TestResources1(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestResourceNotFound(t *testing.T) {
|
||||||
|
l := loadertest.NewFakeLoader("/testpath")
|
||||||
|
err := l.AddFile("/testpath/"+constants.KustomizationFileName, []byte(kustomizationContent1))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Failed to setup fake ldr.")
|
||||||
|
}
|
||||||
|
fakeFs := fs.MakeFakeFS()
|
||||||
|
fakeFs.Mkdir("/")
|
||||||
|
app, err := NewApplication(l, fakeFs)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Unexpected construction error %v", err)
|
||||||
|
}
|
||||||
|
_, err = app.MakeCustomizedResMap()
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("Didn't get the expected error for an unknown resource")
|
||||||
|
}
|
||||||
|
if !strings.Contains(err.Error(), `cannot read file "/testpath/deployment.yaml"`) {
|
||||||
|
t.Fatalf("Unpexpected error message %q", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRawResources1(t *testing.T) {
|
func TestRawResources1(t *testing.T) {
|
||||||
expected := resmap.ResMap{
|
expected := resmap.ResMap{
|
||||||
resource.NewResId(deploy, "dply1"): resource.NewResourceFromMap(
|
resource.NewResId(deploy, "dply1"): resource.NewResourceFromMap(
|
||||||
|
|||||||
@@ -211,10 +211,14 @@ func newResourceSliceFromBytes(in []byte) ([]*resource.Resource, error) {
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// MergeWithoutOverride combines multiple ResMap instances, failing on key collision.
|
// MergeWithoutOverride combines multiple ResMap instances, failing on key collision
|
||||||
|
// and skipping nil maps. In case if all of the maps are nil, an empty ResMap is returned.
|
||||||
func MergeWithoutOverride(maps ...ResMap) (ResMap, error) {
|
func MergeWithoutOverride(maps ...ResMap) (ResMap, error) {
|
||||||
result := ResMap{}
|
result := ResMap{}
|
||||||
for _, m := range maps {
|
for _, m := range maps {
|
||||||
|
if m == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
for id, res := range m {
|
for id, res := range m {
|
||||||
if _, found := result[id]; found {
|
if _, found := result[id]; found {
|
||||||
return nil, fmt.Errorf("id '%q' already used", id)
|
return nil, fmt.Errorf("id '%q' already used", id)
|
||||||
@@ -226,14 +230,21 @@ func MergeWithoutOverride(maps ...ResMap) (ResMap, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MergeWithOverride combines multiple ResMap instances, allowing and sometimes
|
// MergeWithOverride combines multiple ResMap instances, allowing and sometimes
|
||||||
// demanding certain collisions.
|
// demanding certain collisions and skipping nil maps.
|
||||||
|
// In case if all of the maps are nil, an empty ResMap is returned.
|
||||||
// When looping over the instances to combine them, if a resource id for resource X
|
// When looping over the instances to combine them, if a resource id for resource X
|
||||||
// is found to be already in the combined map, then the behavior field for X
|
// is found to be already in the combined map, then the behavior field for X
|
||||||
// must be BehaviorMerge or BehaviorReplace. If X is not in the map, then it's
|
// must be BehaviorMerge or BehaviorReplace. If X is not in the map, then it's
|
||||||
// behavior cannot be merge or replace.
|
// behavior cannot be merge or replace.
|
||||||
func MergeWithOverride(maps ...ResMap) (ResMap, error) {
|
func MergeWithOverride(maps ...ResMap) (ResMap, error) {
|
||||||
result := maps[0]
|
result := maps[0]
|
||||||
|
if result == nil {
|
||||||
|
result = ResMap{}
|
||||||
|
}
|
||||||
for _, m := range maps[1:] {
|
for _, m := range maps[1:] {
|
||||||
|
if m == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
for id, r := range m {
|
for id, r := range m {
|
||||||
matchedId := result.FindByGVKN(id)
|
matchedId := result.FindByGVKN(id)
|
||||||
if len(matchedId) == 1 {
|
if len(matchedId) == 1 {
|
||||||
|
|||||||
@@ -202,6 +202,22 @@ func TestMergeWithoutOverride(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(merged, expected) {
|
if !reflect.DeepEqual(merged, expected) {
|
||||||
t.Fatalf("%#v doesn't equal expected %#v", merged, expected)
|
t.Fatalf("%#v doesn't equal expected %#v", merged, expected)
|
||||||
}
|
}
|
||||||
|
input3 := []ResMap{merged, nil}
|
||||||
|
merged1, err := MergeWithoutOverride(input3...)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(merged1, expected) {
|
||||||
|
t.Fatalf("%#v doesn't equal expected %#v", merged1, expected)
|
||||||
|
}
|
||||||
|
input4 := []ResMap{nil, merged}
|
||||||
|
merged2, err := MergeWithoutOverride(input4...)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(merged2, expected) {
|
||||||
|
t.Fatalf("%#v doesn't equal expected %#v", merged2, expected)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMergeWithOverride(t *testing.T) {
|
func TestMergeWithOverride(t *testing.T) {
|
||||||
@@ -262,4 +278,20 @@ func TestMergeWithOverride(t *testing.T) {
|
|||||||
if !reflect.DeepEqual(merged, expected) {
|
if !reflect.DeepEqual(merged, expected) {
|
||||||
t.Fatalf("%#v doesn't equal expected %#v", merged, expected)
|
t.Fatalf("%#v doesn't equal expected %#v", merged, expected)
|
||||||
}
|
}
|
||||||
|
input3 := []ResMap{merged, nil}
|
||||||
|
merged1, err := MergeWithOverride(input3...)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(merged1, expected) {
|
||||||
|
t.Fatalf("%#v doesn't equal expected %#v", merged1, expected)
|
||||||
|
}
|
||||||
|
input4 := []ResMap{nil, merged}
|
||||||
|
merged2, err := MergeWithOverride(input4...)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(merged2, expected) {
|
||||||
|
t.Fatalf("%#v doesn't equal expected %#v", merged2, expected)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user