@@ -20,14 +20,17 @@ import (
20
20
"path/filepath"
21
21
"testing"
22
22
23
+ "chainguard.dev/melange/pkg/config"
24
+ "chainguard.dev/melange/pkg/logger"
25
+
23
26
apko_types "chainguard.dev/apko/pkg/build/types"
24
27
"github.com/google/go-cmp/cmp"
25
28
"github.com/google/go-cmp/cmp/cmpopts"
26
29
"github.com/stretchr/testify/require"
27
30
)
28
31
29
32
var requireErrInvalidConfiguration require.ErrorAssertionFunc = func (t require.TestingT , err error , _ ... interface {}) {
30
- require .ErrorAs (t , err , & ErrInvalidConfiguration {})
33
+ require .ErrorAs (t , err , & config. ErrInvalidConfiguration {})
31
34
}
32
35
33
36
// TestConfiguration_Load is the main set of tests for loading a configuration
@@ -37,40 +40,40 @@ func TestConfiguration_Load(t *testing.T) {
37
40
name string
38
41
skipConfigCleanStep bool
39
42
requireErr require.ErrorAssertionFunc
40
- expected Configuration
43
+ expected * config. Configuration
41
44
}{
42
45
{
43
46
name : "range-subpackages" ,
44
47
requireErr : require .NoError ,
45
- expected : Configuration {
46
- Package : Package {
48
+ expected : & config. Configuration {
49
+ Package : config. Package {
47
50
Name : "hello" ,
48
51
Version : "world" ,
49
52
},
50
- Pipeline : []Pipeline {
53
+ Pipeline : []config. Pipeline {
51
54
{
52
55
Name : "hello" ,
53
56
Runs : "world" ,
54
57
},
55
58
},
56
- Subpackages : []Subpackage {{
59
+ Subpackages : []config. Subpackage {{
57
60
Name : "cats" ,
58
- Pipeline : []Pipeline {{
61
+ Pipeline : []config. Pipeline {{
59
62
Runs : "cats are angry" ,
60
63
}},
61
64
}, {
62
65
Name : "dogs" ,
63
- Pipeline : []Pipeline {{
66
+ Pipeline : []config. Pipeline {{
64
67
Runs : "dogs are loyal" ,
65
68
}},
66
69
}, {
67
70
Name : "turtles" ,
68
- Pipeline : []Pipeline {{
71
+ Pipeline : []config. Pipeline {{
69
72
Runs : "turtles are slow" ,
70
73
}},
71
74
}, {
72
75
Name : "donatello" ,
73
- Pipeline : []Pipeline {
76
+ Pipeline : []config. Pipeline {
74
77
{
75
78
Runs : "donatello's color is purple" ,
76
79
},
@@ -81,7 +84,7 @@ func TestConfiguration_Load(t *testing.T) {
81
84
},
82
85
}, {
83
86
Name : "leonardo" ,
84
- Pipeline : []Pipeline {
87
+ Pipeline : []config. Pipeline {
85
88
{
86
89
Runs : "leonardo's color is blue" ,
87
90
},
@@ -92,7 +95,7 @@ func TestConfiguration_Load(t *testing.T) {
92
95
},
93
96
}, {
94
97
Name : "michelangelo" ,
95
- Pipeline : []Pipeline {
98
+ Pipeline : []config. Pipeline {
96
99
{
97
100
Runs : "michelangelo's color is orange" ,
98
101
},
@@ -103,7 +106,7 @@ func TestConfiguration_Load(t *testing.T) {
103
106
},
104
107
}, {
105
108
Name : "raphael" ,
106
- Pipeline : []Pipeline {
109
+ Pipeline : []config. Pipeline {
107
110
{
108
111
Runs : "raphael's color is red" ,
109
112
},
@@ -118,15 +121,15 @@ func TestConfiguration_Load(t *testing.T) {
118
121
{
119
122
name : "github" ,
120
123
requireErr : require .NoError ,
121
- expected : Configuration {
122
- Package : Package {
124
+ expected : & config. Configuration {
125
+ Package : config. Package {
123
126
Name : "cosign" ,
124
127
Version : "2.0.0" ,
125
128
},
126
- Update : Update {
129
+ Update : config. Update {
127
130
Enabled : true ,
128
131
Shared : false ,
129
- GitHubMonitor : & GitHubMonitor {
132
+ GitHubMonitor : & config. GitHubMonitor {
130
133
Identifier : "sigstore/cosign" ,
131
134
StripPrefix : "v" ,
132
135
UseTags : true ,
@@ -137,43 +140,47 @@ func TestConfiguration_Load(t *testing.T) {
137
140
{
138
141
name : "release-monitor" ,
139
142
requireErr : require .NoError ,
140
- expected : Configuration {
141
- Package : Package {Name : "bison" , Version : "3.8.2" },
142
- Update : Update {
143
+ expected : & config. Configuration {
144
+ Package : config. Package {Name : "bison" , Version : "3.8.2" },
145
+ Update : config. Update {
143
146
Enabled : true ,
144
147
Shared : false ,
145
- ReleaseMonitor : & ReleaseMonitor {
148
+ ReleaseMonitor : & config. ReleaseMonitor {
146
149
Identifier : 193 ,
147
150
},
148
151
},
149
152
},
150
153
},
151
154
{
152
- name : "unknown-fields" ,
153
- requireErr : require .Error ,
154
- expected : Configuration {},
155
+ name : "unknown-fields" ,
156
+ skipConfigCleanStep : true ,
157
+ requireErr : require .Error ,
158
+ expected : nil ,
155
159
},
156
160
{
157
- name : "missing-package-name" ,
158
- requireErr : requireErrInvalidConfiguration ,
159
- expected : Configuration {},
161
+ name : "missing-package-name" ,
162
+ skipConfigCleanStep : true ,
163
+ requireErr : requireErrInvalidConfiguration ,
164
+ expected : nil ,
160
165
},
161
166
{
162
- name : "invalid-package-name" ,
163
- requireErr : requireErrInvalidConfiguration ,
164
- expected : Configuration {},
167
+ name : "invalid-package-name" ,
168
+ skipConfigCleanStep : true ,
169
+ requireErr : requireErrInvalidConfiguration ,
170
+ expected : nil ,
165
171
},
166
172
{
167
- name : "invalid-range-subpackage-name" ,
168
- requireErr : requireErrInvalidConfiguration ,
169
- expected : Configuration {},
173
+ name : "invalid-range-subpackage-name" ,
174
+ skipConfigCleanStep : true ,
175
+ requireErr : requireErrInvalidConfiguration ,
176
+ expected : nil ,
170
177
},
171
178
{
172
179
name : "env-vars-set-that-have-default-values" ,
173
180
skipConfigCleanStep : true ,
174
181
requireErr : require .NoError ,
175
- expected : Configuration {
176
- Package : Package {
182
+ expected : & config. Configuration {
183
+ Package : config. Package {
177
184
Name : "cosign" ,
178
185
Version : "2.0.0" ,
179
186
Epoch : 0 ,
@@ -188,35 +195,44 @@ func TestConfiguration_Load(t *testing.T) {
188
195
Groups : []apko_types.Group {{GroupName : "build" , GID : 1000 , Members : []string {"build" }}},
189
196
},
190
197
},
191
- Subpackages : []Subpackage {},
198
+ Subpackages : []config. Subpackage {},
192
199
},
193
200
},
194
201
}
195
202
196
203
for _ , tt := range tests {
197
204
t .Run (tt .name , func (t * testing.T ) {
198
- log := nopLogger {}
205
+ log := logger. NopLogger {}
199
206
ctx := Build {
200
207
ConfigFile : filepath .Join ("testdata" , "configuration_load" , fmt .Sprintf ("%s.melange.yaml" , tt .name )),
201
208
Logger : log ,
202
209
}
203
210
204
- cfg := & Configuration {}
205
- err := cfg .Load (ctx )
211
+ cfg , err := config .ParseConfiguration (
212
+ ctx .ConfigFile ,
213
+ config .WithEnvFileForParsing (ctx .EnvFile ),
214
+ config .WithLogger (ctx .Logger ),
215
+ config .WithVarsFileForParsing (ctx .VarsFile ))
206
216
tt .requireErr (t , err )
207
217
208
218
if ! tt .skipConfigCleanStep {
209
219
cleanTestConfig (cfg )
210
220
}
211
221
212
- if d := cmp .Diff (tt .expected , * cfg , cmpopts .IgnoreUnexported (Pipeline {})); d != "" {
213
- t .Fatalf ("actual didn't match expected (-want, +got): %s" , d )
222
+ if tt .expected == nil {
223
+ if cfg != nil {
224
+ t .Fatalf ("actual didn't match expected (want nil, got config)" )
225
+ }
226
+ } else {
227
+ if d := cmp .Diff (* tt .expected , * cfg , cmpopts .IgnoreUnexported (config.Pipeline {})); d != "" {
228
+ t .Fatalf ("actual didn't match expected (-want, +got): %s" , d )
229
+ }
214
230
}
215
231
})
216
232
}
217
233
}
218
234
219
- func cleanTestConfig (cfg * Configuration ) {
235
+ func cleanTestConfig (cfg * config. Configuration ) {
220
236
if cfg == nil {
221
237
return
222
238
}
@@ -238,12 +254,12 @@ package:
238
254
name: nginx
239
255
version: 100
240
256
`
241
- expected := & Configuration {
242
- Package : Package {
257
+ expected := & config. Configuration {
258
+ Package : config. Package {
243
259
Name : "nginx" ,
244
260
Version : "100" ,
245
261
},
246
- Subpackages : []Subpackage {},
262
+ Subpackages : []config. Subpackage {},
247
263
}
248
264
expected .Environment .Accounts .Users = []apko_types.User {{
249
265
UserName : "build" ,
@@ -265,13 +281,17 @@ package:
265
281
t .Fatal (err )
266
282
}
267
283
268
- log := nopLogger {}
284
+ log := logger. NopLogger {}
269
285
ctx := Build {
270
286
ConfigFile : f ,
271
287
Logger : log ,
272
288
}
273
- cfg := & Configuration {}
274
- if err := cfg .Load (ctx ); err != nil {
289
+ cfg , err := config .ParseConfiguration (
290
+ ctx .ConfigFile ,
291
+ config .WithEnvFileForParsing (ctx .EnvFile ),
292
+ config .WithLogger (ctx .Logger ),
293
+ config .WithVarsFileForParsing (ctx .VarsFile ))
294
+ if err != nil {
275
295
t .Fatal (err )
276
296
}
277
297
if d := cmp .Diff (expected , cfg ); d != "" {
0 commit comments