@@ -6,15 +6,18 @@ import (
6
6
7
7
"github.com/blang/semver/v4"
8
8
"github.com/sirupsen/logrus"
9
+ "github.com/sirupsen/logrus/hooks/test"
9
10
"github.com/stretchr/testify/assert"
10
11
"github.com/stretchr/testify/require"
11
12
12
- "github.com/operator-framework/api/pkg/operators/v1alpha1"
13
- "github.com/operator-framework/operator-registry/pkg/api"
14
- opregistry "github.com/operator-framework/operator-registry/pkg/registry"
13
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
14
15
+ "github.com/operator-framework/api/pkg/lib/version"
16
+ "github.com/operator-framework/api/pkg/operators/v1alpha1"
16
17
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry"
17
18
"github.com/operator-framework/operator-lifecycle-manager/pkg/controller/registry/resolver/solver"
19
+ "github.com/operator-framework/operator-registry/pkg/api"
20
+ opregistry "github.com/operator-framework/operator-registry/pkg/registry"
18
21
)
19
22
20
23
func TestSolveOperators (t * testing.T ) {
@@ -1456,3 +1459,206 @@ func TestSolveOperators_WithSkips(t *testing.T) {
1456
1459
}
1457
1460
require .EqualValues (t , expected , operators )
1458
1461
}
1462
+
1463
+ func TestInferProperties (t * testing.T ) {
1464
+ catalog := registry.CatalogKey {Namespace : "namespace" , Name : "name" }
1465
+
1466
+ for _ , tc := range []struct {
1467
+ Name string
1468
+ Cache NamespacedOperatorCache
1469
+ CSV * v1alpha1.ClusterServiceVersion
1470
+ Subscriptions []* v1alpha1.Subscription
1471
+ Expected []* api.Property
1472
+ }{
1473
+ {
1474
+ Name : "no subscriptions infers no properties" ,
1475
+ CSV : & v1alpha1.ClusterServiceVersion {
1476
+ ObjectMeta : metav1.ObjectMeta {
1477
+ Name : "a" ,
1478
+ },
1479
+ },
1480
+ },
1481
+ {
1482
+ Name : "one unrelated subscription infers no properties" ,
1483
+ CSV : & v1alpha1.ClusterServiceVersion {
1484
+ ObjectMeta : metav1.ObjectMeta {
1485
+ Name : "a" ,
1486
+ },
1487
+ },
1488
+ Subscriptions : []* v1alpha1.Subscription {
1489
+ {
1490
+ Spec : & v1alpha1.SubscriptionSpec {
1491
+ Package : "x" ,
1492
+ },
1493
+ Status : v1alpha1.SubscriptionStatus {
1494
+ InstalledCSV : "b" ,
1495
+ },
1496
+ },
1497
+ },
1498
+ },
1499
+ {
1500
+ Name : "one subscription with empty package field infers no properties" ,
1501
+ CSV : & v1alpha1.ClusterServiceVersion {
1502
+ ObjectMeta : metav1.ObjectMeta {
1503
+ Name : "a" ,
1504
+ },
1505
+ },
1506
+ Subscriptions : []* v1alpha1.Subscription {
1507
+ {
1508
+ Spec : & v1alpha1.SubscriptionSpec {
1509
+ Package : "" ,
1510
+ },
1511
+ Status : v1alpha1.SubscriptionStatus {
1512
+ InstalledCSV : "a" ,
1513
+ },
1514
+ },
1515
+ },
1516
+ },
1517
+ {
1518
+ Name : "two related subscriptions infers no properties" ,
1519
+ CSV : & v1alpha1.ClusterServiceVersion {
1520
+ ObjectMeta : metav1.ObjectMeta {
1521
+ Name : "a" ,
1522
+ },
1523
+ },
1524
+ Subscriptions : []* v1alpha1.Subscription {
1525
+ {
1526
+ Spec : & v1alpha1.SubscriptionSpec {
1527
+ Package : "x" ,
1528
+ },
1529
+ Status : v1alpha1.SubscriptionStatus {
1530
+ InstalledCSV : "a" ,
1531
+ },
1532
+ },
1533
+ {
1534
+ Spec : & v1alpha1.SubscriptionSpec {
1535
+ Package : "x" ,
1536
+ },
1537
+ Status : v1alpha1.SubscriptionStatus {
1538
+ InstalledCSV : "a" ,
1539
+ },
1540
+ },
1541
+ },
1542
+ },
1543
+ {
1544
+ Name : "one matching subscription infers package property" ,
1545
+ Cache : NamespacedOperatorCache {
1546
+ snapshots : map [registry.CatalogKey ]* CatalogSnapshot {
1547
+ catalog : {
1548
+ key : catalog ,
1549
+ operators : []* Operator {
1550
+ {
1551
+ name : "a" ,
1552
+ bundle : & api.Bundle {
1553
+ PackageName : "x" ,
1554
+ },
1555
+ },
1556
+ },
1557
+ },
1558
+ },
1559
+ },
1560
+ CSV : & v1alpha1.ClusterServiceVersion {
1561
+ ObjectMeta : metav1.ObjectMeta {
1562
+ Name : "a" ,
1563
+ },
1564
+ Spec : v1alpha1.ClusterServiceVersionSpec {
1565
+ Version : version.OperatorVersion {Version : semver .MustParse ("1.2.3" )},
1566
+ },
1567
+ },
1568
+ Subscriptions : []* v1alpha1.Subscription {
1569
+ {
1570
+ Spec : & v1alpha1.SubscriptionSpec {
1571
+ Package : "x" ,
1572
+ CatalogSource : catalog .Name ,
1573
+ CatalogSourceNamespace : catalog .Namespace ,
1574
+ },
1575
+ Status : v1alpha1.SubscriptionStatus {
1576
+ InstalledCSV : "a" ,
1577
+ },
1578
+ },
1579
+ },
1580
+ Expected : []* api.Property {
1581
+ {
1582
+ Type : "olm.package" ,
1583
+ Value : `{"packageName":"x","version":"1.2.3"}` ,
1584
+ },
1585
+ },
1586
+ },
1587
+ {
1588
+ Name : "one matching subscription without catalog entry infers no properties" ,
1589
+ CSV : & v1alpha1.ClusterServiceVersion {
1590
+ ObjectMeta : metav1.ObjectMeta {
1591
+ Name : "a" ,
1592
+ },
1593
+ Spec : v1alpha1.ClusterServiceVersionSpec {
1594
+ Version : version.OperatorVersion {Version : semver .MustParse ("1.2.3" )},
1595
+ },
1596
+ },
1597
+ Subscriptions : []* v1alpha1.Subscription {
1598
+ {
1599
+ Spec : & v1alpha1.SubscriptionSpec {
1600
+ Package : "x" ,
1601
+ },
1602
+ Status : v1alpha1.SubscriptionStatus {
1603
+ InstalledCSV : "a" ,
1604
+ },
1605
+ },
1606
+ },
1607
+ },
1608
+ {
1609
+ Name : "one matching subscription infers package property without csv version" ,
1610
+ Cache : NamespacedOperatorCache {
1611
+ snapshots : map [registry.CatalogKey ]* CatalogSnapshot {
1612
+ catalog : {
1613
+ key : catalog ,
1614
+ operators : []* Operator {
1615
+ {
1616
+ name : "a" ,
1617
+ bundle : & api.Bundle {
1618
+ PackageName : "x" ,
1619
+ },
1620
+ },
1621
+ },
1622
+ },
1623
+ },
1624
+ },
1625
+ CSV : & v1alpha1.ClusterServiceVersion {
1626
+ ObjectMeta : metav1.ObjectMeta {
1627
+ Name : "a" ,
1628
+ },
1629
+ },
1630
+ Subscriptions : []* v1alpha1.Subscription {
1631
+ {
1632
+ Spec : & v1alpha1.SubscriptionSpec {
1633
+ Package : "x" ,
1634
+ CatalogSource : catalog .Name ,
1635
+ CatalogSourceNamespace : catalog .Namespace ,
1636
+ },
1637
+ Status : v1alpha1.SubscriptionStatus {
1638
+ InstalledCSV : "a" ,
1639
+ },
1640
+ },
1641
+ },
1642
+ Expected : []* api.Property {
1643
+ {
1644
+ Type : "olm.package" ,
1645
+ Value : `{"packageName":"x","version":""}` ,
1646
+ },
1647
+ },
1648
+ },
1649
+ } {
1650
+ t .Run (tc .Name , func (t * testing.T ) {
1651
+ require := require .New (t )
1652
+ logger , _ := test .NewNullLogger ()
1653
+ r := SatResolver {
1654
+ log : logger ,
1655
+ cache : & FakeOperatorCache {
1656
+ fakedNamespacedOperatorCache : tc .Cache ,
1657
+ },
1658
+ }
1659
+ actual , err := r .inferProperties (tc .CSV , tc .Subscriptions )
1660
+ require .NoError (err )
1661
+ require .Equal (tc .Expected , actual )
1662
+ })
1663
+ }
1664
+ }
0 commit comments