示例#1
0
        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));
            },
示例#2
0
        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));
        }
示例#3
0
        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);
            });
        }
示例#4
0
        /// <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();
        }