Skip to content

Commit 1903afb

Browse files
committed
Update the e2e test case
Signed-off-by: Vu Dinh <[email protected]>
1 parent 62f0442 commit 1903afb

File tree

1 file changed

+209
-8
lines changed

1 file changed

+209
-8
lines changed

test/e2e/subscription_e2e_test.go

Lines changed: 209 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1254,9 +1254,9 @@ var _ = Describe("Subscription", func() {
12541254
require.Len(GinkgoT(), installPlan.Status.CatalogSources, 1)
12551255
})
12561256

1257-
// CatSrc:
1257+
// CatSrc1:
12581258
//
1259-
// Package A (apackage)
1259+
// Package 1 (apackage)
12601260
// Default Channel: Stable
12611261
// Channel Stable:
12621262
// Operator A (Requires: CRD 1, CRD 2 )
@@ -1266,12 +1266,19 @@ var _ = Describe("Subscription", func() {
12661266
// Default Channel: Stable
12671267
// Channel Stable:
12681268
// Operator B (Provides: CRD)
1269-
// CatSrc2:
1269+
// Channel Alpha:
1270+
// Operator D (Provides: CRD)
12701271
//
1271-
// Package B (bpackage)
1272+
// CatSrc2:
1273+
// Package 2 (bpackage)
12721274
// Default Channel: Stable
12731275
// Channel Stable:
12741276
// Operator C (Provides: CRD 2)
1277+
// Package 3 (cpackage)
1278+
// Default Channel: Stable
1279+
// Channel Stable:
1280+
// Operator E (Provides: CRD 2)
1281+
//
12751282
// Then create a subscription:
12761283
//
12771284
// CatalogSource: CatSrc
@@ -1280,10 +1287,11 @@ var _ = Describe("Subscription", func() {
12801287
// StartingCSV: CSV A
12811288
//
12821289
// Check installed:
1290+
// CSV A, CSV B, CSV E
12831291
//
1284-
// CSV A, CSV B, CSV C
1285-
//
1286-
// CSV A required B and C but didn't get them from Package A
1292+
// CSV ABC: not chosen as it is the same package with CSV A
1293+
// CSV D: not chosen as it is in non-default channel
1294+
// CSV C: not chosen as it is the same package with CSV B (which is chosen)
12871295
It("creation with dependencies required and provided in different versions of an operator in the same package", func() {
12881296

12891297
defer cleaner.NotifyTestComplete(true)
@@ -1335,6 +1343,7 @@ var _ = Describe("Subscription", func() {
13351343
// Create CSV
13361344
packageName1 := genName("apackage")
13371345
packageName2 := genName("bpackage")
1346+
packageName3 := genName("cpackage")
13381347

13391348
namedStrategy := newNginxInstallStrategy((genName("dep")), permissions, nil)
13401349
depNamedStrategy := newNginxInstallStrategy((genName("dep")), permissions, nil)
@@ -1350,6 +1359,8 @@ var _ = Describe("Subscription", func() {
13501359
csvC := newCSV("nginx-c-dep", testNamespace, "", semver.MustParse("0.1.0"), []apiextensions.CustomResourceDefinition{crd2}, nil, depNamedStrategy2)
13511360
// csvD provides CRD1 in the same catalogsource with csvA (apackage)
13521361
csvD := newCSV("nginx-d-dep", testNamespace, "", semver.MustParse("0.1.0"), []apiextensions.CustomResourceDefinition{crd}, nil, depNamedStrategy)
1362+
// csvE provides CRD2 in the different catalogsource with csvC (bpackage)
1363+
csvE := newCSV("nginx-e-dep", testNamespace, "", semver.MustParse("0.1.0"), []apiextensions.CustomResourceDefinition{crd2}, nil, depNamedStrategy2)
13531364

13541365
// Create PackageManifests 1
13551366
// Contain csvA, ABC and B
@@ -1382,6 +1393,13 @@ var _ = Describe("Subscription", func() {
13821393
},
13831394
DefaultChannelName: stableChannel,
13841395
},
1396+
{
1397+
PackageName: packageName3,
1398+
Channels: []registry.PackageChannel{
1399+
{Name: stableChannel, CurrentCSVName: csvE.GetName()},
1400+
},
1401+
DefaultChannelName: stableChannel,
1402+
},
13851403
}
13861404

13871405
catalogSourceName := genName("catsrc")
@@ -1402,7 +1420,7 @@ var _ = Describe("Subscription", func() {
14021420
}
14031421

14041422
catalogSourceName2 := genName("catsrc")
1405-
catsrc2, cleanup2 := createInternalCatalogSource(kubeClient, crClient, catalogSourceName2, testNamespace, manifests2, []apiextensions.CustomResourceDefinition{crd2}, []v1alpha1.ClusterServiceVersion{csvC})
1423+
catsrc2, cleanup2 := createInternalCatalogSource(kubeClient, crClient, catalogSourceName2, testNamespace, manifests2, []apiextensions.CustomResourceDefinition{crd2}, []v1alpha1.ClusterServiceVersion{csvC, csvE})
14061424
defer cleanup2()
14071425

14081426
// Ensure that the catalog source is resolved before we create a subscription.
@@ -1435,6 +1453,189 @@ var _ = Describe("Subscription", func() {
14351453
_, err = crClient.OperatorsV1alpha1().ClusterServiceVersions(testNamespace).Get(context.TODO(), csvD.Name, metav1.GetOptions{})
14361454
require.Error(GinkgoT(), err)
14371455
})
1456+
1457+
// csvA owns CRD1 & csvB owns CRD2 and requires CRD1
1458+
// Create subscription for csvB lead to installation of csvB and csvA
1459+
// Update catsrc to upgrade csvA to csvNewA which now requires CRD1
1460+
// csvNewA can't be installed due to no other operators provide CRD1 for it
1461+
// (Note: OLM can't pick csvA as dependency for csvNewA as it is from the same
1462+
// same package)
1463+
// Update catsrc again to upgrade csvB to csvNewB which now owns both CRD1 and
1464+
// CRD2.
1465+
// Now csvNewA and csvNewB are installed successfully as csvNewB provides CRD1
1466+
// that csvNewA requires
1467+
It("creation in case of transferring providedAPIs", func() {
1468+
1469+
defer cleaner.NotifyTestComplete(true)
1470+
1471+
kubeClient := newKubeClient()
1472+
crClient := newCRClient()
1473+
1474+
permissions := deploymentPermissions()
1475+
1476+
crdPlural := genName("ins")
1477+
crdName := crdPlural + ".cluster.com"
1478+
crdPlural2 := genName("ins")
1479+
crdName2 := crdPlural2 + ".cluster.com"
1480+
1481+
crd := apiextensions.CustomResourceDefinition{
1482+
ObjectMeta: metav1.ObjectMeta{
1483+
Name: crdName,
1484+
},
1485+
Spec: apiextensions.CustomResourceDefinitionSpec{
1486+
Group: "cluster.com",
1487+
Version: "v1alpha1",
1488+
Names: apiextensions.CustomResourceDefinitionNames{
1489+
Plural: crdPlural,
1490+
Singular: crdPlural,
1491+
Kind: crdPlural,
1492+
ListKind: "list" + crdPlural,
1493+
},
1494+
Scope: "Namespaced",
1495+
},
1496+
}
1497+
1498+
crd2 := apiextensions.CustomResourceDefinition{
1499+
ObjectMeta: metav1.ObjectMeta{
1500+
Name: crdName2,
1501+
},
1502+
Spec: apiextensions.CustomResourceDefinitionSpec{
1503+
Group: "cluster.com",
1504+
Version: "v1alpha1",
1505+
Names: apiextensions.CustomResourceDefinitionNames{
1506+
Plural: crdPlural2,
1507+
Singular: crdPlural2,
1508+
Kind: crdPlural2,
1509+
ListKind: "list" + crdPlural2,
1510+
},
1511+
Scope: "Namespaced",
1512+
},
1513+
}
1514+
1515+
// Create CSV
1516+
packageName1 := genName("apackage")
1517+
packageName2 := genName("bpackage")
1518+
1519+
namedStrategy := newNginxInstallStrategy((genName("dep")), permissions, nil)
1520+
namedStrategy2 := newNginxInstallStrategy((genName("dep")), permissions, nil)
1521+
// csvA provides CRD
1522+
csvA := newCSV("nginx-a", testNamespace, "", semver.MustParse("0.1.0"), []apiextensions.CustomResourceDefinition{crd}, nil, namedStrategy)
1523+
// csvB provides CRD2 and requires CRD
1524+
csvB := newCSV("nginx-b", testNamespace, "", semver.MustParse("0.1.0"), []apiextensions.CustomResourceDefinition{crd2}, []apiextensions.CustomResourceDefinition{crd}, namedStrategy2)
1525+
// New csvA requires CRD (transfer CRD ownership to the new csvB)
1526+
csvNewA := newCSV("nginx-new-a", testNamespace, "nginx-a", semver.MustParse("0.2.0"), nil, []apiextensions.CustomResourceDefinition{crd}, namedStrategy)
1527+
// New csvB provides CRD and CRD2
1528+
csvNewB := newCSV("nginx-new-b", testNamespace, "nginx-b", semver.MustParse("0.2.0"), []apiextensions.CustomResourceDefinition{crd, crd2}, nil, namedStrategy2)
1529+
1530+
// Create PackageManifests 1
1531+
// Contain csvA, ABC and B
1532+
manifests := []registry.PackageManifest{
1533+
{
1534+
PackageName: packageName1,
1535+
Channels: []registry.PackageChannel{
1536+
{Name: stableChannel, CurrentCSVName: csvA.GetName()},
1537+
},
1538+
DefaultChannelName: stableChannel,
1539+
},
1540+
{
1541+
PackageName: packageName2,
1542+
Channels: []registry.PackageChannel{
1543+
{Name: stableChannel, CurrentCSVName: csvB.GetName()},
1544+
},
1545+
DefaultChannelName: stableChannel,
1546+
},
1547+
}
1548+
1549+
catalogSourceName := genName("catsrc")
1550+
catsrc, cleanup := createInternalCatalogSource(kubeClient, crClient, catalogSourceName, testNamespace, manifests, []apiextensions.CustomResourceDefinition{crd, crd2}, []v1alpha1.ClusterServiceVersion{csvA, csvB})
1551+
defer cleanup()
1552+
1553+
// Ensure that the catalog source is resolved before we create a subscription.
1554+
_, err := fetchCatalogSourceOnStatus(crClient, catsrc.GetName(), testNamespace, catalogSourceRegistryPodSynced)
1555+
require.NoError(GinkgoT(), err)
1556+
1557+
subscriptionSpec := &v1alpha1.SubscriptionSpec{
1558+
CatalogSource: catsrc.GetName(),
1559+
CatalogSourceNamespace: catsrc.GetNamespace(),
1560+
Package: packageName2,
1561+
Channel: stableChannel,
1562+
StartingCSV: csvB.GetName(),
1563+
InstallPlanApproval: v1alpha1.ApprovalAutomatic,
1564+
}
1565+
1566+
// Create a subscription that has a dependency
1567+
subscriptionName := genName("sub-")
1568+
cleanupSubscription := createSubscriptionForCatalogWithSpec(GinkgoT(), crClient, testNamespace, subscriptionName, subscriptionSpec)
1569+
defer cleanupSubscription()
1570+
1571+
subscription, err := fetchSubscription(crClient, testNamespace, subscriptionName, subscriptionStateAtLatestChecker)
1572+
require.NoError(GinkgoT(), err)
1573+
require.NotNil(GinkgoT(), subscription)
1574+
1575+
// Check that a single catalog source was used to resolve the InstallPlan
1576+
_, err = fetchInstallPlan(GinkgoT(), crClient, subscription.Status.InstallPlanRef.Name, buildInstallPlanPhaseCheckFunc(v1alpha1.InstallPlanPhaseComplete))
1577+
require.NoError(GinkgoT(), err)
1578+
// Fetch CSVs A and B
1579+
_, err = fetchCSV(GinkgoT(), crClient, csvA.Name, testNamespace, csvSucceededChecker)
1580+
require.NoError(GinkgoT(), err)
1581+
_, err = fetchCSV(GinkgoT(), crClient, csvB.Name, testNamespace, csvSucceededChecker)
1582+
require.NoError(GinkgoT(), err)
1583+
1584+
// Update PackageManifest
1585+
manifests = []registry.PackageManifest{
1586+
{
1587+
PackageName: packageName1,
1588+
Channels: []registry.PackageChannel{
1589+
{Name: stableChannel, CurrentCSVName: csvNewA.GetName()},
1590+
},
1591+
DefaultChannelName: stableChannel,
1592+
},
1593+
{
1594+
PackageName: packageName2,
1595+
Channels: []registry.PackageChannel{
1596+
{Name: stableChannel, CurrentCSVName: csvB.GetName()},
1597+
},
1598+
DefaultChannelName: stableChannel,
1599+
},
1600+
}
1601+
updateInternalCatalog(GinkgoT(), kubeClient, crClient, catalogSourceName, testNamespace, []apiextensions.CustomResourceDefinition{crd, crd2}, []v1alpha1.ClusterServiceVersion{csvNewA, csvA, csvB}, manifests)
1602+
csvAsub := strings.Join([]string{packageName1, stableChannel, catalogSourceName, testNamespace}, "-")
1603+
_, err = fetchSubscription(crClient, testNamespace, csvAsub, subscriptionStateUpgradeAvailableChecker)
1604+
require.NoError(GinkgoT(), err)
1605+
// Ensure csvNewA is not installed
1606+
_, err = crClient.OperatorsV1alpha1().ClusterServiceVersions(testNamespace).Get(context.Background(), csvNewA.Name, metav1.GetOptions{})
1607+
require.Error(GinkgoT(), err)
1608+
// Ensure csvA still exists
1609+
_, err = fetchCSV(GinkgoT(), crClient, csvA.Name, testNamespace, csvSucceededChecker)
1610+
require.NoError(GinkgoT(), err)
1611+
1612+
// Update packagemanifest again
1613+
manifests = []registry.PackageManifest{
1614+
{
1615+
PackageName: packageName1,
1616+
Channels: []registry.PackageChannel{
1617+
{Name: stableChannel, CurrentCSVName: csvNewA.GetName()},
1618+
},
1619+
DefaultChannelName: stableChannel,
1620+
},
1621+
{
1622+
PackageName: packageName2,
1623+
Channels: []registry.PackageChannel{
1624+
{Name: stableChannel, CurrentCSVName: csvNewB.GetName()},
1625+
},
1626+
DefaultChannelName: stableChannel,
1627+
},
1628+
}
1629+
updateInternalCatalog(GinkgoT(), kubeClient, crClient, catalogSourceName, testNamespace, []apiextensions.CustomResourceDefinition{crd, crd2}, []v1alpha1.ClusterServiceVersion{csvA, csvB, csvNewA, csvNewB}, manifests)
1630+
_, err = fetchSubscription(crClient, testNamespace, subscriptionName, subscriptionStateUpgradePendingChecker)
1631+
require.NoError(GinkgoT(), err)
1632+
// Ensure csvNewA is installed
1633+
_, err = fetchCSV(GinkgoT(), crClient, csvNewA.Name, testNamespace, csvSucceededChecker)
1634+
require.NoError(GinkgoT(), err)
1635+
// Ensure csvNewB is installed
1636+
_, err = fetchCSV(GinkgoT(), crClient, csvNewB.Name, testNamespace, csvSucceededChecker)
1637+
require.NoError(GinkgoT(), err)
1638+
})
14381639
})
14391640

14401641
const (

0 commit comments

Comments
 (0)