diff --git a/status/controller_test.go b/status/controller_test.go index 1a15d87..577c7ef 100644 --- a/status/controller_test.go +++ b/status/controller_test.go @@ -1186,6 +1186,25 @@ var _ = Describe("Generic Controller", func() { Expect(GetMetric("operator_testgenericobject_status_condition_count", conditionLabels(status.ConditionReady, metav1.ConditionUnknown))).To(BeNil()) Expect(GetMetric("operator_testgenericobject_status_condition_current_status_seconds", conditionLabels(status.ConditionReady, metav1.ConditionUnknown))).To(BeNil()) }) + It("should emit a Ready condition metric for objects that define one", func() { + // Objects like corev1.Node carry a real, persisted Ready condition. Skipping + // initialization of absent conditions must not stop us from reporting a Ready + // that is actually present on the object. + testObject := test.Object(&TestGenericObject{}) + gvk := object.GVK(testObject) + testObject.Status = TestGenericStatus{ + Conditions: []metav1.Condition{ + {Type: status.ConditionReady, Status: metav1.ConditionTrue}, + }, + } + + ExpectApplied(ctx, kubeClient, testObject) + ExpectReconciled(ctx, genericController, testObject) + + Expect(GetMetric("operator_status_condition_count", conditionLabelsWithGroupKind(gvk, status.ConditionReady, metav1.ConditionTrue)).GetGauge().GetValue()).To(BeEquivalentTo(1)) + Expect(GetMetric("operator_status_condition_current_status_seconds", conditionLabelsWithGroupKind(gvk, status.ConditionReady, metav1.ConditionTrue)).GetGauge().GetValue()).ToNot(BeZero()) + Expect(GetMetric("operator_testgenericobject_status_condition_count", conditionLabels(status.ConditionReady, metav1.ConditionTrue)).GetGauge().GetValue()).To(BeEquivalentTo(1)) + }) It("should emit transition total metrics for abnormal conditions", func() { testObject := test.Object(&TestGenericObject{}) gvk := object.GVK(testObject)