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