@@ -1253,6 +1253,141 @@ var _ = Describe("Subscription", func() {
1253
1253
require .NoError (GinkgoT (), err )
1254
1254
require .Len (GinkgoT (), installPlan .Status .CatalogSources , 1 )
1255
1255
})
1256
+
1257
+ It ("creation with multiple dependencies" , func () {
1258
+
1259
+ defer cleaner .NotifyTestComplete (GinkgoT (), true )
1260
+
1261
+ kubeClient := newKubeClient (GinkgoT ())
1262
+ crClient := newCRClient (GinkgoT ())
1263
+
1264
+ permissions := deploymentPermissions ()
1265
+
1266
+ crdPlural := genName ("ins" )
1267
+ crdName := crdPlural + ".cluster.com"
1268
+ crdPlural2 := genName ("ins" )
1269
+ crdName2 := crdPlural2 + ".cluster.com"
1270
+
1271
+ crd := apiextensions.CustomResourceDefinition {
1272
+ ObjectMeta : metav1.ObjectMeta {
1273
+ Name : crdName ,
1274
+ },
1275
+ Spec : apiextensions.CustomResourceDefinitionSpec {
1276
+ Group : "cluster.com" ,
1277
+ Version : "v1alpha1" ,
1278
+ Names : apiextensions.CustomResourceDefinitionNames {
1279
+ Plural : crdPlural ,
1280
+ Singular : crdPlural ,
1281
+ Kind : crdPlural ,
1282
+ ListKind : "list" + crdPlural ,
1283
+ },
1284
+ Scope : "Namespaced" ,
1285
+ },
1286
+ }
1287
+
1288
+ crd2 := apiextensions.CustomResourceDefinition {
1289
+ ObjectMeta : metav1.ObjectMeta {
1290
+ Name : crdName2 ,
1291
+ },
1292
+ Spec : apiextensions.CustomResourceDefinitionSpec {
1293
+ Group : "cluster.com" ,
1294
+ Version : "v1alpha1" ,
1295
+ Names : apiextensions.CustomResourceDefinitionNames {
1296
+ Plural : crdPlural2 ,
1297
+ Singular : crdPlural2 ,
1298
+ Kind : crdPlural2 ,
1299
+ ListKind : "list" + crdPlural2 ,
1300
+ },
1301
+ Scope : "Namespaced" ,
1302
+ },
1303
+ }
1304
+
1305
+ // Create CSV
1306
+ packageName1 := genName ("apackage" )
1307
+ packageName2 := genName ("bpackage" )
1308
+
1309
+ namedStrategy := newNginxInstallStrategy ((genName ("dep" )), permissions , nil )
1310
+ depNamedStrategy := newNginxInstallStrategy ((genName ("dep" )), permissions , nil )
1311
+ depNamedStrategy2 := newNginxInstallStrategy ((genName ("dep" )), permissions , nil )
1312
+ csvA := newCSV ("nginx-a" , testNamespace , "" , semver .MustParse ("0.1.0" ), nil , []apiextensions.CustomResourceDefinition {crd , crd2 }, namedStrategy )
1313
+ csvABC := newCSV ("nginx-a-bc" , testNamespace , "" , semver .MustParse ("0.1.0" ), []apiextensions.CustomResourceDefinition {crd , crd2 }, nil , namedStrategy )
1314
+ csvB := newCSV ("nginx-b-dep" , testNamespace , "" , semver .MustParse ("0.1.0" ), []apiextensions.CustomResourceDefinition {crd }, nil , depNamedStrategy )
1315
+ csvC := newCSV ("nginx-c-dep" , testNamespace , "" , semver .MustParse ("0.1.0" ), []apiextensions.CustomResourceDefinition {crd2 }, nil , depNamedStrategy2 )
1316
+
1317
+ // Create PackageManifests
1318
+ manifests := []registry.PackageManifest {
1319
+ {
1320
+ PackageName : packageName1 ,
1321
+ Channels : []registry.PackageChannel {
1322
+ {Name : stableChannel , CurrentCSVName : csvA .GetName ()},
1323
+ {Name : alphaChannel , CurrentCSVName : csvABC .GetName ()},
1324
+ },
1325
+ DefaultChannelName : stableChannel ,
1326
+ },
1327
+ {
1328
+ PackageName : packageName2 ,
1329
+ Channels : []registry.PackageChannel {
1330
+ {Name : stableChannel , CurrentCSVName : csvB .GetName ()},
1331
+ },
1332
+ DefaultChannelName : stableChannel ,
1333
+ },
1334
+ }
1335
+
1336
+ manifests2 := []registry.PackageManifest {
1337
+ {
1338
+ PackageName : packageName2 ,
1339
+ Channels : []registry.PackageChannel {
1340
+ {Name : stableChannel , CurrentCSVName : csvC .GetName ()},
1341
+ },
1342
+ DefaultChannelName : stableChannel ,
1343
+ },
1344
+ }
1345
+
1346
+ catalogSourceName := genName ("catsrc" )
1347
+ catsrc , cleanup := createInternalCatalogSource (GinkgoT (), kubeClient , crClient , catalogSourceName , testNamespace , manifests , []apiextensions.CustomResourceDefinition {crd , crd2 }, []v1alpha1.ClusterServiceVersion {csvA , csvABC , csvB })
1348
+ defer cleanup ()
1349
+
1350
+ // Ensure that the catalog source is resolved before we create a subscription.
1351
+ _ , err := fetchCatalogSource (GinkgoT (), crClient , catsrc .GetName (), testNamespace , catalogSourceRegistryPodSynced )
1352
+ require .NoError (GinkgoT (), err )
1353
+
1354
+ subscriptionSpec := & v1alpha1.SubscriptionSpec {
1355
+ CatalogSource : catsrc .GetName (),
1356
+ CatalogSourceNamespace : catsrc .GetNamespace (),
1357
+ Package : packageName1 ,
1358
+ Channel : stableChannel ,
1359
+ StartingCSV : csvA .GetName (),
1360
+ InstallPlanApproval : v1alpha1 .ApprovalAutomatic ,
1361
+ }
1362
+
1363
+ catalogSourceName2 := genName ("catsrc" )
1364
+ catsrc2 , cleanup2 := createInternalCatalogSource (GinkgoT (), kubeClient , crClient , catalogSourceName2 , testNamespace , manifests2 , []apiextensions.CustomResourceDefinition {crd2 }, []v1alpha1.ClusterServiceVersion {csvC })
1365
+ defer cleanup2 ()
1366
+
1367
+ // Ensure that the catalog source is resolved before we create a subscription.
1368
+ _ , err = fetchCatalogSource (GinkgoT (), crClient , catsrc2 .GetName (), testNamespace , catalogSourceRegistryPodSynced )
1369
+ require .NoError (GinkgoT (), err )
1370
+
1371
+ // Create a subscription that has a dependency
1372
+ subscriptionName := genName ("sub-" )
1373
+ cleanupSubscription := createSubscriptionForCatalogWithSpec (GinkgoT (), crClient , testNamespace , subscriptionName , subscriptionSpec )
1374
+ defer cleanupSubscription ()
1375
+
1376
+ subscription , err := fetchSubscription (GinkgoT (), crClient , testNamespace , subscriptionName , subscriptionStateAtLatestChecker )
1377
+ require .NoError (GinkgoT (), err )
1378
+ require .NotNil (GinkgoT (), subscription )
1379
+
1380
+ // Check that a single catalog source was used to resolve the InstallPlan
1381
+ _ , err = fetchInstallPlan (GinkgoT (), crClient , subscription .Status .InstallPlanRef .Name , buildInstallPlanPhaseCheckFunc (v1alpha1 .InstallPlanPhaseComplete ))
1382
+ require .NoError (GinkgoT (), err )
1383
+ // Fetch CSVs
1384
+ _ , err = fetchCSV (GinkgoT (), crClient , csvB .Name , testNamespace , csvSucceededChecker )
1385
+ require .NoError (GinkgoT (), err )
1386
+ _ , err = fetchCSV (GinkgoT (), crClient , csvC .Name , testNamespace , csvSucceededChecker )
1387
+ require .NoError (GinkgoT (), err )
1388
+ _ , err = fetchCSV (GinkgoT (), crClient , csvA .Name , testNamespace , csvSucceededChecker )
1389
+ require .NoError (GinkgoT (), err )
1390
+ })
1256
1391
})
1257
1392
1258
1393
const (
0 commit comments