@@ -407,6 +407,88 @@ func (s *integrationTestSuite) TestAddonConditions() {
407407 s .Require ().Equal (addonsv1alpha1 .AddonReasonMissingCSV , availableCond .Reason )
408408 })
409409
410+ s .Run ("sets_installed=true_with_install_ack_required" , func () {
411+ // Remove addon before starting the test.
412+ s .addonCleanup (addon , ctx )
413+
414+ addon := addonWithInstallAck ()
415+
416+ err := integration .Client .Create (ctx , addon )
417+ s .Require ().NoError (err )
418+
419+ addonCSV := & operatorsv1alpha1.ClusterServiceVersion {
420+ ObjectMeta : metav1.ObjectMeta {
421+ Namespace : "namespace-onbgdions" ,
422+ Name : "reference-addon.v0.1.0" ,
423+ },
424+ }
425+
426+ // Assert that the csv phase has succeeded while the
427+ // addon is being installed.
428+ err = integration .WaitForObject (
429+ ctx ,
430+ s .T (), defaultAddonAvailabilityTimeout , addonCSV , "to have succeeded phase" ,
431+ func (obj client.Object ) (done bool , err error ) {
432+ csv := obj .(* operatorsv1alpha1.ClusterServiceVersion )
433+ return csv .Status .Phase == operatorsv1alpha1 .CSVPhaseSucceeded , nil
434+ })
435+ s .Require ().NoError (err )
436+
437+ err = integration .Client .Get (ctx , client .ObjectKeyFromObject (addon ), addon )
438+ s .Require ().NoError (err )
439+
440+ // Assert that the addon's installed condition is false.
441+ // i.e. even though the csv phase has succeeded, addon doesn't report as installed.
442+ s .Require ().True (meta .IsStatusConditionFalse (addon .Status .Conditions , addonsv1alpha1 .Installed ))
443+
444+ instance := & addonsv1alpha1.AddonInstance {}
445+ err = integration .Client .Get (ctx , types.NamespacedName {
446+ Name : addonsv1alpha1 .DefaultAddonInstanceName ,
447+ Namespace : addon .Spec .Install .OLMOwnNamespace .Namespace ,
448+ }, instance )
449+ s .Require ().NoError (err )
450+
451+ // Assert 'Installed' condition is not present in addon instance.
452+ s .Require ().Nil (meta .FindStatusCondition (instance .Status .Conditions , addonsv1alpha1 .AddonInstanceConditionInstalled .String ()))
453+
454+ // We impersonate the addon's operator and report its addon instance as installed.
455+ meta .SetStatusCondition (& instance .Status .Conditions , metav1.Condition {
456+ Type : addonsv1alpha1 .AddonInstanceConditionInstalled .String (),
457+ Reason : addonsv1alpha1 .AddonReasonInstanceInstalled ,
458+ Message : "Addon instance is installed" ,
459+ Status : metav1 .ConditionTrue ,
460+ })
461+
462+ err = integration .Client .Status ().Update (ctx , instance )
463+ s .Require ().NoError (err )
464+
465+ // Wait until addon has installed=true.
466+ // i.e. Addon Instance has been installed & CSV phase has succeeded.
467+ err = integration .WaitForObject (
468+ ctx ,
469+ s .T (), defaultAddonAvailabilityTimeout , addon , "to be installed" ,
470+ func (obj client.Object ) (done bool , err error ) {
471+ a := obj .(* addonsv1alpha1.Addon )
472+ return meta .IsStatusConditionTrue (
473+ a .Status .Conditions , addonsv1alpha1 .Installed ), nil
474+ })
475+ s .Require ().NoError (err )
476+
477+ err = integration .Client .Get (ctx , client .ObjectKeyFromObject (addon ), addon )
478+ s .Require ().NoError (err )
479+
480+ // Assert that the required conditions are met.
481+ instanceInstalledCond := meta .FindStatusCondition (instance .Status .Conditions , addonsv1alpha1 .AddonInstanceConditionInstalled .String ())
482+ s .Require ().NotNil (instanceInstalledCond )
483+ s .Require ().Equal (metav1 .ConditionTrue , instanceInstalledCond .Status )
484+ availableCond := meta .FindStatusCondition (addon .Status .Conditions , addonsv1alpha1 .Available )
485+ s .Require ().NotNil (availableCond )
486+ s .Require ().Equal (metav1 .ConditionTrue , availableCond .Status )
487+ addonInstalledCond := meta .FindStatusCondition (addon .Status .Conditions , addonsv1alpha1 .Installed )
488+ s .Require ().NotNil (addonInstalledCond )
489+ s .Require ().Equal (metav1 .ConditionTrue , addonInstalledCond .Status )
490+ })
491+
410492 s .T ().Cleanup (func () {
411493 s .addonCleanup (addon , ctx )
412494 })
0 commit comments