diff --git a/tests/E2E.Tests/E2E.Tests.csproj b/tests/E2E.Tests/E2E.Tests.csproj
index 324ae30f7..cd8ac7522 100644
--- a/tests/E2E.Tests/E2E.Tests.csproj
+++ b/tests/E2E.Tests/E2E.Tests.csproj
@@ -12,6 +12,8 @@
+
+
all
diff --git a/tests/E2E.Tests/MnikubeTests.cs b/tests/E2E.Tests/MnikubeTests.cs
index ee5988dfe..051ebd29b 100644
--- a/tests/E2E.Tests/MnikubeTests.cs
+++ b/tests/E2E.Tests/MnikubeTests.cs
@@ -1,10 +1,14 @@
using System;
using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Diagnostics;
using System.Linq;
using System.Threading;
+using System.Threading.Tasks;
using k8s.Models;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.Rest;
+using Nito.AsyncEx;
using Xunit;
namespace k8s.E2E
@@ -155,6 +159,73 @@ void Cleanup()
}
}
+ [MinikubeFact]
+ public async Task WatcherIntegrationTest()
+ {
+ var kubernetes = CreateClient();
+
+ var job = await kubernetes.CreateNamespacedJobAsync(
+ new V1Job()
+ {
+ ApiVersion = "batch/v1",
+ Kind = V1Job.KubeKind,
+ Metadata = new V1ObjectMeta() { Name = nameof(WatcherIntegrationTest).ToLowerInvariant() },
+ Spec = new V1JobSpec()
+ {
+ Template = new V1PodTemplateSpec()
+ {
+ Spec = new V1PodSpec()
+ {
+ Containers = new List()
+ {
+ new V1Container()
+ {
+ Image = "ubuntu",
+ Name = "runner",
+ Command = new List() { "/bin/bash", "-c", "--" },
+ Args = new List()
+ {
+ "trap : TERM INT; sleep infinity & wait",
+ },
+ },
+ },
+ RestartPolicy = "Never",
+ },
+ },
+ },
+ },
+ "default").ConfigureAwait(false);
+
+ var events = new Collection>();
+
+ var started = new AsyncManualResetEvent();
+ var connectionClosed = new AsyncManualResetEvent();
+
+ var watcher = await kubernetes.WatchNamespacedJobAsync(
+ job.Metadata.Name,
+ job.Metadata.NamespaceProperty,
+ resourceVersion: job.Metadata.ResourceVersion,
+ timeoutSeconds: 30,
+ onEvent:
+ (type, source) =>
+ {
+ Debug.WriteLine($"Watcher 1: {type}, {source}");
+ events.Add(new Tuple(type, source));
+ job = source;
+ started.Set();
+ },
+ onClosed: connectionClosed.Set).ConfigureAwait(false);
+
+ await started.WaitAsync().ConfigureAwait(false);
+
+ await Task.WhenAny(connectionClosed.WaitAsync(), Task.Delay(TimeSpan.FromMinutes(3))).ConfigureAwait(false);
+ Assert.True(connectionClosed.IsSet);
+
+ await kubernetes.DeleteNamespacedJobAsync(
+ job.Metadata.Name,
+ job.Metadata.NamespaceProperty,
+ new V1DeleteOptions() { PropagationPolicy = "Foreground" }).ConfigureAwait(false);
+ }
private static IKubernetes CreateClient()
diff --git a/tests/KubernetesClient.Tests/WatchTests.cs b/tests/KubernetesClient.Tests/WatchTests.cs
index bab525fa4..82c1fca3d 100644
--- a/tests/KubernetesClient.Tests/WatchTests.cs
+++ b/tests/KubernetesClient.Tests/WatchTests.cs
@@ -557,76 +557,7 @@ public async Task DirectWatchAllEvents()
}
}
- [Fact(Skip = "Integration Test")]
- public async Task WatcherIntegrationTest()
- {
- var kubernetesConfig =
- KubernetesClientConfiguration.BuildConfigFromConfigFile(
- @"C:\Users\frede\Source\Repos\cloud\minikube.config");
- var kubernetes = new Kubernetes(kubernetesConfig);
-
- var job = await kubernetes.CreateNamespacedJobAsync(
- new V1Job()
- {
- ApiVersion = "batch/v1",
- Kind = V1Job.KubeKind,
- Metadata = new V1ObjectMeta() { Name = nameof(WatcherIntegrationTest).ToLowerInvariant() },
- Spec = new V1JobSpec()
- {
- Template = new V1PodTemplateSpec()
- {
- Spec = new V1PodSpec()
- {
- Containers = new List()
- {
- new V1Container()
- {
- Image = "ubuntu/xenial",
- Name = "runner",
- Command = new List() { "/bin/bash", "-c", "--" },
- Args = new List()
- {
- "trap : TERM INT; sleep infinity & wait",
- },
- },
- },
- RestartPolicy = "Never",
- },
- },
- },
- },
- "default").ConfigureAwait(false);
- var events = new Collection>();
-
- var started = new AsyncManualResetEvent();
- var connectionClosed = new AsyncManualResetEvent();
-
- var watcher = await kubernetes.WatchNamespacedJobAsync(
- job.Metadata.Name,
- job.Metadata.NamespaceProperty,
- resourceVersion: job.Metadata.ResourceVersion,
- timeoutSeconds: 30,
- onEvent:
- (type, source) =>
- {
- Debug.WriteLine($"Watcher 1: {type}, {source}");
- events.Add(new Tuple(type, source));
- job = source;
- started.Set();
- },
- onClosed: connectionClosed.Set).ConfigureAwait(false);
-
- await started.WaitAsync().ConfigureAwait(false);
-
- await Task.WhenAny(connectionClosed.WaitAsync(), Task.Delay(TimeSpan.FromMinutes(3))).ConfigureAwait(false);
- Assert.True(connectionClosed.IsSet);
-
- await kubernetes.DeleteNamespacedJobAsync(
- job.Metadata.Name,
- job.Metadata.NamespaceProperty,
- new V1DeleteOptions()).ConfigureAwait(false);
- }
[Fact(Skip = "https://github.com/kubernetes-client/csharp/issues/165")]
public async Task DirectWatchEventsWithTimeout()