1 package edgerelease
2
3 import (
4 "errors"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8
9 "edge-infra.dev/pkg/edge/component/build/image"
10 )
11
12 func TestConfigValidation(t *testing.T) {
13 validMetadata := Metadata{
14 "97117a2b07f13a6ffe423af362e13912412d3492",
15 "499021129",
16 "0.0.1-rc.499021129.97117a.2021-01-20",
17 "built.2021-01-20.17-04-04.0000UTC",
18 "edge-infra",
19 "ncrvoyix-swt-retail",
20 }
21 validImgShort := []PodImage{
22 {
23 Image: image.Image{
24 Repository: "edge-agent",
25 Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f",
26 },
27 },
28 }
29 validImgRepo := []PodImage{
30 {
31 Image: image.Image{
32 Repository: "edge-agent",
33 Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f",
34 Registry: "ncr-emeraldedge-docker-dev.jfrog.io",
35 },
36 },
37 }
38 validCmpShort := []Component{
39 {
40 Name: "edge-agent",
41 Images: validImgShort,
42 },
43 }
44
45 tcs := []struct {
46 name string
47 config EdgeRelease
48 expected error
49 }{
50 {
51 name: "Incomplete metadata: id",
52 config: config(Spec{
53 "gcr.io/edge-dev-alpha",
54 Metadata{
55 "97117a2b07f13a6ffe423af362e13912412d3492",
56 "",
57 "0.0.1-rc.499021129.97117a.2021-01-20",
58 "built.2021-01-20.17-04-04.0000UTC",
59 "edge-infra",
60 "ncrvoyix-swt-retail",
61 },
62 true,
63 validCmpShort,
64 []image.Image{},
65 }),
66 expected: ErrIncompleteMetadata,
67 },
68 {
69 name: "Incomplete metadata: semver",
70 config: config(Spec{
71 "gcr.io/edge-dev-alpha",
72 Metadata{
73 "97117a2b07f13a6ffe423af362e13912412d3492",
74 "499021129",
75 "",
76 "built.2021-01-20.17-04-04.0000UTC",
77 "edge-infra",
78 "ncrvoyix-swt-retail",
79 },
80 true,
81 validCmpShort,
82 []image.Image{},
83 }),
84 expected: ErrIncompleteMetadata,
85 },
86 {
87 name: "Incomplete metadata: timestamp",
88 config: config(Spec{
89 "gcr.io/edge-dev-alpha",
90 Metadata{
91 "97117a2b07f13a6ffe423af362e13912412d3492",
92 "499021129",
93 "0.0.1-rc.499021129.97117a.2021-01-20",
94 "",
95 "edge-infra",
96 "ncrvoyix-swt-retail",
97 },
98 true,
99 validCmpShort,
100 []image.Image{},
101 }),
102 expected: ErrIncompleteMetadata,
103 },
104 {
105 name: "Incomplete metadata: repo",
106 config: config(Spec{
107 "gcr.io/edge-dev-alpha",
108 Metadata{
109 "97117a2b07f13a6ffe423af362e13912412d3492",
110 "499021129",
111 "0.0.1-rc.499021129.97117a.2021-01-20",
112 "built.2021-01-20.17-04-04.0000UTC",
113 "",
114 "",
115 },
116 true,
117 validCmpShort,
118 []image.Image{},
119 }),
120 expected: ErrIncompleteMetadata,
121 },
122 {
123 name: "Incomplete metadata: commit",
124 config: config(Spec{
125 "gcr.io/edge-dev-alpha",
126 Metadata{
127 "",
128 "499021129",
129 "0.0.1-rc.499021129.97117a.2021-01-20",
130 "built.2021-01-20.17-04-04.0000UTC",
131 "edge-infra",
132 "ncrvoyix-swt-retail",
133 },
134 true,
135 validCmpShort,
136 []image.Image{},
137 }),
138 expected: ErrIncompleteMetadata,
139 },
140 {
141 name: "Incomplete metadata",
142 config: config(Spec{
143 "gcr.io/edge-dev-alpha",
144 Metadata{
145 "",
146 "499021129",
147 "0.0.1-rc.499021129.97117a.2021-01-20",
148 "built.2021-01-20.17-04-04.0000UTC",
149 "edge-infra",
150 "ncrvoyix-swt-retail",
151 },
152 true,
153 validCmpShort,
154 []image.Image{},
155 }),
156 expected: ErrIncompleteMetadata,
157 },
158 {
159 name: "Simple valid Config",
160 config: config(Spec{"gcr.io/edge-dev-alpha", validMetadata, false,
161 validCmpShort, []image.Image{}}),
162 expected: nil,
163 },
164 {
165 name: "No registry",
166 config: config(Spec{"", validMetadata, false, validCmpShort, []image.Image{}}),
167 expected: ErrNoRegistry,
168 },
169 {
170 name: "No registry, but provided registry for each image",
171 config: config(Spec{"", validMetadata, false, []Component{{"edge-agent", validImgRepo}}, []image.Image{}}),
172 expected: nil,
173 },
174 {
175 name: "No input provided",
176 config: config(Spec{"gcr.io/edge-dev-alpha", validMetadata, false, []Component{}, []image.Image{}}),
177 expected: ErrNoInput,
178 },
179 {
180 name: "No images provided",
181 config: config(Spec{
182 "gcr.io/edge-dev-alpha",
183 validMetadata,
184 false,
185 []Component{{"edge-agent", []PodImage{}}},
186 []image.Image{},
187 }),
188 expected: ErrNoImages,
189 },
190 }
191
192 for _, tc := range tcs {
193 err := tc.config.Spec.Validate()
194 if !errors.Is(err, tc.expected) {
195 t.Errorf("\n%s: Expected:\n%v\nGot:\n%v\n", tc.name, tc.expected, err)
196 }
197 }
198 }
199
200 func config(data Spec) EdgeRelease {
201 return EdgeRelease{
202 Spec: data,
203 }
204 }
205
206 func TestInitFns(t *testing.T) {
207 er := config(Spec{
208 "ncr-emeraldedge-docker-dev.jfrog.io",
209 Metadata{
210 "97117a2b07f13a6ffe423af362e13912412d3492",
211 "499021129",
212 "0.0.1-rc.499021129.97117a.2021-01-20",
213 "built.2021-01-20.17-04-04.0000UTC",
214 "edge-infra",
215 "ncrvoyix-swt-retail",
216 },
217 false,
218 []Component{
219 {
220 "edge-agent",
221 []PodImage{
222 {
223 Image: image.Image{
224 Repository: "edge-agent",
225 Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f",
226 },
227 },
228 },
229 },
230 {
231 "fake-agent",
232 []PodImage{
233 {
234 Image: image.Image{
235 Repository: "fake-agent",
236 Digest: "sha256:8334923ba95cfda891632977c5885b018aea2fba42423b32350ce8e42e13aa7f",
237 Registry: "alternate.gcr.io",
238 },
239 },
240 },
241 },
242 },
243 []image.Image{{Repository: "kpt-unthos-sorter", Digest: "fakeShaFakeShaWhatchaGonnaDo"}},
244 })
245
246 er.init()
247
248 assert.Equal(t, er.Spec.Registry, er.Spec.Components[0].Images[0].Registry, "image.Registry did not match Spec.Registry after init")
249 assert.Equal(t, er.Spec.Registry, er.Spec.KptFns[0].Registry, "image.Registry did not match Spec.Registry after init")
250 assert.Equal(t, "alternate.gcr.io", er.Spec.Components[1].Images[0].Registry, "image.Registry was overridden by init functions when it shouldn't have been")
251 assert.NotEmpty(t, er.componentMap)
252 assert.NotEmpty(t, er.kptFnMap)
253 }
254
View as plain text