@@ -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,65 @@ 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+ syncWorkerStatus SyncWorkerStatus
204+
205+ enabled bool
206+
207+ expectedCondition * configv1.ClusterOperatorStatusCondition
208+ }{
209+ {
210+ name : "ResourceReconciliationIssues present and happy when gate is enabled and no failures happened" ,
211+ syncWorkerStatus : SyncWorkerStatus {},
212+ enabled : true ,
213+ expectedCondition : & configv1.ClusterOperatorStatusCondition {
214+ Type : resourceReconciliationIssuesConditionType ,
215+ Status : configv1 .ConditionFalse ,
216+ Reason : noResourceReconciliationIssuesReason ,
217+ Message : noResourceReconciliationIssuesMessage ,
218+ },
219+ },
220+ {
221+ name : "ResourceReconciliationIssues present and unhappy when gate is enabled and failures happened" ,
222+ syncWorkerStatus : SyncWorkerStatus {
223+ Failure : fmt .Errorf ("Something happened" ),
224+ },
225+ enabled : true ,
226+ expectedCondition : & configv1.ClusterOperatorStatusCondition {
227+ Type : resourceReconciliationIssuesConditionType ,
228+ Status : configv1 .ConditionTrue ,
229+ Reason : resourceReconciliationIssuesFoundReason ,
230+ Message : "Issues found during resource reconciliation: Something happened" ,
231+ },
232+ },
233+ {
234+ name : "ResourceReconciliationIssues not present when gate is enabled and failures happened" ,
235+ syncWorkerStatus : SyncWorkerStatus {
236+ Failure : fmt .Errorf ("Something happened" ),
237+ },
238+ enabled : false ,
239+ expectedCondition : nil ,
240+ },
241+ }
242+
243+ for _ , tc := range testCases {
244+ tc := tc
245+ t .Run (tc .name , func (t * testing.T ) {
246+ gates := FeatureGates {ResourceReconciliationIssuesCondition : tc .enabled }
247+ release := configv1.Release {}
248+ getAvailableUpdates := func () * availableUpdates { return nil }
249+ var noErrors field.ErrorList
250+ cvStatus := configv1.ClusterVersionStatus {}
251+ updateClusterVersionStatus (& cvStatus , & tc .syncWorkerStatus , release , getAvailableUpdates , gates , noErrors )
252+ condition := resourcemerge .FindOperatorStatusCondition (cvStatus .Conditions , resourceReconciliationIssuesConditionType )
253+ if diff := cmp .Diff (tc .expectedCondition , condition , ignoreLastTransitionTime ); diff != "" {
254+ t .Errorf ("unexpected condition\n :%s" , diff )
255+ }
256+ })
257+ }
258+ }
0 commit comments