public async Task Session_CreatesAndDeletesPod_Async() { const string name = "session-createsanddeletespod-async"; Debug.Assert(FormatName(nameof(this.Session_CreatesAndDeletesPod_Async)) == name, "Use naming conventions"); var configuration = new ChildOperatorConfiguration(name) { ParentLabelSelector = LabelSelector.Create <WebDriverSession>( s => s.Metadata.Labels[Annotations.ManagedBy] == name && s.Metadata.Labels[Annotations.AutomationName] == Annotations.AutomationNames.Fake), }; var podCreated = new TaskCompletionSource <V1Pod>(); var podRunning = new TaskCompletionSource <V1Pod>(); var podDeleted = new TaskCompletionSource <V1Pod>(); var kubernetes = this.host.Services.GetRequiredService <KubernetesClient>(); var podClient = kubernetes.GetClient <V1Pod>(); var sessionClient = kubernetes.GetClient <WebDriverSession>(); var logger = this.host.Services.GetRequiredService <ILoggerFactory>().CreateLogger(name); // Delete all objects which may have been previously created by this test. await Task.WhenAll( sessionClient.TryDeleteAsync($"{name}-empty", TimeSpan.FromMinutes(1), default), sessionClient.TryDeleteAsync($"{name}-fake", TimeSpan.FromMinutes(1), default), podClient.TryDeleteAsync($"{name}-empty", TimeSpan.FromMinutes(1), default), podClient.TryDeleteAsync($"{name}-fake", TimeSpan.FromMinutes(1), default)).ConfigureAwait(false); var podWatcher = podClient.WatchAsync( fieldSelector: null, labelSelector: $"{Annotations.ManagedBy}={name}", resourceVersion: null, resourceVersionMatch: null, (eventType, pod) => { logger.LogInformation($"Got an added {eventType} event for pod {pod}", eventType, pod.Metadata.Name); switch (eventType) { case k8s.WatchEventType.Added: podCreated.TrySetResult(pod); break; case k8s.WatchEventType.Modified when pod.Status.Phase == "Running" && pod.Status.ContainerStatuses.All(c => c.Ready): podRunning.TrySetResult(pod); break; case k8s.WatchEventType.Deleted: podDeleted.TrySetResult(pod); return(Task.FromResult(WatchResult.Stop)); } return(Task.FromResult(WatchResult.Continue)); },
public void Builder3_Constructor_ValidatesArguments() { var serviceProvider = Mock.Of <IServiceProvider>(); var configuration = new ChildOperatorConfiguration(string.Empty); Func <WebDriverSession, bool> parentFilter = (session) => true; Action <WebDriverSession, V1Pod> childFactory = (session, pod) => { }; Assert.Throws <ArgumentNullException>("services", () => new ChildOperatorBuilder <WebDriverSession, V1Pod>(null, configuration, parentFilter, childFactory)); Assert.Throws <ArgumentNullException>("configuration", () => new ChildOperatorBuilder <WebDriverSession, V1Pod>(serviceProvider, null, parentFilter, childFactory)); Assert.Throws <ArgumentNullException>("parentFilter", () => new ChildOperatorBuilder <WebDriverSession, V1Pod>(serviceProvider, configuration, null, childFactory)); Assert.Throws <ArgumentNullException>("childFactory", () => new ChildOperatorBuilder <WebDriverSession, V1Pod>(serviceProvider, configuration, parentFilter, null)); }
public void Constructor_AddsDefaultLabels() { var configuration = new ChildOperatorConfiguration("name"); Assert.Collection( configuration.ChildLabels, l => { Assert.Equal(Annotations.ManagedBy, l.Key); Assert.Equal("name", l.Value); }); }
/// <summary> /// Initializes a new instance of the <see cref="ChildOperatorTests"/> class. /// </summary> public ChildOperatorTests() { this.configuration = new ChildOperatorConfiguration(nameof(ChildOperatorTests)) { ParentLabelSelector = "parent-label-selector", }; this.services = new ServiceCollection() .AddLogging(l => l.AddTest()) .AddSingleton(this.kubernetes) .AddScoped((p) => Mock.Of <NamespacedKubernetesClient <V1Job> >()) .BuildServiceProvider(); }