Skip to content

Commit 456d4c2

Browse files
committed
Add tests for Kustomize post renderer
Signed-off-by: Hidde Beydals <hello@hidde.co>
1 parent c8c8246 commit 456d4c2

File tree

2 files changed

+224
-82
lines changed

2 files changed

+224
-82
lines changed

controllers/helmrelease_types_test.go

-82
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
/*
2+
Copyright 2021 The Flux authors
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package runner
18+
19+
import (
20+
"bytes"
21+
"encoding/json"
22+
"reflect"
23+
"testing"
24+
25+
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
26+
"sigs.k8s.io/yaml"
27+
28+
"github.com/fluxcd/pkg/apis/kustomize"
29+
30+
v2 "github.com/fluxcd/helm-controller/api/v2beta1"
31+
)
32+
33+
const replaceImageMock = `apiVersion: v1
34+
kind: Pod
35+
metadata:
36+
name: image
37+
spec:
38+
containers:
39+
- image: repository/image:tag
40+
`
41+
42+
const json6902Mock = `apiVersion: v1
43+
kind: Pod
44+
metadata:
45+
annotations:
46+
c: foo
47+
name: json6902
48+
`
49+
50+
const strategicMergeMock = `apiVersion: apps/v1
51+
kind: Deployment
52+
metadata:
53+
name: nginx
54+
spec:
55+
template:
56+
spec:
57+
containers:
58+
- name: nginx
59+
image: nignx:v1.0.0
60+
`
61+
62+
func Test_postRendererKustomize_Run(t *testing.T) {
63+
tests := []struct {
64+
name string
65+
renderedManifests string
66+
patchesStrategicMerge string
67+
patchesJson6902 string
68+
images string
69+
expectManifests string
70+
expectErr bool
71+
}{
72+
{
73+
name: "image tag",
74+
renderedManifests: replaceImageMock,
75+
images: `
76+
- name: repository/image
77+
newTag: 0.1.0
78+
`,
79+
expectManifests: `apiVersion: v1
80+
kind: Pod
81+
metadata:
82+
name: image
83+
spec:
84+
containers:
85+
- image: repository/image:0.1.0
86+
`,
87+
},
88+
{
89+
name: "image name",
90+
renderedManifests: replaceImageMock,
91+
images: `
92+
- name: repository/image
93+
newName: repository/new-image
94+
`,
95+
expectManifests: `apiVersion: v1
96+
kind: Pod
97+
metadata:
98+
name: image
99+
spec:
100+
containers:
101+
- image: repository/new-image:tag
102+
`,
103+
},
104+
{
105+
name: "image digest",
106+
renderedManifests: replaceImageMock,
107+
images: `
108+
- name: repository/image
109+
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
110+
`,
111+
expectManifests: `apiVersion: v1
112+
kind: Pod
113+
metadata:
114+
name: image
115+
spec:
116+
containers:
117+
- image: repository/image@sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
118+
`,
119+
},
120+
{
121+
name: "json 6902",
122+
renderedManifests: json6902Mock,
123+
patchesJson6902: `
124+
- target:
125+
version: v1
126+
kind: Pod
127+
name: json6902
128+
patch:
129+
- op: test
130+
path: /metadata/annotations/c
131+
value: foo
132+
- op: remove
133+
path: /metadata/annotations/c
134+
- op: add
135+
path: /metadata/annotations/c
136+
value: [ "foo", "bar" ]
137+
- op: replace
138+
path: /metadata/annotations/c
139+
value: 42
140+
- op: move
141+
from: /metadata/annotations/c
142+
path: /metadata/annotations/d
143+
- op: copy
144+
from: /metadata/annotations/d
145+
path: /metadata/annotations/e
146+
`,
147+
expectManifests: `apiVersion: v1
148+
kind: Pod
149+
metadata:
150+
annotations:
151+
d: 42
152+
e: 42
153+
name: json6902
154+
`,
155+
},
156+
{
157+
name: "strategic merge test",
158+
renderedManifests: strategicMergeMock,
159+
patchesStrategicMerge: `
160+
- apiVersion: apps/v1
161+
kind: Deployment
162+
metadata:
163+
name: nginx
164+
spec:
165+
template:
166+
spec:
167+
containers:
168+
- name: nginx
169+
image: nignx:latest
170+
`,
171+
expectManifests: `apiVersion: apps/v1
172+
kind: Deployment
173+
metadata:
174+
name: nginx
175+
spec:
176+
template:
177+
spec:
178+
containers:
179+
- image: nignx:latest
180+
name: nginx
181+
`,
182+
},
183+
}
184+
for _, tt := range tests {
185+
t.Run(tt.name, func(t *testing.T) {
186+
spec, err := mockKustomize(tt.patchesStrategicMerge, tt.patchesJson6902, tt.images)
187+
k := &postRendererKustomize{
188+
spec: spec,
189+
}
190+
gotModifiedManifests, err := k.Run(bytes.NewBufferString(tt.renderedManifests))
191+
if (err != nil) != tt.expectErr {
192+
t.Errorf("Run() error = %v, expectErr %v", err, tt.expectErr)
193+
return
194+
}
195+
if !reflect.DeepEqual(gotModifiedManifests, bytes.NewBufferString(tt.expectManifests)) {
196+
t.Errorf("Run() gotModifiedManifests = %v, want %v", gotModifiedManifests, tt.expectManifests)
197+
}
198+
})
199+
}
200+
}
201+
202+
func mockKustomize(patchesStrategicMerge, patchesJson6902, images string) (*v2.Kustomize, error) {
203+
b, err := yaml.YAMLToJSON([]byte(patchesStrategicMerge))
204+
if err != nil {
205+
return nil, err
206+
}
207+
var strategicMerge []v1.JSON
208+
if err := json.Unmarshal(b, &strategicMerge); err != nil {
209+
return nil, err
210+
}
211+
var json6902 []kustomize.JSON6902Patch
212+
if err := yaml.Unmarshal([]byte(patchesJson6902), &json6902); err != nil {
213+
return nil, err
214+
}
215+
var imgs []kustomize.Image
216+
if err := yaml.Unmarshal([]byte(images), &imgs); err != nil {
217+
return nil, err
218+
}
219+
return &v2.Kustomize{
220+
PatchesStrategicMerge: strategicMerge,
221+
PatchesJSON6902: json6902,
222+
Images: imgs,
223+
}, nil
224+
}

0 commit comments

Comments
 (0)