Skip to content

Commit 2a622bb

Browse files
committed
testcases: ensure handlers work with watcher
1 parent 5e5fcba commit 2a622bb

File tree

1 file changed

+59
-1
lines changed

1 file changed

+59
-1
lines changed

tests/WatchTests.cs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System.IO;
44
using System.Linq;
55
using System.Net;
6+
using System.Net.Http;
67
using System.Threading;
78
using System.Threading.Tasks;
89
using 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

Comments
 (0)