Skip to content

Commit e002b49

Browse files
authored
hotfix: return error instead of log at FromMapAndOption (#5381)
* hotfix: return error instead of log at `FromMapAndOption` * chore: show error message * hotfix: use correct function * hotix: use `t.Helper()` and fix `t *testing.T order * hotfix: wrapt the error of `FromMapAndOption` * hotfix: meaningful message for an error * hotfix: summarize in one line * hotfix: fix the abandoned error and show meaningful message * hotfix: start with helper function * Keep TODO comment
1 parent bd435d4 commit e002b49

File tree

3 files changed

+50
-25
lines changed

3 files changed

+50
-25
lines changed

api/internal/plugins/utils/utils_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func makeConfigMap(rf *resource.Factory, name, behavior string, hashValue *strin
5353
return r
5454
}
5555

56-
func makeConfigMapOptions(rf *resource.Factory, name, behavior string, disableHash bool) *resource.Resource {
56+
func makeConfigMapOptions(rf *resource.Factory, name, behavior string, disableHash bool) (*resource.Resource, error) {
5757
return rf.FromMapAndOption(map[string]interface{}{
5858
"apiVersion": "v1",
5959
"kind": "ConfigMap",
@@ -89,7 +89,11 @@ func TestUpdateResourceOptions(t *testing.T) {
8989
name := fmt.Sprintf("test%d", i)
9090
err := in.Append(makeConfigMap(rf, name, c.behavior, c.hashValue))
9191
require.NoError(t, err)
92-
err = expected.Append(makeConfigMapOptions(rf, name, c.behavior, !c.needsHash))
92+
config, err := makeConfigMapOptions(rf, name, c.behavior, !c.needsHash)
93+
if err != nil {
94+
t.Errorf("expected new instance with an options but got error: %v", err)
95+
}
96+
err = expected.Append(config)
9397
require.NoError(t, err)
9498
}
9599
actual, err := UpdateResourceOptions(in)

api/resmap/reswrangler_test.go

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -822,8 +822,9 @@ func TestAppendAll(t *testing.T) {
822822
}
823823
}
824824

825-
func makeMap1() ResMap {
826-
return rmF.FromResource(rf.FromMapAndOption(
825+
func makeMap1(t *testing.T) ResMap {
826+
t.Helper()
827+
r, err := rf.FromMapAndOption(
827828
map[string]interface{}{
828829
"apiVersion": "apps/v1",
829830
"kind": "ConfigMap",
@@ -836,11 +837,16 @@ func makeMap1() ResMap {
836837
},
837838
}, &types.GeneratorArgs{
838839
Behavior: "create",
839-
}))
840+
})
841+
if err != nil {
842+
t.Fatalf("expected new intance with an options but got error: %v", err)
843+
}
844+
return rmF.FromResource(r)
840845
}
841846

842-
func makeMap2(b types.GenerationBehavior) ResMap {
843-
return rmF.FromResource(rf.FromMapAndOption(
847+
func makeMap2(t *testing.T, b types.GenerationBehavior) ResMap {
848+
t.Helper()
849+
r, err := rf.FromMapAndOption(
844850
map[string]interface{}{
845851
"apiVersion": "apps/v1",
846852
"kind": "ConfigMap",
@@ -854,14 +860,19 @@ func makeMap2(b types.GenerationBehavior) ResMap {
854860
},
855861
}, &types.GeneratorArgs{
856862
Behavior: b.String(),
857-
}))
863+
})
864+
if err != nil {
865+
t.Fatalf("expected new intance with an options but got error: %v", err)
866+
}
867+
return rmF.FromResource(r)
858868
}
859869

860870
func TestAbsorbAll(t *testing.T) {
861871
metadata := map[string]interface{}{
862872
"name": "cmap",
863873
}
864-
expected := rmF.FromResource(rf.FromMapAndOption(
874+
875+
r, err := rf.FromMapAndOption(
865876
map[string]interface{}{
866877
"apiVersion": "apps/v1",
867878
"kind": "ConfigMap",
@@ -874,24 +885,26 @@ func TestAbsorbAll(t *testing.T) {
874885
},
875886
&types.GeneratorArgs{
876887
Behavior: "create",
877-
}))
878-
w := makeMap1()
879-
assert.NoError(t, w.AbsorbAll(makeMap2(types.BehaviorMerge)))
888+
})
889+
if err != nil {
890+
t.Fatalf("expected new intance with an options but got error: %v", err)
891+
}
892+
expected := rmF.FromResource(r)
893+
w := makeMap1(t)
894+
assert.NoError(t, w.AbsorbAll(makeMap2(t, types.BehaviorMerge)))
880895
expected.RemoveBuildAnnotations()
881896
w.RemoveBuildAnnotations()
882897
assert.NoError(t, expected.ErrorIfNotEqualLists(w))
883-
w = makeMap1()
898+
w = makeMap1(t)
884899
assert.NoError(t, w.AbsorbAll(nil))
885-
assert.NoError(t, w.ErrorIfNotEqualLists(makeMap1()))
900+
assert.NoError(t, w.ErrorIfNotEqualLists(makeMap1(t)))
886901

887-
w = makeMap1()
888-
w2 := makeMap2(types.BehaviorReplace)
902+
w = makeMap1(t)
903+
w2 := makeMap2(t, types.BehaviorReplace)
889904
assert.NoError(t, w.AbsorbAll(w2))
890905
w2.RemoveBuildAnnotations()
891906
assert.NoError(t, w2.ErrorIfNotEqualLists(w))
892-
w = makeMap1()
893-
w2 = makeMap2(types.BehaviorUnspecified)
894-
err := w.AbsorbAll(w2)
907+
err = makeMap1(t).AbsorbAll(makeMap2(t, types.BehaviorUnspecified))
895908
assert.Error(t, err)
896909
assert.True(
897910
t, strings.Contains(err.Error(), "behavior must be merge or replace"))

api/resource/factory.go

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ func (rf *Factory) Hasher() ifc.KustHasher {
4242

4343
// FromMap returns a new instance of Resource.
4444
func (rf *Factory) FromMap(m map[string]interface{}) *Resource {
45-
return rf.FromMapAndOption(m, nil)
45+
res, err := rf.FromMapAndOption(m, nil)
46+
if err != nil {
47+
// TODO: return err instead of log.
48+
log.Fatalf("failed to create resource from map: %v", err)
49+
}
50+
return res
4651
}
4752

4853
// FromMapWithName returns a new instance with the given "original" name.
@@ -52,19 +57,22 @@ func (rf *Factory) FromMapWithName(n string, m map[string]interface{}) *Resource
5257

5358
// FromMapWithNamespaceAndName returns a new instance with the given "original" namespace.
5459
func (rf *Factory) FromMapWithNamespaceAndName(ns string, n string, m map[string]interface{}) *Resource {
55-
r := rf.FromMapAndOption(m, nil)
60+
r, err := rf.FromMapAndOption(m, nil)
61+
if err != nil {
62+
// TODO: return err instead of log.
63+
log.Fatalf("failed to create resource from map: %v", err)
64+
}
5665
return r.setPreviousId(ns, n, r.GetKind())
5766
}
5867

5968
// FromMapAndOption returns a new instance of Resource with given options.
6069
func (rf *Factory) FromMapAndOption(
61-
m map[string]interface{}, args *types.GeneratorArgs) *Resource {
70+
m map[string]interface{}, args *types.GeneratorArgs) (*Resource, error) {
6271
n, err := yaml.FromMap(m)
6372
if err != nil {
64-
// TODO: return err instead of log.
65-
log.Fatal(err)
73+
return nil, fmt.Errorf("failed to convert map to YAML node: %w", err)
6674
}
67-
return rf.makeOne(n, args)
75+
return rf.makeOne(n, args), nil
6876
}
6977

7078
// makeOne returns a new instance of Resource.

0 commit comments

Comments
 (0)