@@ -32,29 +32,13 @@ func TestClusterExtensionAfterOLMUpgrade(t *testing.T) {
3232 ctx := context .Background ()
3333 defer utils .CollectTestArtifacts (t , artifactName , c , cfg )
3434
35- managerLabelSelector := labels.Set {"control-plane" : "operator-controller-controller-manager" }
35+ // wait for catalogd deployment to finish
36+ t .Log ("Wait for catalogd deployment to be ready" )
37+ catalogdManagerPod := waitForDeployment (t , ctx , "catalogd-controller-manager" )
3638
37- t .Log ("Checking that the controller-manager deployment is updated" )
38- require .EventuallyWithT (t , func (ct * assert.CollectT ) {
39- var managerDeployments appsv1.DeploymentList
40- assert .NoError (ct , c .List (ctx , & managerDeployments , client.MatchingLabelsSelector {Selector : managerLabelSelector .AsSelector ()}))
41- assert .Len (ct , managerDeployments .Items , 1 )
42- managerDeployment := managerDeployments .Items [0 ]
43-
44- assert .True (ct ,
45- managerDeployment .Status .UpdatedReplicas == * managerDeployment .Spec .Replicas &&
46- managerDeployment .Status .Replicas == * managerDeployment .Spec .Replicas &&
47- managerDeployment .Status .AvailableReplicas == * managerDeployment .Spec .Replicas &&
48- managerDeployment .Status .ReadyReplicas == * managerDeployment .Spec .Replicas ,
49- )
50- }, time .Minute , time .Second )
51-
52- var managerPods corev1.PodList
53- t .Log ("Waiting for only one controller-manager Pod to remain" )
54- require .EventuallyWithT (t , func (ct * assert.CollectT ) {
55- assert .NoError (ct , c .List (ctx , & managerPods , client.MatchingLabelsSelector {Selector : managerLabelSelector .AsSelector ()}))
56- assert .Len (ct , managerPods .Items , 1 )
57- }, time .Minute , time .Second )
39+ // wait for operator-controller deployment to finish
40+ t .Log ("Wait for operator-controller deployment to be ready" )
41+ managerPod := waitForDeployment (t , ctx , "operator-controller-controller-manager" )
5842
5943 t .Log ("Reading logs to make sure that ClusterExtension was reconciled by operator-controller before we update it" )
6044 // Make sure that after we upgrade OLM itself we can still reconcile old objects without any changes
@@ -64,20 +48,34 @@ func TestClusterExtensionAfterOLMUpgrade(t *testing.T) {
6448 "reconcile ending" ,
6549 fmt .Sprintf (`ClusterExtension=%q` , testClusterExtensionName ),
6650 }
67- found , err := watchPodLogsForSubstring (logCtx , & managerPods . Items [ 0 ] , "manager" , substrings ... )
51+ found , err := watchPodLogsForSubstring (logCtx , managerPod , "manager" , substrings ... )
6852 require .NoError (t , err )
6953 require .True (t , found )
7054
71- t .Log ("Checking that the ClusterCatalog is serving " )
55+ t .Log ("Checking that the ClusterCatalog is unpacked " )
7256 require .EventuallyWithT (t , func (ct * assert.CollectT ) {
7357 var clusterCatalog catalogd.ClusterCatalog
7458 assert .NoError (ct , c .Get (ctx , types.NamespacedName {Name : testClusterCatalogName }, & clusterCatalog ))
59+
60+ // check serving condition
7561 cond := apimeta .FindStatusCondition (clusterCatalog .Status .Conditions , catalogd .TypeServing )
7662 if ! assert .NotNil (ct , cond ) {
7763 return
7864 }
7965 assert .Equal (ct , metav1 .ConditionTrue , cond .Status )
8066 assert .Equal (ct , catalogd .ReasonAvailable , cond .Reason )
67+
68+ // mitigation for upgrade-e2e flakiness caused by the following bug
69+ // https://github.com/operator-framework/operator-controller/issues/1626
70+ // wait until the unpack time > than the catalogd controller pod creation time
71+ cond = apimeta .FindStatusCondition (clusterCatalog .Status .Conditions , catalogd .TypeProgressing )
72+ if ! assert .NotNil (ct , cond ) {
73+ return
74+ }
75+ assert .Equal (ct , metav1 .ConditionTrue , cond .Status )
76+ assert .Equal (ct , catalogd .ReasonSucceeded , cond .Reason )
77+
78+ assert .True (ct , clusterCatalog .Status .LastUnpacked .After (catalogdManagerPod .CreationTimestamp .Time ))
8179 }, time .Minute , time .Second )
8280
8381 t .Log ("Checking that the ClusterExtension is installed" )
@@ -117,6 +115,33 @@ func TestClusterExtensionAfterOLMUpgrade(t *testing.T) {
117115 }, time .Minute , time .Second )
118116}
119117
118+ func waitForDeployment (t * testing.T , ctx context.Context , controlPlaneLabel string ) * corev1.Pod {
119+ deploymentLabelSelector := labels.Set {"control-plane" : controlPlaneLabel }.AsSelector ()
120+
121+ t .Log ("Checking that the deployment is updated" )
122+ require .EventuallyWithT (t , func (ct * assert.CollectT ) {
123+ var managerDeployments appsv1.DeploymentList
124+ assert .NoError (ct , c .List (ctx , & managerDeployments , client.MatchingLabelsSelector {Selector : deploymentLabelSelector }))
125+ assert .Len (ct , managerDeployments .Items , 1 )
126+ managerDeployment := managerDeployments .Items [0 ]
127+
128+ assert .True (ct ,
129+ managerDeployment .Status .UpdatedReplicas == * managerDeployment .Spec .Replicas &&
130+ managerDeployment .Status .Replicas == * managerDeployment .Spec .Replicas &&
131+ managerDeployment .Status .AvailableReplicas == * managerDeployment .Spec .Replicas &&
132+ managerDeployment .Status .ReadyReplicas == * managerDeployment .Spec .Replicas ,
133+ )
134+ }, time .Minute , time .Second )
135+
136+ var managerPods corev1.PodList
137+ t .Log ("Waiting for only one Pod to remain" )
138+ require .EventuallyWithT (t , func (ct * assert.CollectT ) {
139+ assert .NoError (ct , c .List (ctx , & managerPods , client.MatchingLabelsSelector {Selector : deploymentLabelSelector }))
140+ assert .Len (ct , managerPods .Items , 1 )
141+ }, time .Minute , time .Second )
142+ return & managerPods .Items [0 ]
143+ }
144+
120145func watchPodLogsForSubstring (ctx context.Context , pod * corev1.Pod , container string , substrings ... string ) (bool , error ) {
121146 podLogOpts := corev1.PodLogOptions {
122147 Follow : true ,
0 commit comments