@@ -849,7 +849,10 @@ func TestUpdateNodeStatusWithLease(t *testing.T) {
849
849
// Since this test retroactively overrides the stub container manager,
850
850
// we have to regenerate default status setters.
851
851
kubelet .setNodeStatusFuncs = kubelet .defaultNodeStatusFuncs ()
852
- kubelet .nodeStatusReportFrequency = time .Minute
852
+ // You will add up to 50% of nodeStatusReportFrequency of additional random latency for
853
+ // kubelet to determine if update node status is needed due to time passage. We need to
854
+ // take that into consideration to ensure this test pass all time.
855
+ kubelet .nodeStatusReportFrequency = 30 * time .Second
853
856
854
857
kubeClient := testKubelet .fakeKubeClient
855
858
existingNode := & v1.Node {ObjectMeta : metav1.ObjectMeta {Name : testKubeletHostname }}
@@ -3088,3 +3091,67 @@ func TestUpdateNodeAddresses(t *testing.T) {
3088
3091
})
3089
3092
}
3090
3093
}
3094
+
3095
+ func TestIsUpdateStatusPeriodExperid (t * testing.T ) {
3096
+ testcases := []struct {
3097
+ name string
3098
+ lastStatusReportTime time.Time
3099
+ delayAfterNodeStatusChange time.Duration
3100
+ expectExpired bool
3101
+ }{
3102
+ {
3103
+ name : "no status update before and no delay" ,
3104
+ lastStatusReportTime : time.Time {},
3105
+ delayAfterNodeStatusChange : 0 ,
3106
+ expectExpired : false ,
3107
+ },
3108
+ {
3109
+ name : "no status update before and existing delay" ,
3110
+ lastStatusReportTime : time.Time {},
3111
+ delayAfterNodeStatusChange : 30 * time .Second ,
3112
+ expectExpired : false ,
3113
+ },
3114
+ {
3115
+ name : "not expired and no delay" ,
3116
+ lastStatusReportTime : time .Now ().Add (- 4 * time .Minute ),
3117
+ delayAfterNodeStatusChange : 0 ,
3118
+ expectExpired : false ,
3119
+ },
3120
+ {
3121
+ name : "not expired" ,
3122
+ lastStatusReportTime : time .Now ().Add (- 5 * time .Minute ),
3123
+ delayAfterNodeStatusChange : time .Minute ,
3124
+ expectExpired : false ,
3125
+ },
3126
+ {
3127
+ name : "expired" ,
3128
+ lastStatusReportTime : time .Now ().Add (- 4 * time .Minute ),
3129
+ delayAfterNodeStatusChange : - 2 * time .Minute ,
3130
+ expectExpired : true ,
3131
+ },
3132
+ }
3133
+
3134
+ testKubelet := newTestKubelet (t , false /* controllerAttachDetachEnabled */ )
3135
+ defer testKubelet .Cleanup ()
3136
+ kubelet := testKubelet .kubelet
3137
+ kubelet .nodeStatusReportFrequency = 5 * time .Minute
3138
+
3139
+ for _ , tc := range testcases {
3140
+ kubelet .lastStatusReportTime = tc .lastStatusReportTime
3141
+ kubelet .delayAfterNodeStatusChange = tc .delayAfterNodeStatusChange
3142
+ expired := kubelet .isUpdateStatusPeriodExperid ()
3143
+ assert .Equal (t , tc .expectExpired , expired , tc .name )
3144
+ }
3145
+ }
3146
+
3147
+ func TestCalculateDelay (t * testing.T ) {
3148
+ testKubelet := newTestKubelet (t , false /* controllerAttachDetachEnabled */ )
3149
+ defer testKubelet .Cleanup ()
3150
+ kubelet := testKubelet .kubelet
3151
+ kubelet .nodeStatusReportFrequency = 5 * time .Minute
3152
+
3153
+ for i := 0 ; i < 100 ; i ++ {
3154
+ randomDelay := kubelet .calculateDelay ()
3155
+ assert .LessOrEqual (t , randomDelay .Abs (), kubelet .nodeStatusReportFrequency / 2 )
3156
+ }
3157
+ }
0 commit comments