@@ -12,7 +12,9 @@ import (
1212 "github.com/stretchr/testify/require"
1313 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1414 featuregatetesting "k8s.io/component-base/featuregate/testing"
15+ "k8s.io/utils/pointer"
1516
17+ operatorsv1alpha1 "github.com/operator-framework/operator-controller/api/v1alpha1"
1618 "github.com/operator-framework/operator-controller/internal/catalogmetadata"
1719 "github.com/operator-framework/operator-controller/internal/resolution/variablesources"
1820 "github.com/operator-framework/operator-controller/pkg/features"
@@ -201,8 +203,20 @@ func TestMakeInstalledPackageVariables(t *testing.T) {
201203 },
202204 }
203205
204- fakeBundleDeployment := func (name , bundleImage string ) rukpakv1alpha1.BundleDeployment {
205- return rukpakv1alpha1.BundleDeployment {
206+ fakeOperator := func (name , packageName string , upgradeConstraintPolicy operatorsv1alpha1.UpgradeConstraintPolicy ) operatorsv1alpha1.Operator {
207+ return operatorsv1alpha1.Operator {
208+ ObjectMeta : metav1.ObjectMeta {
209+ Name : name ,
210+ },
211+ Spec : operatorsv1alpha1.OperatorSpec {
212+ PackageName : packageName ,
213+ UpgradeConstraintPolicy : upgradeConstraintPolicy ,
214+ },
215+ }
216+ }
217+
218+ fakeBundleDeployment := func (name , bundleImage string , owner * operatorsv1alpha1.Operator ) rukpakv1alpha1.BundleDeployment {
219+ bd := rukpakv1alpha1.BundleDeployment {
206220 ObjectMeta : metav1.ObjectMeta {
207221 Name : name ,
208222 },
@@ -218,17 +232,34 @@ func TestMakeInstalledPackageVariables(t *testing.T) {
218232 },
219233 },
220234 }
235+
236+ if owner != nil {
237+ bd .SetOwnerReferences ([]metav1.OwnerReference {
238+ {
239+ APIVersion : operatorsv1alpha1 .GroupVersion .String (),
240+ Kind : "Operator" ,
241+ Name : owner .Name ,
242+ UID : owner .UID ,
243+ Controller : pointer .Bool (true ),
244+ BlockOwnerDeletion : pointer .Bool (true ),
245+ },
246+ })
247+ }
248+
249+ return bd
221250 }
222251
223252 t .Run ("with ForceSemverUpgradeConstraints feature gate enabled" , func (t * testing.T ) {
224253 defer featuregatetesting .SetFeatureGateDuringTest (t , features .OperatorControllerFeatureGate , features .ForceSemverUpgradeConstraints , true )()
225254
226255 t .Run ("with non-zero major version" , func (t * testing.T ) {
227256 const bundleImage = "registry.io/repo/test-package@v2.0.0"
257+ fakeOperator := fakeOperator ("test-operator" , "test-package" , operatorsv1alpha1 .UpgradeConstraintPolicyEnforce )
228258 installedPackages , err := variablesources .MakeInstalledPackageVariables (
229259 allBundles ,
260+ []operatorsv1alpha1.Operator {fakeOperator },
230261 []rukpakv1alpha1.BundleDeployment {
231- fakeBundleDeployment ("test-bd" , bundleImage ),
262+ fakeBundleDeployment ("test-package- bd" , bundleImage , & fakeOperator ),
232263 },
233264 )
234265 require .NoError (t , err )
@@ -248,10 +279,12 @@ func TestMakeInstalledPackageVariables(t *testing.T) {
248279 t .Run ("with zero major version" , func (t * testing.T ) {
249280 t .Run ("with zero minor version" , func (t * testing.T ) {
250281 const bundleImage = "registry.io/repo/test-package@v0.0.1"
282+ fakeOperator := fakeOperator ("test-operator" , "test-package" , operatorsv1alpha1 .UpgradeConstraintPolicyEnforce )
251283 installedPackages , err := variablesources .MakeInstalledPackageVariables (
252284 allBundles ,
285+ []operatorsv1alpha1.Operator {fakeOperator },
253286 []rukpakv1alpha1.BundleDeployment {
254- fakeBundleDeployment ("test-bd" , bundleImage ),
287+ fakeBundleDeployment ("test-package- bd" , bundleImage , & fakeOperator ),
255288 },
256289 )
257290 require .NoError (t , err )
@@ -268,10 +301,12 @@ func TestMakeInstalledPackageVariables(t *testing.T) {
268301
269302 t .Run ("with non-zero minor version" , func (t * testing.T ) {
270303 const bundleImage = "registry.io/repo/test-package@v0.1.0"
304+ fakeOperator := fakeOperator ("test-operator" , "test-package" , operatorsv1alpha1 .UpgradeConstraintPolicyEnforce )
271305 installedPackages , err := variablesources .MakeInstalledPackageVariables (
272306 allBundles ,
307+ []operatorsv1alpha1.Operator {fakeOperator },
273308 []rukpakv1alpha1.BundleDeployment {
274- fakeBundleDeployment ("test-bd" , bundleImage ),
309+ fakeBundleDeployment ("test-package- bd" , bundleImage , & fakeOperator ),
275310 },
276311 )
277312 require .NoError (t , err )
@@ -293,10 +328,12 @@ func TestMakeInstalledPackageVariables(t *testing.T) {
293328 defer featuregatetesting .SetFeatureGateDuringTest (t , features .OperatorControllerFeatureGate , features .ForceSemverUpgradeConstraints , false )()
294329
295330 const bundleImage = "registry.io/repo/test-package@v2.0.0"
331+ fakeOperator := fakeOperator ("test-operator" , "test-package" , operatorsv1alpha1 .UpgradeConstraintPolicyEnforce )
296332 installedPackages , err := variablesources .MakeInstalledPackageVariables (
297333 allBundles ,
334+ []operatorsv1alpha1.Operator {fakeOperator },
298335 []rukpakv1alpha1.BundleDeployment {
299- fakeBundleDeployment ("test-bd" , bundleImage ),
336+ fakeBundleDeployment ("test-package- bd" , bundleImage , & fakeOperator ),
300337 },
301338 )
302339 require .NoError (t , err )
@@ -312,12 +349,47 @@ func TestMakeInstalledPackageVariables(t *testing.T) {
312349 assert .Equal (t , "test-package.v2.0.0" , packageVariable .Bundles ()[1 ].Name )
313350 })
314351
352+ t .Run ("UpgradeConstraintPolicy is set to Ignore" , func (t * testing.T ) {
353+ const bundleImage = "registry.io/repo/test-package@v2.0.0"
354+ fakeOperator := fakeOperator ("test-operator" , "test-package" , operatorsv1alpha1 .UpgradeConstraintPolicyIgnore )
355+ installedPackages , err := variablesources .MakeInstalledPackageVariables (
356+ allBundles ,
357+ []operatorsv1alpha1.Operator {fakeOperator },
358+ []rukpakv1alpha1.BundleDeployment {
359+ fakeBundleDeployment ("test-package-bd" , bundleImage , & fakeOperator ),
360+ },
361+ )
362+ require .NoError (t , err )
363+
364+ require .Len (t , installedPackages , 1 )
365+ packageVariable := installedPackages [0 ]
366+ assert .Equal (t , deppy .IdentifierFromString ("installed package test-package" ), packageVariable .Identifier ())
367+
368+ // ensure bundles are in version order (high to low)
369+ bundles := packageVariable .Bundles ()
370+ require .Len (t , bundles , 12 )
371+ assert .Equal (t , "test-package.v5.0.0" , bundles [0 ].Name )
372+ assert .Equal (t , "test-package.v4.0.0" , bundles [1 ].Name )
373+ assert .Equal (t , "test-package.v3.0.0" , bundles [2 ].Name )
374+ assert .Equal (t , "test-package.v2.2.0" , bundles [3 ].Name )
375+ assert .Equal (t , "test-package.v2.1.0" , bundles [4 ].Name )
376+ assert .Equal (t , "test-package.v1.0.0" , bundles [5 ].Name )
377+ assert .Equal (t , "test-package.v0.2.0" , bundles [6 ].Name )
378+ assert .Equal (t , "test-package.v0.1.1" , bundles [7 ].Name )
379+ assert .Equal (t , "test-package.v0.1.0" , bundles [8 ].Name )
380+ assert .Equal (t , "test-package.v0.0.2" , bundles [9 ].Name )
381+ assert .Equal (t , "test-package.v0.0.1" , bundles [10 ].Name )
382+ assert .Equal (t , "test-package.v2.0.0" , bundles [11 ].Name )
383+ })
384+
315385 t .Run ("installed bundle not found" , func (t * testing.T ) {
316386 const bundleImage = "registry.io/repo/test-package@v9.0.0"
387+ fakeOperator := fakeOperator ("test-operator" , "test-package" , operatorsv1alpha1 .UpgradeConstraintPolicyEnforce )
317388 installedPackages , err := variablesources .MakeInstalledPackageVariables (
318389 allBundles ,
390+ []operatorsv1alpha1.Operator {fakeOperator },
319391 []rukpakv1alpha1.BundleDeployment {
320- fakeBundleDeployment ("test-bd" , bundleImage ),
392+ fakeBundleDeployment ("test-package- bd" , bundleImage , & fakeOperator ),
321393 },
322394 )
323395 assert .Nil (t , installedPackages )
0 commit comments