Skip to content

Commit f53dafc

Browse files
authored
chore: add unit tests (#1819)
Signed-off-by: Charles-Edouard Brétéché <[email protected]>
1 parent cbf26e0 commit f53dafc

File tree

4 files changed

+139
-2
lines changed

4 files changed

+139
-2
lines changed

pkg/utils/yaml/with-anchors.yaml

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
apiVersion: chainsaw.kyverno.io/v1alpha1
2+
kind: Test
3+
metadata:
4+
name: &name yaml-anchors
5+
spec:
6+
namespace: &namespace default
7+
steps:
8+
- name: *name
9+
try:
10+
- apply:
11+
resource: &resource
12+
apiVersion: v1
13+
kind: Pod
14+
metadata:
15+
name: *name
16+
namespace: *namespace
17+
spec:
18+
containers:
19+
- name: main
20+
image: alpine
21+
- assert:
22+
resource:
23+
<<: *resource
24+
spec:
25+
restartPolicy: Always
26+
timeout: 1s

pkg/utils/yaml/without-anchors.yaml

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: chainsaw.kyverno.io/v1alpha1
2+
kind: Test
3+
metadata:
4+
name: yaml-anchors
5+
spec:
6+
namespace: default
7+
steps:
8+
- name: yaml-anchors
9+
try:
10+
- apply:
11+
resource:
12+
apiVersion: v1
13+
kind: Pod
14+
metadata:
15+
name: yaml-anchors
16+
namespace: default
17+
spec:
18+
containers:
19+
- image: alpine
20+
name: main
21+
- assert:
22+
resource:
23+
apiVersion: v1
24+
kind: Pod
25+
metadata:
26+
name: yaml-anchors
27+
namespace: default
28+
spec:
29+
restartPolicy: Always
30+
timeout: 1s

pkg/utils/yaml/yaml.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@ import (
44
"gopkg.in/yaml.v3"
55
)
66

7-
func Remarshal(document []byte) ([]byte, error) {
7+
func remarshal(document []byte, unmarshal func(in []byte, out interface{}) (err error)) ([]byte, error) {
8+
if unmarshal == nil {
9+
unmarshal = yaml.Unmarshal
10+
}
811
var pre map[string]any
9-
err := yaml.Unmarshal(document, &pre)
12+
err := unmarshal(document, &pre)
1013
if err != nil {
1114
return nil, err
1215
}
1316
return yaml.Marshal(pre)
1417
}
18+
19+
func Remarshal(document []byte) ([]byte, error) {
20+
return remarshal(document, nil)
21+
}

pkg/utils/yaml/yaml_test.go

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package yaml
2+
3+
import (
4+
"errors"
5+
"os"
6+
"testing"
7+
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func Test_remarshal(t *testing.T) {
12+
in, err := os.ReadFile("with-anchors.yaml")
13+
assert.NoError(t, err)
14+
out, err := os.ReadFile("without-anchors.yaml")
15+
assert.NoError(t, err)
16+
tests := []struct {
17+
name string
18+
document string
19+
unmarshal func(in []byte, out interface{}) (err error)
20+
want string
21+
wantErr bool
22+
}{{
23+
name: "ok",
24+
document: string(in),
25+
want: string(out),
26+
wantErr: false,
27+
}, {
28+
name: "error",
29+
unmarshal: func(in []byte, out interface{}) (err error) {
30+
return errors.New("dummy")
31+
},
32+
wantErr: true,
33+
}}
34+
for _, tt := range tests {
35+
t.Run(tt.name, func(t *testing.T) {
36+
got, err := remarshal([]byte(tt.document), tt.unmarshal)
37+
if tt.wantErr {
38+
assert.Error(t, err)
39+
} else {
40+
assert.NoError(t, err)
41+
}
42+
assert.Equal(t, tt.want, string(got))
43+
})
44+
}
45+
}
46+
47+
func TestRemarshal(t *testing.T) {
48+
in, err := os.ReadFile("with-anchors.yaml")
49+
assert.NoError(t, err)
50+
out, err := os.ReadFile("without-anchors.yaml")
51+
assert.NoError(t, err)
52+
tests := []struct {
53+
name string
54+
document string
55+
want string
56+
wantErr bool
57+
}{{
58+
name: "ok",
59+
document: string(in),
60+
want: string(out),
61+
wantErr: false,
62+
}}
63+
for _, tt := range tests {
64+
t.Run(tt.name, func(t *testing.T) {
65+
got, err := Remarshal([]byte(tt.document))
66+
if tt.wantErr {
67+
assert.Error(t, err)
68+
} else {
69+
assert.NoError(t, err)
70+
}
71+
assert.Equal(t, tt.want, string(got))
72+
})
73+
}
74+
}

0 commit comments

Comments
 (0)