@@ -91,19 +91,10 @@ public void SuriveBadLine()
91
91
httpContext . Response . ContentLength = null ;
92
92
93
93
await WriteStreamLine ( httpContext , MockKubeApiServer . MockPodResponse ) ;
94
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
95
-
96
94
await WriteStreamLine ( httpContext , MockBadStreamLine ) ;
97
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
98
-
99
95
await WriteStreamLine ( httpContext , MockAddedEventStreamLine ) ;
100
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
101
-
102
96
await WriteStreamLine ( httpContext , MockBadStreamLine ) ;
103
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
104
-
105
97
await WriteStreamLine ( httpContext , MockModifiedStreamLine ) ;
106
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
107
98
108
99
// make server alive, cannot set to int.max as of it would block response
109
100
await Task . Delay ( TimeSpan . FromDays ( 1 ) ) ;
@@ -117,7 +108,6 @@ public void SuriveBadLine()
117
108
118
109
var listTask = client . ListNamespacedPodWithHttpMessagesAsync ( "default" , watch : true ) . Result ;
119
110
120
-
121
111
var events = new HashSet < WatchEventType > ( ) ;
122
112
var errors = 0 ;
123
113
@@ -159,16 +149,14 @@ public void SuriveBadLine()
159
149
[ Fact ]
160
150
public void DisposeWatch ( )
161
151
{
152
+ using ( var eventsReceived = new CountdownEvent ( 1 ) )
162
153
using ( var server = new MockKubeApiServer ( TestOutput , async httpContext =>
163
154
{
164
155
await WriteStreamLine ( httpContext , MockKubeApiServer . MockPodResponse ) ;
165
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
166
156
167
157
for ( ; ; )
168
158
{
169
- await WriteStreamLine ( httpContext , MockAddedEventStreamLine ) ;
170
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
171
-
159
+ await WriteStreamLine ( httpContext , MockAddedEventStreamLine ) ;
172
160
}
173
161
} ) )
174
162
{
@@ -183,11 +171,17 @@ public void DisposeWatch()
183
171
var events = new HashSet < WatchEventType > ( ) ;
184
172
185
173
var watcher = listTask . Watch < V1Pod > (
186
- ( type , item ) => { events . Add ( type ) ; }
174
+ ( type , item ) => {
175
+ events . Add ( type ) ;
176
+ eventsReceived . Signal ( ) ;
177
+ }
187
178
) ;
188
179
189
180
// wait at least an event
190
- Thread . Sleep ( TimeSpan . FromMilliseconds ( 1000 ) ) ;
181
+ Assert . True (
182
+ eventsReceived . Wait ( TimeSpan . FromSeconds ( 10 ) ) ,
183
+ "Timed out waiting for events."
184
+ ) ;
191
185
192
186
Assert . NotEmpty ( events ) ;
193
187
Assert . True ( watcher . Watching ) ;
@@ -211,19 +205,10 @@ public void WatchAllEvents()
211
205
using ( var server = new MockKubeApiServer ( TestOutput , async httpContext =>
212
206
{
213
207
await WriteStreamLine ( httpContext , MockKubeApiServer . MockPodResponse ) ;
214
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
215
-
216
208
await WriteStreamLine ( httpContext , MockAddedEventStreamLine ) ;
217
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
218
-
219
209
await WriteStreamLine ( httpContext , MockDeletedStreamLine ) ;
220
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
221
-
222
210
await WriteStreamLine ( httpContext , MockModifiedStreamLine ) ;
223
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
224
-
225
211
await WriteStreamLine ( httpContext , MockErrorStreamLine ) ;
226
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
227
212
228
213
// make server alive, cannot set to int.max as of it would block response
229
214
await Task . Delay ( TimeSpan . FromDays ( 1 ) ) ;
@@ -279,16 +264,13 @@ public void WatchAllEvents()
279
264
[ Fact ]
280
265
public void WatchServerDisconnect ( )
281
266
{
282
- Watcher < V1Pod > watcher ;
283
267
Exception exceptionCatched = null ;
284
-
268
+ using ( var exceptionReceived = new AutoResetEvent ( false ) )
269
+ using ( var waitForException = new AutoResetEvent ( false ) )
285
270
using ( var server = new MockKubeApiServer ( TestOutput , async httpContext =>
286
271
{
287
272
await WriteStreamLine ( httpContext , MockKubeApiServer . MockPodResponse ) ;
288
-
289
- // make sure watch success
290
- await Task . Delay ( TimeSpan . FromMilliseconds ( 200 ) ) ;
291
-
273
+ waitForException . WaitOne ( ) ;
292
274
throw new IOException ( "server down" ) ;
293
275
} ) )
294
276
{
@@ -299,16 +281,24 @@ public void WatchServerDisconnect()
299
281
300
282
var listTask = client . ListNamespacedPodWithHttpMessagesAsync ( "default" , watch : true ) . Result ;
301
283
284
+ waitForException . Set ( ) ;
285
+ Watcher < V1Pod > watcher ;
302
286
watcher = listTask . Watch < V1Pod > (
303
287
( type , item ) => { } ,
304
- e => { exceptionCatched = e ; } ) ;
305
- }
288
+ e => {
289
+ exceptionCatched = e ;
290
+ exceptionReceived . Set ( ) ;
291
+ } ) ;
306
292
307
- // wait server down
308
- Thread . Sleep ( TimeSpan . FromMilliseconds ( 1000 ) ) ;
293
+ // wait server down
294
+ Assert . True (
295
+ exceptionReceived . WaitOne ( TimeSpan . FromSeconds ( 10 ) ) ,
296
+ "Timed out waiting for exception"
297
+ ) ;
309
298
310
- Assert . False ( watcher . Watching ) ;
311
- Assert . IsType < IOException > ( exceptionCatched ) ;
299
+ Assert . False ( watcher . Watching ) ;
300
+ Assert . IsType < IOException > ( exceptionCatched ) ;
301
+ }
312
302
}
313
303
314
304
private class DummyHandler : DelegatingHandler
@@ -326,13 +316,11 @@ protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage reques
326
316
[ Fact ]
327
317
public void TestWatchWithHandlers ( )
328
318
{
319
+ using ( CountdownEvent eventsReceived = new CountdownEvent ( 1 ) )
329
320
using ( var server = new MockKubeApiServer ( TestOutput , async httpContext =>
330
321
{
331
322
await WriteStreamLine ( httpContext , MockKubeApiServer . MockPodResponse ) ;
332
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
333
-
334
323
await WriteStreamLine ( httpContext , MockAddedEventStreamLine ) ;
335
- await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
336
324
337
325
// make server alive, cannot set to int.max as of it would block response
338
326
await Task . Delay ( TimeSpan . FromDays ( 1 ) ) ;
@@ -355,11 +343,17 @@ public void TestWatchWithHandlers()
355
343
var events = new HashSet < WatchEventType > ( ) ;
356
344
357
345
var watcher = listTask . Watch < V1Pod > (
358
- ( type , item ) => { events . Add ( type ) ; }
346
+ ( type , item ) => {
347
+ events . Add ( type ) ;
348
+ eventsReceived . Signal ( ) ;
349
+ }
359
350
) ;
360
351
361
352
// wait server yields all events
362
- Thread . Sleep ( TimeSpan . FromMilliseconds ( 500 ) ) ;
353
+ Assert . True (
354
+ eventsReceived . Wait ( TimeSpan . FromMilliseconds ( 10000 ) ) ,
355
+ "Timed out waiting for all events / errors to be received."
356
+ ) ;
363
357
364
358
Assert . Contains ( WatchEventType . Added , events ) ;
365
359
0 commit comments