Skip to content

Commit cdc9f0c

Browse files
author
Mengqi Yu
authored
parse results in resourceList (#571)
1 parent bf46a77 commit cdc9f0c

File tree

2 files changed

+55
-5
lines changed

2 files changed

+55
-5
lines changed

go/fn/resourcelist.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ func CheckResourceDuplication(rl *ResourceList) error {
6363
idMap := map[yaml.ResourceIdentifier]struct{}{}
6464
for _, obj := range rl.Items {
6565
id := obj.resourceIdentifier()
66-
if _, ok := idMap[*id]; ok{
67-
return fmt.Errorf("duplicate Resource(apiVersion=%v, kind=%v, Namespace=%v, Name=%v)",
66+
if _, ok := idMap[*id]; ok {
67+
return fmt.Errorf("duplicate Resource(apiVersion=%v, kind=%v, Namespace=%v, Name=%v)",
6868
obj.GetAPIVersion(), obj.GetKind(), obj.GetNamespace(), obj.GetName())
6969
}
7070
idMap[*id] = struct{}{}
@@ -96,12 +96,25 @@ func ParseResourceList(in []byte) (*ResourceList, error) {
9696
}
9797
objectItems, err := items.Elements()
9898
if err != nil {
99-
return nil, fmt.Errorf("failed extract objects from items: %w", err)
99+
return nil, fmt.Errorf("failed to extract objects from items: %w", err)
100100
}
101101
for i := range objectItems {
102102
rl.Items = append(rl.Items, asKubeObject(objectItems[i]))
103103
}
104104

105+
res, found, err := rlObj.obj.GetNestedSlice("results")
106+
if err != nil {
107+
return nil, fmt.Errorf("failed when tried to get results: %w", err)
108+
}
109+
if found {
110+
var results Results
111+
err = res.Node().Decode(&results)
112+
if err != nil {
113+
return nil, fmt.Errorf("failed to decode results: %w", err)
114+
}
115+
rl.Results = results
116+
}
117+
105118
return rl, nil
106119
}
107120

go/fn/resourcelist_test.go

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package fn
22

3-
import "testing"
3+
import (
4+
"testing"
5+
6+
"github.com/google/go-cmp/cmp"
7+
)
48

59
var dupResourceInput = []byte(`
610
apiVersion: config.kubernetes.io/v1
@@ -24,6 +28,39 @@ func TestCheckResourceDuplication(t *testing.T) {
2428
}
2529
expectErr := "duplicate Resource(apiVersion=v1, kind=Namespace, Namespace=, Name=example)"
2630
if err.Error() != expectErr {
27-
t.Errorf("expect CheckResourceDuplication to fail; got %v, want %v", err ,expectErr)
31+
t.Errorf("expect CheckResourceDuplication to fail; got %v, want %v", err, expectErr)
32+
}
33+
}
34+
35+
func TestParseResourceListResults(t *testing.T) {
36+
rl, err := ParseResourceList([]byte(`
37+
apiVersion: config.kubernetes.io/v1
38+
kind: ResourceList
39+
items:
40+
- apiVersion: v1
41+
kind: Namespace
42+
metadata:
43+
name: example
44+
results:
45+
- message: foo
46+
severity: error
47+
- message: bar
48+
severity: warning
49+
`))
50+
if err != nil {
51+
t.Fatalf("unexpected error: %v", err)
52+
}
53+
expected := Results{
54+
{
55+
Message: "foo",
56+
Severity: Error,
57+
},
58+
{
59+
Message: "bar",
60+
Severity: Warning,
61+
},
62+
}
63+
if !cmp.Equal(expected, rl.Results) {
64+
t.Fatalf("unexpected diff: %v", cmp.Diff(expected, rl.Results))
2865
}
2966
}

0 commit comments

Comments
 (0)