1
1
package semver
2
2
3
3
import (
4
+ "fmt"
4
5
"strings"
5
6
"testing"
6
7
@@ -144,97 +145,195 @@ func TestGenerateChannels(t *testing.T) {
144
145
},
145
146
}
146
147
148
+ majorLinkedChannels := []declcfg.Channel {
149
+ {
150
+ Schema : "olm.channel" ,
151
+ Name : "stable-v0" ,
152
+ Package : "a" ,
153
+ Entries : []declcfg.ChannelEntry {
154
+ {Name : "a-v0.1.0" , Replaces : "" },
155
+ {Name : "a-v0.1.1" , Replaces : "" , Skips : []string {"a-v0.1.0" }},
156
+ },
157
+ },
158
+ {
159
+ Schema : "olm.channel" ,
160
+ Name : "stable-v1" ,
161
+ Package : "a" ,
162
+ Entries : []declcfg.ChannelEntry {
163
+ {Name : "a-v1.1.0" , Replaces : "" , Skips : []string {}},
164
+ {Name : "a-v1.2.1" , Replaces : "a-v1.1.0" , Skips : []string {}},
165
+ {Name : "a-v1.3.1-alpha" , Replaces : "" },
166
+ {Name : "a-v1.3.1-beta" , Replaces : "" },
167
+ {Name : "a-v1.3.1" , Replaces : "a-v1.2.1" , Skips : []string {"a-v1.1.0" , "a-v1.3.1-alpha" , "a-v1.3.1-beta" }},
168
+ {Name : "a-v1.4.1-beta1" , Replaces : "" },
169
+ {Name : "a-v1.4.1-beta2" , Replaces : "" },
170
+ {Name : "a-v1.4.1" , Replaces : "a-v1.3.1" , Skips : []string {"a-v1.1.0" , "a-v1.2.1" , "a-v1.3.1-alpha" , "a-v1.3.1-beta" , "a-v1.4.1-beta1" , "a-v1.4.1-beta2" }},
171
+ },
172
+ },
173
+ {
174
+ Schema : "olm.channel" ,
175
+ Name : "stable-v2" ,
176
+ Package : "a" ,
177
+ Entries : []declcfg.ChannelEntry {
178
+ {Name : "a-v2.1.0" , Replaces : "" },
179
+ {Name : "a-v2.1.1" , Replaces : "" , Skips : []string {"a-v2.1.0" }},
180
+ {Name : "a-v2.3.1" , Replaces : "" },
181
+ {Name : "a-v2.3.2" , Replaces : "a-v2.1.1" , Skips : []string {"a-v2.1.0" , "a-v2.3.1" }},
182
+ },
183
+ },
184
+ {
185
+ Schema : "olm.channel" ,
186
+ Name : "stable-v3" ,
187
+ Package : "a" ,
188
+ Entries : []declcfg.ChannelEntry {
189
+ {Name : "a-v3.1.0" , Replaces : "" },
190
+ {Name : "a-v3.1.1" , Replaces : "" , Skips : []string {"a-v3.1.0" }},
191
+ },
192
+ },
193
+ }
194
+
195
+ minorLinkedChannels := []declcfg.Channel {
196
+ {
197
+ Schema : "olm.channel" ,
198
+ Name : "stable-v0.1" ,
199
+ Package : "a" ,
200
+ Entries : []declcfg.ChannelEntry {
201
+ {Name : "a-v0.1.0" , Replaces : "" },
202
+ {Name : "a-v0.1.1" , Replaces : "" , Skips : []string {"a-v0.1.0" }},
203
+ },
204
+ },
205
+ {
206
+ Schema : "olm.channel" ,
207
+ Name : "stable-v1.1" ,
208
+ Package : "a" ,
209
+ Entries : []declcfg.ChannelEntry {
210
+ {Name : "a-v1.1.0" , Replaces : "" , Skips : []string {}},
211
+ },
212
+ },
213
+ {
214
+ Schema : "olm.channel" ,
215
+ Name : "stable-v1.2" ,
216
+ Package : "a" ,
217
+ Entries : []declcfg.ChannelEntry {
218
+ {Name : "a-v1.2.1" , Replaces : "a-v1.1.0" , Skips : []string {}},
219
+ },
220
+ },
221
+ {
222
+ Schema : "olm.channel" ,
223
+ Name : "stable-v1.3" ,
224
+ Package : "a" ,
225
+ Entries : []declcfg.ChannelEntry {
226
+ {Name : "a-v1.3.1-alpha" , Replaces : "" },
227
+ {Name : "a-v1.3.1-beta" , Replaces : "" },
228
+ {Name : "a-v1.3.1" , Replaces : "a-v1.2.1" , Skips : []string {"a-v1.1.0" , "a-v1.3.1-alpha" , "a-v1.3.1-beta" }},
229
+ },
230
+ },
231
+ {
232
+ Schema : "olm.channel" ,
233
+ Name : "stable-v1.4" ,
234
+ Package : "a" ,
235
+ Entries : []declcfg.ChannelEntry {
236
+ {Name : "a-v1.4.1-beta1" , Replaces : "" },
237
+ {Name : "a-v1.4.1-beta2" , Replaces : "" },
238
+ {Name : "a-v1.4.1" , Replaces : "a-v1.3.1" , Skips : []string {"a-v1.1.0" , "a-v1.2.1" , "a-v1.3.1-alpha" , "a-v1.3.1-beta" , "a-v1.4.1-beta1" , "a-v1.4.1-beta2" }},
239
+ },
240
+ },
241
+ {
242
+ Schema : "olm.channel" ,
243
+ Name : "stable-v2.1" ,
244
+ Package : "a" ,
245
+ Entries : []declcfg.ChannelEntry {
246
+ {Name : "a-v2.1.0" , Replaces : "" },
247
+ {Name : "a-v2.1.1" , Replaces : "" , Skips : []string {"a-v2.1.0" }},
248
+ },
249
+ },
250
+ {
251
+ Schema : "olm.channel" ,
252
+ Name : "stable-v2.3" ,
253
+ Package : "a" ,
254
+ Entries : []declcfg.ChannelEntry {
255
+ {Name : "a-v2.3.1" , Replaces : "" },
256
+ {Name : "a-v2.3.2" , Replaces : "a-v2.1.1" , Skips : []string {"a-v2.1.0" , "a-v2.3.1" }},
257
+ },
258
+ },
259
+ {
260
+ Schema : "olm.channel" ,
261
+ Name : "stable-v3.1" ,
262
+ Package : "a" ,
263
+ Entries : []declcfg.ChannelEntry {
264
+ {Name : "a-v3.1.0" , Replaces : "" },
265
+ {Name : "a-v3.1.1" , Replaces : "" , Skips : []string {"a-v3.1.0" }},
266
+ },
267
+ },
268
+ }
269
+
270
+ var combinedLinkedChannels []declcfg.Channel
271
+ combinedLinkedChannels = append (combinedLinkedChannels , minorLinkedChannels ... )
272
+ combinedLinkedChannels = append (combinedLinkedChannels , majorLinkedChannels ... )
273
+
147
274
tests := []struct {
148
275
name string
149
276
generateMinorChannels bool
150
277
generateMajorChannels bool
278
+ defaultChannel string
279
+ channelTypePreference streamType
151
280
out []declcfg.Channel
152
281
}{
153
282
{
154
283
name : "Edges between minor channels" ,
155
284
generateMinorChannels : true ,
156
285
generateMajorChannels : false ,
157
- out : []declcfg.Channel {
158
- {
159
- Schema : "olm.channel" ,
160
- Name : "stable-v0.1" ,
161
- Package : "a" ,
162
- Entries : []declcfg.ChannelEntry {
163
- {Name : "a-v0.1.0" , Replaces : "" },
164
- {Name : "a-v0.1.1" , Replaces : "" , Skips : []string {"a-v0.1.0" }},
165
- },
166
- },
167
- {
168
- Schema : "olm.channel" ,
169
- Name : "stable-v1.1" ,
170
- Package : "a" ,
171
- Entries : []declcfg.ChannelEntry {
172
- {Name : "a-v1.1.0" , Replaces : "" , Skips : []string {}},
173
- },
174
- },
175
- {
176
- Schema : "olm.channel" ,
177
- Name : "stable-v1.2" ,
178
- Package : "a" ,
179
- Entries : []declcfg.ChannelEntry {
180
- {Name : "a-v1.2.1" , Replaces : "a-v1.1.0" , Skips : []string {}},
181
- },
182
- },
183
- {
184
- Schema : "olm.channel" ,
185
- Name : "stable-v1.3" ,
186
- Package : "a" ,
187
- Entries : []declcfg.ChannelEntry {
188
- {Name : "a-v1.3.1-alpha" , Replaces : "" },
189
- {Name : "a-v1.3.1-beta" , Replaces : "" },
190
- {Name : "a-v1.3.1" , Replaces : "a-v1.2.1" , Skips : []string {"a-v1.1.0" , "a-v1.3.1-alpha" , "a-v1.3.1-beta" }},
191
- },
192
- },
193
- {
194
- Schema : "olm.channel" ,
195
- Name : "stable-v1.4" ,
196
- Package : "a" ,
197
- Entries : []declcfg.ChannelEntry {
198
- {Name : "a-v1.4.1-beta1" , Replaces : "" },
199
- {Name : "a-v1.4.1-beta2" , Replaces : "" },
200
- {Name : "a-v1.4.1" , Replaces : "a-v1.3.1" , Skips : []string {"a-v1.1.0" , "a-v1.2.1" , "a-v1.3.1-alpha" , "a-v1.3.1-beta" , "a-v1.4.1-beta1" , "a-v1.4.1-beta2" }},
201
- },
202
- },
203
- {
204
- Schema : "olm.channel" ,
205
- Name : "stable-v2.1" ,
206
- Package : "a" ,
207
- Entries : []declcfg.ChannelEntry {
208
- {Name : "a-v2.1.0" , Replaces : "" },
209
- {Name : "a-v2.1.1" , Replaces : "" , Skips : []string {"a-v2.1.0" }},
210
- },
211
- },
212
- {
213
- Schema : "olm.channel" ,
214
- Name : "stable-v2.3" ,
215
- Package : "a" ,
216
- Entries : []declcfg.ChannelEntry {
217
- {Name : "a-v2.3.1" , Replaces : "" },
218
- {Name : "a-v2.3.2" , Replaces : "a-v2.1.1" , Skips : []string {"a-v2.1.0" , "a-v2.3.1" }},
219
- },
220
- },
221
- {
222
- Schema : "olm.channel" ,
223
- Name : "stable-v3.1" ,
224
- Package : "a" ,
225
- Entries : []declcfg.ChannelEntry {
226
- {Name : "a-v3.1.0" , Replaces : "" },
227
- {Name : "a-v3.1.1" , Replaces : "" , Skips : []string {"a-v3.1.0" }},
228
- },
229
- },
230
- },
286
+ defaultChannel : "stable-v3.1" ,
287
+ channelTypePreference : minorStreamType ,
288
+ out : minorLinkedChannels ,
289
+ },
290
+ {
291
+ name : "No edges between major channels" ,
292
+ generateMinorChannels : false ,
293
+ generateMajorChannels : true ,
294
+ defaultChannel : "stable-v3" ,
295
+ channelTypePreference : majorStreamType ,
296
+ out : majorLinkedChannels ,
297
+ },
298
+ {
299
+ name : "Preference for minor default channel" ,
300
+ generateMinorChannels : true ,
301
+ generateMajorChannels : true ,
302
+ defaultChannel : "stable-v3.1" ,
303
+ channelTypePreference : minorStreamType ,
304
+ out : combinedLinkedChannels ,
305
+ },
306
+ {
307
+ name : "Preference for major default channel" ,
308
+ generateMinorChannels : true ,
309
+ generateMajorChannels : true ,
310
+ defaultChannel : "stable-v3" ,
311
+ channelTypePreference : majorStreamType ,
312
+ out : combinedLinkedChannels ,
313
+ },
314
+ {
315
+ name : "Mismatch generate/preference minor/major default channel" ,
316
+ generateMinorChannels : true ,
317
+ generateMajorChannels : false ,
318
+ defaultChannel : "stable-v3.1" ,
319
+ channelTypePreference : majorStreamType ,
320
+ out : minorLinkedChannels ,
321
+ },
322
+ {
323
+ name : "Mismatch generate/preference major/minor default channel" ,
324
+ generateMinorChannels : false ,
325
+ generateMajorChannels : true ,
326
+ defaultChannel : "stable-v3" ,
327
+ channelTypePreference : minorStreamType ,
328
+ out : majorLinkedChannels ,
231
329
},
232
330
}
233
331
234
332
for _ , tt := range tests {
235
333
t .Run (tt .name , func (t * testing.T ) {
236
- sv := & semverTemplate {GenerateMajorChannels : tt .generateMajorChannels , GenerateMinorChannels : tt .generateMinorChannels , pkg : "a" }
334
+ sv := & semverTemplate {GenerateMajorChannels : tt .generateMajorChannels , GenerateMinorChannels : tt .generateMinorChannels , pkg : "a" , DefaultChannelTypePreference : tt . channelTypePreference }
237
335
require .ElementsMatch (t , tt .out , sv .generateChannels (& channelOperatorVersions ))
336
+ require .Equal (t , tt .defaultChannel , sv .defaultChannel )
238
337
})
239
338
}
240
339
}
@@ -364,18 +463,12 @@ func TestBailOnVersionBuildMetadata(t *testing.T) {
364
463
}
365
464
366
465
func TestReadFile (t * testing.T ) {
367
- type testCase struct {
368
- name string
369
- input string
370
- assertions func (* testing.T , * semverTemplate , error )
371
- }
372
- testCases := []testCase {
373
- {
374
- name : "valid" ,
375
- input : `---
466
+
467
+ templateFstr := `---
376
468
schema: olm.semver
377
- generateMajorChannels: true
378
- generateMinorChannels: true
469
+ generateMajorChannels: %s
470
+ generateMinorChannels: %s
471
+ defaultChannelTypePreference: %s
379
472
candidate:
380
473
bundles:
381
474
- image: quay.io/foo/olm:testoperator.v0.1.0
@@ -399,7 +492,17 @@ fast:
399
492
stable:
400
493
bundles:
401
494
- image: quay.io/foo/olm:testoperator.v1.0.1
402
- ` ,
495
+ `
496
+
497
+ type testCase struct {
498
+ name string
499
+ input string
500
+ assertions func (* testing.T , * semverTemplate , error )
501
+ }
502
+ testCases := []testCase {
503
+ {
504
+ name : "valid" ,
505
+ input : fmt .Sprintf (templateFstr , "true" , "true" , "minor" ),
403
506
assertions : func (t * testing.T , template * semverTemplate , err error ) {
404
507
require .NotNil (t , template )
405
508
require .NoError (t , err )
@@ -443,6 +546,30 @@ invalid:
443
546
require .EqualError (t , err , `error unmarshaling JSON: while decoding JSON: json: unknown field "invalid"` )
444
547
},
445
548
},
549
+ {
550
+ name : "generate/default mismatch, minor/major" ,
551
+ input : fmt .Sprintf (templateFstr , "true" , "false" , "minor" ),
552
+ assertions : func (t * testing.T , template * semverTemplate , err error ) {
553
+ require .Nil (t , template )
554
+ require .ErrorContains (t , err , "schema attribute mismatch" )
555
+ },
556
+ },
557
+ {
558
+ name : "generate/default mismatch, major/minor" ,
559
+ input : fmt .Sprintf (templateFstr , "false" , "true" , "major" ),
560
+ assertions : func (t * testing.T , template * semverTemplate , err error ) {
561
+ require .Nil (t , template )
562
+ require .ErrorContains (t , err , "schema attribute mismatch" )
563
+ },
564
+ },
565
+ {
566
+ name : "unknown defaultchanneltypepreference" ,
567
+ input : fmt .Sprintf (templateFstr , "false" , "true" , "foo" ),
568
+ assertions : func (t * testing.T , template * semverTemplate , err error ) {
569
+ require .Nil (t , template )
570
+ require .ErrorContains (t , err , "unknown DefaultChannelTypePreference" )
571
+ },
572
+ },
446
573
}
447
574
448
575
for _ , tc := range testCases {
0 commit comments