@@ -1076,6 +1076,50 @@ var _ = Describe("manger.Manager", func() {
1076
1076
<- runnableStopped
1077
1077
})
1078
1078
1079
+ It ("should wait forever for runnables if gracefulShutdownTimeout is <0 (-1)" , func () {
1080
+ m , err := New (cfg , options )
1081
+ Expect (err ).NotTo (HaveOccurred ())
1082
+ for _ , cb := range callbacks {
1083
+ cb (m )
1084
+ }
1085
+ m .(* controllerManager ).gracefulShutdownTimeout = time .Duration (- 1 )
1086
+
1087
+ Expect (m .Add (RunnableFunc (func (ctx context.Context ) error {
1088
+ <- ctx .Done ()
1089
+ time .Sleep (100 * time .Millisecond )
1090
+ return nil
1091
+ }))).ToNot (HaveOccurred ())
1092
+ Expect (m .Add (RunnableFunc (func (ctx context.Context ) error {
1093
+ <- ctx .Done ()
1094
+ time .Sleep (200 * time .Millisecond )
1095
+ return nil
1096
+ }))).ToNot (HaveOccurred ())
1097
+ Expect (m .Add (RunnableFunc (func (ctx context.Context ) error {
1098
+ <- ctx .Done ()
1099
+ time .Sleep (500 * time .Millisecond )
1100
+ return nil
1101
+ }))).ToNot (HaveOccurred ())
1102
+ Expect (m .Add (RunnableFunc (func (ctx context.Context ) error {
1103
+ <- ctx .Done ()
1104
+ time .Sleep (1500 * time .Millisecond )
1105
+ return nil
1106
+ }))).ToNot (HaveOccurred ())
1107
+
1108
+ ctx , cancel := context .WithCancel (context .Background ())
1109
+ managerStopDone := make (chan struct {})
1110
+ go func () {
1111
+ defer GinkgoRecover ()
1112
+ Expect (m .Start (ctx )).NotTo (HaveOccurred ())
1113
+ close (managerStopDone )
1114
+ }()
1115
+ <- m .Elected ()
1116
+ cancel ()
1117
+
1118
+ beforeDone := time .Now ()
1119
+ <- managerStopDone
1120
+ Expect (time .Since (beforeDone )).To (BeNumerically (">=" , 1500 * time .Millisecond ))
1121
+ })
1122
+
1079
1123
}
1080
1124
1081
1125
Context ("with defaults" , func () {
0 commit comments