Skip to content

Commit 42392ab

Browse files
committed
added e2e test case to demonstrate watching stop issue
1 parent a614d95 commit 42392ab

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

tests/KubernetesClient.Tests/WatchTests.cs

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -649,5 +649,104 @@ await client.ListNamespacedPodWithHttpMessagesAsync("default", watch: true,
649649
}).ConfigureAwait(false);
650650
}
651651
}
652+
653+
[Fact]
654+
public async Task ContinueWatchingThroughInactivity()
655+
{
656+
try
657+
{
658+
var eventsReceived = new AsyncCountdownEvent(1);
659+
660+
661+
var client = new Kubernetes(KubernetesClientConfiguration.BuildConfigFromConfigFile());
662+
663+
var listTask = await client.ListNamespacedPodWithHttpMessagesAsync("testns", watch: true).ConfigureAwait(false);
664+
665+
var events = new HashSet<V1Pod>();
666+
var errors = 0;
667+
var connclosed = 0;
668+
var eventcount = 0;
669+
var watcher = listTask.Watch<V1Pod, V1PodList>(
670+
(type, item) =>
671+
{
672+
testOutput.WriteLine($"Watcher received '{type}' event.");
673+
674+
events.Add(item);
675+
eventsReceived.Signal();
676+
},
677+
error =>
678+
{
679+
testOutput.WriteLine($"Watcher received '{error.GetType().FullName}' error.");
680+
681+
errors += 1;
682+
eventsReceived.Signal();
683+
},
684+
() =>
685+
{
686+
connclosed += 1;
687+
});
688+
689+
var pod1 = GetTestPod("test1");
690+
client.CreateNamespacedPod(pod1, "testns");
691+
692+
// wait server yields all events
693+
await Task.WhenAny(eventsReceived.WaitAsync(), Task.Delay(3000)).ConfigureAwait(false);
694+
695+
// wait for some time to pass before generating another event
696+
await Task.Delay(TimeSpan.FromMinutes(2)).ConfigureAwait(false);
697+
698+
eventcount = events.Count;
699+
700+
var pod2 = GetTestPod("test2");
701+
client.CreateNamespacedPod(pod2, "testns");
702+
703+
// Allow 30 seconds for the event to come through
704+
await Task.Delay(TimeSpan.FromSeconds(30)).ConfigureAwait(false);
705+
706+
// validate that one new event has been recieved after a pause
707+
Assert.True(
708+
events.Count == (eventcount + 1),
709+
$"No Events Were Received after Pause Event Count Is {eventcount}");
710+
711+
712+
Assert.Equal(1, errors);
713+
714+
Assert.True(watcher.Watching);
715+
// cleanup after
716+
client.DeleteNamespacedPod("test1", "default");
717+
718+
client.DeleteNamespacedPod("test2", "default");
719+
720+
}
721+
catch (Exception ex)
722+
{
723+
Debug.WriteLine(ex.Message);
724+
}
725+
}
726+
727+
private V1Pod GetTestPod(string name)
728+
{
729+
var containerList = new List<V1Container>();
730+
containerList.Add(new V1Container
731+
{
732+
Image = "busybox",
733+
Name = "container",
734+
});
735+
736+
return
737+
new V1Pod
738+
{
739+
ApiVersion = "v1",
740+
Kind = "Pod",
741+
Spec = new V1PodSpec
742+
{
743+
Containers = containerList,
744+
},
745+
Metadata = new V1ObjectMeta
746+
{
747+
Name = name,
748+
},
749+
};
750+
}
652751
}
653752
}

0 commit comments

Comments
 (0)