33using System . IO ;
44using System . Linq ;
55using System . Net ;
6+ using System . Net . Http ;
67using System . Threading ;
78using System . Threading . Tasks ;
89using k8s . Exceptions ;
@@ -270,5 +271,62 @@ public void TestWatchServerDisconnect()
270271 Assert . False ( watcher . Watching ) ;
271272 Assert . IsType < IOException > ( exceptionCatched ) ;
272273 }
274+
275+ private class DummyHandler : DelegatingHandler
276+ {
277+ internal bool Called { get ; private set ; }
278+
279+ protected override Task < HttpResponseMessage > SendAsync ( HttpRequestMessage request ,
280+ CancellationToken cancellationToken )
281+ {
282+ Called = true ;
283+ return base . SendAsync ( request , cancellationToken ) ;
284+ }
285+ }
286+
287+ [ Fact ]
288+ public void TestWatchWithHandlers ( )
289+ {
290+ using ( var server = new MockKubeApiServer ( async httpContext =>
291+ {
292+ await WriteStreamLine ( httpContext , MockKubeApiServer . MockPodResponse ) ;
293+ await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
294+
295+ await WriteStreamLine ( httpContext , MockAddedEventStreamLine ) ;
296+ await Task . Delay ( TimeSpan . FromMilliseconds ( 100 ) ) ;
297+
298+ // make server alive, cannot set to int.max as of it would block response
299+ await Task . Delay ( TimeSpan . FromDays ( 1 ) ) ;
300+ return false ;
301+ } ) )
302+ {
303+ var handler1 = new DummyHandler ( ) ;
304+ var handler2 = new DummyHandler ( ) ;
305+
306+ var client = new Kubernetes ( new KubernetesClientConfiguration
307+ {
308+ Host = server . Uri . ToString ( )
309+ } , handler1 , handler2 ) ;
310+
311+ Assert . False ( handler1 . Called ) ;
312+ Assert . False ( handler2 . Called ) ;
313+
314+ var listTask = client . ListNamespacedPodWithHttpMessagesAsync ( "default" , watch : true ) . Result ;
315+
316+ var events = new HashSet < WatchEventType > ( ) ;
317+
318+ var watcher = listTask . Watch < Corev1Pod > (
319+ ( type , item ) => { events . Add ( type ) ; }
320+ ) ;
321+
322+ // wait server yields all events
323+ Thread . Sleep ( TimeSpan . FromMilliseconds ( 500 ) ) ;
324+
325+ Assert . Contains ( WatchEventType . Added , events ) ;
326+
327+ Assert . True ( handler1 . Called ) ;
328+ Assert . True ( handler2 . Called ) ;
329+ }
330+ }
273331 }
274- }
332+ }
0 commit comments