@@ -10,7 +10,6 @@ import (
10
10
"github.com/awslabs/operatorpkg/status"
11
11
"github.com/awslabs/operatorpkg/test"
12
12
. "github.com/awslabs/operatorpkg/test/expectations"
13
- "github.com/onsi/ginkgo/v2"
14
13
. "github.com/onsi/ginkgo/v2"
15
14
. "github.com/onsi/gomega"
16
15
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -44,7 +43,7 @@ var _ = Describe("Controller", func() {
44
43
BeforeEach (func () {
45
44
recorder = record .NewFakeRecorder (10 )
46
45
kubeClient = fake .NewClientBuilder ().WithScheme (scheme .Scheme ).Build ()
47
- ctx = log .IntoContext (context .Background (), ginkgo . GinkgoLogr )
46
+ ctx = log .IntoContext (context .Background (), GinkgoLogr )
48
47
controller = status .NewController [* test.CustomObject ](kubeClient , recorder , status .EmitDeprecatedMetrics )
49
48
})
50
49
AfterEach (func () {
@@ -517,14 +516,54 @@ var _ = Describe("Controller", func() {
517
516
}()
518
517
}
519
518
})
519
+ It ("should set LastTransitionTime for status conditions on initialization to CreationTimestamp" , func () {
520
+ testObject := test .Object (& test.CustomObject {})
521
+ testObject .StatusConditions () // initialize conditions after applying and setting CreationTimestamp
522
+
523
+ Expect (testObject .StatusConditions ().Get (test .ConditionTypeFoo ).LastTransitionTime .Time ).To (Equal (testObject .GetCreationTimestamp ().Time ))
524
+ Expect (testObject .StatusConditions ().Get (test .ConditionTypeBar ).LastTransitionTime .Time ).To (Equal (testObject .GetCreationTimestamp ().Time ))
525
+ Expect (testObject .StatusConditions ().Get (status .ConditionReady ).LastTransitionTime .Time ).To (Equal (testObject .GetCreationTimestamp ().Time ))
526
+ })
527
+ It ("should consider status conditions that aren't set as unknown" , func () {
528
+ // This mimics an object creation
529
+ testObject := test .Object (& test.CustomObject {})
530
+ ExpectApplied (ctx , kubeClient , testObject )
531
+ ExpectReconciled (ctx , controller , testObject )
532
+
533
+ // Then the status conditions gets initialized and a condition is set to True
534
+ testObject .StatusConditions ().SetTrue (test .ConditionTypeFoo )
535
+ testObject .SetCreationTimestamp (metav1.Time {Time : time .Now ().Add (time .Hour )})
536
+ ExpectApplied (ctx , kubeClient , testObject )
537
+ ExpectReconciled (ctx , controller , testObject )
538
+
539
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (status .ConditionReady , metav1 .ConditionTrue ))).To (BeNil ())
540
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (status .ConditionReady , metav1 .ConditionFalse ))).To (BeNil ())
541
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (status .ConditionReady , metav1 .ConditionUnknown ))).To (BeNil ())
542
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (ConditionTypeFoo , metav1 .ConditionTrue ))).To (BeNil ())
543
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (ConditionTypeFoo , metav1 .ConditionFalse ))).To (BeNil ())
544
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (ConditionTypeFoo , metav1 .ConditionUnknown )).GetHistogram ().GetSampleCount ()).To (BeNumerically (">" , 0 ))
545
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (ConditionTypeBar , metav1 .ConditionTrue ))).To (BeNil ())
546
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (ConditionTypeBar , metav1 .ConditionFalse ))).To (BeNil ())
547
+ Expect (GetMetric ("operator_customobject_status_condition_transition_seconds" , conditionLabels (ConditionTypeBar , metav1 .ConditionUnknown ))).To (BeNil ())
548
+
549
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (status .ConditionReady , metav1 .ConditionTrue ))).To (BeNil ())
550
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (status .ConditionReady , metav1 .ConditionFalse ))).To (BeNil ())
551
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (status .ConditionReady , metav1 .ConditionUnknown ))).To (BeNil ())
552
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (ConditionTypeFoo , metav1 .ConditionTrue )).GetCounter ().GetValue ()).To (BeEquivalentTo (1 ))
553
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (ConditionTypeFoo , metav1 .ConditionFalse ))).To (BeNil ())
554
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (ConditionTypeFoo , metav1 .ConditionUnknown ))).To (BeNil ())
555
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (ConditionTypeBar , metav1 .ConditionTrue ))).To (BeNil ())
556
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (ConditionTypeBar , metav1 .ConditionFalse ))).To (BeNil ())
557
+ Expect (GetMetric ("operator_customobject_status_condition_transitions_total" , conditionLabels (ConditionTypeBar , metav1 .ConditionUnknown ))).To (BeNil ())
558
+ })
520
559
})
521
560
522
561
var _ = Describe ("Generic Controller" , func () {
523
562
var genericController * status.GenericObjectController [* TestGenericObject ]
524
563
BeforeEach (func () {
525
564
recorder = record .NewFakeRecorder (10 )
526
565
kubeClient = fake .NewClientBuilder ().WithScheme (scheme .Scheme ).Build ()
527
- ctx = log .IntoContext (context .Background (), ginkgo . GinkgoLogr )
566
+ ctx = log .IntoContext (context .Background (), GinkgoLogr )
528
567
genericController = status .NewGenericObjectController [* TestGenericObject ](kubeClient , recorder , status .EmitDeprecatedMetrics )
529
568
})
530
569
AfterEach (func () {
0 commit comments