@@ -6,8 +6,12 @@ import (
66 "reflect"
77 "testing"
88
9+ "github.com/google/go-cmp/cmp"
10+ "github.com/google/go-cmp/cmp/cmpopts"
11+ "github.com/openshift/cluster-version-operator/lib/resourcemerge"
912 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1013 "k8s.io/apimachinery/pkg/util/diff"
14+ "k8s.io/apimachinery/pkg/util/validation/field"
1115 "k8s.io/client-go/tools/record"
1216
1317 configv1 "github.com/openshift/api/config/v1"
@@ -190,3 +194,66 @@ func TestOperator_syncFailingStatus(t *testing.T) {
190194 })
191195 }
192196}
197+
198+ func TestUpdateClusterVersionStatus_ResourceReconciliationIssues (t * testing.T ) {
199+ ignoreLastTransitionTime := cmpopts .IgnoreFields (configv1.ClusterOperatorStatusCondition {}, "LastTransitionTime" )
200+
201+ testCases := []struct {
202+ name string
203+ originalCvStatus configv1.ClusterVersionStatus
204+ syncWorkerStatus SyncWorkerStatus
205+
206+ enabled bool
207+
208+ expectedCondition * configv1.ClusterOperatorStatusCondition
209+ }{
210+ {
211+ name : "ResourceReconciliationIssues present and happy when gate is enabled and no failures happened" ,
212+ originalCvStatus : configv1.ClusterVersionStatus {},
213+ syncWorkerStatus : SyncWorkerStatus {},
214+ enabled : true ,
215+ expectedCondition : & configv1.ClusterOperatorStatusCondition {
216+ Type : resourceReconciliationIssuesConditionType ,
217+ Status : configv1 .ConditionFalse ,
218+ Reason : noResourceReconciliationIssuesReason ,
219+ Message : noResourceReconciliationIssuesMessage ,
220+ },
221+ },
222+ {
223+ name : "ResourceReconciliationIssues present and unhappy when gate is enabled and failures happened" ,
224+ originalCvStatus : configv1.ClusterVersionStatus {},
225+ syncWorkerStatus : SyncWorkerStatus {
226+ Failure : fmt .Errorf ("Something happened" ),
227+ },
228+ enabled : true ,
229+ expectedCondition : & configv1.ClusterOperatorStatusCondition {
230+ Type : resourceReconciliationIssuesConditionType ,
231+ Status : configv1 .ConditionTrue ,
232+ Reason : resourceReconciliationIssuesFoundReason ,
233+ Message : fmt .Sprintf ("Issues found during resource reconciliation: Something happened" ),
234+ },
235+ },
236+ {
237+ name : "ResourceReconciliationIssues not present when gate is enabled and failures happened" ,
238+ originalCvStatus : configv1.ClusterVersionStatus {},
239+ syncWorkerStatus : SyncWorkerStatus {},
240+ enabled : false ,
241+ expectedCondition : nil ,
242+ },
243+ }
244+
245+ for _ , tc := range testCases {
246+ tc := tc
247+ t .Run (tc .name , func (t * testing.T ) {
248+ gates := FeatureGates {ResourceReconciliationIssuesCondition : tc .enabled }
249+ release := configv1.Release {}
250+ getAvailableUpdates := func () * availableUpdates { return nil }
251+ var noErrors field.ErrorList
252+ updateClusterVersionStatus (& tc .originalCvStatus , & tc .syncWorkerStatus , release , getAvailableUpdates , gates , noErrors )
253+ condition := resourcemerge .FindOperatorStatusCondition (tc .originalCvStatus .Conditions , resourceReconciliationIssuesConditionType )
254+ if diff := cmp .Diff (tc .expectedCondition , condition , ignoreLastTransitionTime ); diff != "" {
255+ t .Errorf ("unexpected condition\n :%s" , diff )
256+ }
257+ })
258+ }
259+ }
0 commit comments