@@ -14,14 +14,13 @@ import (
14
14
15
15
"github.com/sirupsen/logrus"
16
16
"github.com/stretchr/testify/require"
17
+ "k8s.io/apimachinery/pkg/util/errors"
18
+ utilerrors "k8s.io/apimachinery/pkg/util/errors"
17
19
18
20
"github.com/operator-framework/operator-registry/pkg/api"
19
21
"github.com/operator-framework/operator-registry/pkg/image"
20
22
"github.com/operator-framework/operator-registry/pkg/registry"
21
23
"github.com/operator-framework/operator-registry/pkg/sqlite"
22
-
23
- "k8s.io/apimachinery/pkg/util/errors"
24
- utilerrors "k8s.io/apimachinery/pkg/util/errors"
25
24
)
26
25
27
26
func init () {
@@ -327,7 +326,7 @@ func TestImageLoading(t *testing.T) {
327
326
wantPackages : []* registry.Package {
328
327
{
329
328
Name : "prometheus" ,
330
- DefaultChannel : "beta " ,
329
+ DefaultChannel : "preview " ,
331
330
Channels : map [string ]registry.Channel {
332
331
"preview" : {
333
332
Head : registry.BundleKey {
@@ -342,11 +341,11 @@ func TestImageLoading(t *testing.T) {
342
341
"beta" : {
343
342
Head : registry.BundleKey {
344
343
BundlePath : "quay.io/prometheus/operator:0.14.0-beta" ,
345
- Version : "0.14.0" ,
344
+ Version : "0.14.0-beta " ,
346
345
CsvName : "prometheusoperator.0.14.0-beta" ,
347
346
},
348
347
Nodes : map [registry.BundleKey ]map [registry.BundleKey ]struct {}{
349
- {BundlePath : "quay.io/prometheus/operator:0.14.0-beta" , Version : "0.14.0" , CsvName : "prometheusoperator.0.14.0-beta" }: {},
348
+ {BundlePath : "quay.io/prometheus/operator:0.14.0-beta" , Version : "0.14.0-beta " , CsvName : "prometheusoperator.0.14.0-beta" }: {},
350
349
},
351
350
},
352
351
},
@@ -856,6 +855,7 @@ func TestDeprecateBundle(t *testing.T) {
856
855
857
856
deprecator := sqlite .NewSQLDeprecatorForBundles (store , tt .args .bundles )
858
857
err = deprecator .Deprecate ()
858
+ fmt .Printf ("error: %s\n " , err )
859
859
require .Equal (t , tt .expected .err , err )
860
860
861
861
// Ensure remaining bundlePaths in db match
@@ -1313,3 +1313,191 @@ func TestOverwrite(t *testing.T) {
1313
1313
})
1314
1314
}
1315
1315
}
1316
+
1317
+ func TestSemverPackageManifest (t * testing.T ) {
1318
+ bundle := func (name , version , pkg , defaultChannel , channels string ) * registry.Bundle {
1319
+ b , err := registry .NewBundleFromStrings (name , version , pkg , defaultChannel , channels , "" )
1320
+ require .NoError (t , err )
1321
+ return b
1322
+ }
1323
+ type args struct {
1324
+ bundles []* registry.Bundle
1325
+ }
1326
+ type expect struct {
1327
+ packageManifest * registry.PackageManifest
1328
+ hasError bool
1329
+ }
1330
+ for _ , tt := range []struct {
1331
+ description string
1332
+ args args
1333
+ expect expect
1334
+ }{
1335
+ {
1336
+ description : "OneUnversioned" ,
1337
+ args : args {
1338
+ bundles : []* registry.Bundle {
1339
+ bundle ("operator" , "" , "package" , "stable" , "stable" ), // version "" is interpreted as 0.0.0-z
1340
+ },
1341
+ },
1342
+ expect : expect {
1343
+ packageManifest : & registry.PackageManifest {
1344
+ PackageName : "package" ,
1345
+ DefaultChannelName : "stable" ,
1346
+ Channels : []registry.PackageChannel {
1347
+ {
1348
+ Name : "stable" ,
1349
+ CurrentCSVName : "operator" ,
1350
+ },
1351
+ },
1352
+ },
1353
+ },
1354
+ },
1355
+ {
1356
+ description : "TwoUnversioned" ,
1357
+ args : args {
1358
+ bundles : []* registry.Bundle {
1359
+ bundle ("operator-1" , "" , "package" , "stable" , "stable" ),
1360
+ bundle ("operator-2" , "" , "package" , "stable" , "stable" ),
1361
+ },
1362
+ },
1363
+ expect : expect {
1364
+ hasError : true ,
1365
+ },
1366
+ },
1367
+ {
1368
+ description : "UnversionedAndVersioned" ,
1369
+ args : args {
1370
+ bundles : []* registry.Bundle {
1371
+ bundle ("operator-1" , "" , "package" , "" , "stable" ),
1372
+ bundle ("operator-2" , "" , "package" , "" , "stable" ),
1373
+ bundle ("operator-3" , "0.0.1" , "package" , "" , "stable" ), // As long as there is one version, we should be good
1374
+ },
1375
+ },
1376
+ expect : expect {
1377
+ packageManifest : & registry.PackageManifest {
1378
+ PackageName : "package" ,
1379
+ DefaultChannelName : "stable" ,
1380
+ Channels : []registry.PackageChannel {
1381
+ {
1382
+ Name : "stable" ,
1383
+ CurrentCSVName : "operator-3" ,
1384
+ },
1385
+ },
1386
+ },
1387
+ },
1388
+ },
1389
+ {
1390
+ description : "MaxVersionsAreChannelHeads" ,
1391
+ args : args {
1392
+ bundles : []* registry.Bundle {
1393
+ bundle ("operator-1" , "1.0.0" , "package" , "slow" , "slow" ),
1394
+ bundle ("operator-2" , "1.1.0" , "package" , "stable" , "slow,stable" ),
1395
+ bundle ("operator-3" , "2.1.0" , "package" , "stable" , "edge" ),
1396
+ },
1397
+ },
1398
+ expect : expect {
1399
+ packageManifest : & registry.PackageManifest {
1400
+ PackageName : "package" ,
1401
+ DefaultChannelName : "stable" ,
1402
+ Channels : []registry.PackageChannel {
1403
+ {
1404
+ Name : "slow" ,
1405
+ CurrentCSVName : "operator-2" ,
1406
+ },
1407
+ {
1408
+ Name : "stable" ,
1409
+ CurrentCSVName : "operator-2" ,
1410
+ },
1411
+ {
1412
+ Name : "edge" ,
1413
+ CurrentCSVName : "operator-3" ,
1414
+ },
1415
+ },
1416
+ },
1417
+ },
1418
+ },
1419
+ {
1420
+ description : "DuplicateVersionsNotTolerated" ,
1421
+ args : args {
1422
+ bundles : []* registry.Bundle {
1423
+ bundle ("operator-1" , "1.0.0" , "package" , "slow" , "slow" ),
1424
+ bundle ("operator-2" , "1.0.0" , "package" , "stable" , "slow,stable" ),
1425
+ bundle ("operator-3" , "2.1.0" , "package" , "stable" , "edge" ),
1426
+ },
1427
+ },
1428
+ expect : expect {
1429
+ hasError : true ,
1430
+ },
1431
+ },
1432
+ {
1433
+ description : "DuplicateVersionsInSeparateChannelsAreTolerated" ,
1434
+ args : args {
1435
+ bundles : []* registry.Bundle {
1436
+ bundle ("operator-1" , "1.0.0" , "package" , "slow" , "slow" ),
1437
+ bundle ("operator-2" , "1.0.0" , "package" , "stable" , "stable" ),
1438
+ bundle ("operator-3" , "2.1.0" , "package" , "edge" , "edge" ), // Should only be tolerated if we have a global max
1439
+ },
1440
+ },
1441
+ expect : expect {
1442
+ packageManifest : & registry.PackageManifest {
1443
+ PackageName : "package" ,
1444
+ DefaultChannelName : "edge" ,
1445
+ Channels : []registry.PackageChannel {
1446
+ {
1447
+ Name : "slow" ,
1448
+ CurrentCSVName : "operator-1" ,
1449
+ },
1450
+ {
1451
+ Name : "stable" ,
1452
+ CurrentCSVName : "operator-2" ,
1453
+ },
1454
+ {
1455
+ Name : "edge" ,
1456
+ CurrentCSVName : "operator-3" ,
1457
+ },
1458
+ },
1459
+ },
1460
+ },
1461
+ },
1462
+ {
1463
+ description : "DuplicateMaxVersionsAreNotTolerated" ,
1464
+ args : args {
1465
+ bundles : []* registry.Bundle {
1466
+ bundle ("operator-1" , "1.0.0" , "package" , "slow" , "slow" ),
1467
+ bundle ("operator-2" , "1.0.0" , "package" , "stable" , "stable" ),
1468
+ },
1469
+ },
1470
+ expect : expect {
1471
+ hasError : true ,
1472
+ },
1473
+ },
1474
+ {
1475
+ description : "UnknownDefaultChannel" ,
1476
+ args : args {
1477
+ bundles : []* registry.Bundle {
1478
+ bundle ("operator-1" , "1.0.0" , "package" , "stable" , "stable" ),
1479
+ bundle ("operator-2" , "2.0.0" , "package" , "edge" , "stable" ),
1480
+ },
1481
+ },
1482
+ expect : expect {
1483
+ hasError : true ,
1484
+ },
1485
+ },
1486
+ } {
1487
+ t .Run (tt .description , func (t * testing.T ) {
1488
+ packageManifest , err := registry .SemverPackageManifest (tt .args .bundles )
1489
+ if tt .expect .hasError {
1490
+ require .Error (t , err )
1491
+ return
1492
+ }
1493
+
1494
+ require .NoError (t , err )
1495
+ require .NotNil (t , packageManifest )
1496
+
1497
+ expected := tt .expect .packageManifest
1498
+ require .Equal (t , expected .PackageName , packageManifest .PackageName )
1499
+ require .Equal (t , expected .DefaultChannelName , packageManifest .DefaultChannelName )
1500
+ require .ElementsMatch (t , expected .Channels , packageManifest .Channels )
1501
+ })
1502
+ }
1503
+ }
0 commit comments