示例#1
0
        public async Task CreateSession_HandlesError_Async()
        {
            var sessionClient = new Mock <NamespacedKubernetesClient <WebDriverSession> >(MockBehavior.Strict);
            var kubernetes    = new Mock <KubernetesClient>(MockBehavior.Strict);

            kubernetes.Setup(c => c.GetClient <WebDriverSession>()).Returns(sessionClient.Object);

            var webDriver = new KubernetesWebDriver(kubernetes.Object, NullLogger <KubernetesWebDriver> .Instance);

            var request = new NewSessionRequest()
            {
                Capabilities = new CapabilitiesRequest()
                {
                    AlwaysMatch = new Dictionary <string, object>()
                    {
                        { "platformName", "fake" },
                    },
                },
            };

            var session = new WebDriverSession()
            {
                Metadata = new V1ObjectMeta()
                {
                    Name = "fake-abcd",
                },
            };

            sessionClient
            .Setup(s => s.CreateAsync(It.IsAny <WebDriverSession>(), default))
            .ReturnsAsync(session);

            var watchHook = sessionClient.WithWatcher(session);

            var task        = webDriver.CreateSessionAsync(request, default);
            var watchClient = await watchHook.ClientRegistered.Task.ConfigureAwait(false);

            // Simulate the session going through the various stages of setup
            session.Status = new WebDriverSessionStatus()
            {
                Error      = "error",
                Data       = "data",
                Message    = "message",
                StackTrace = "stacktrace",
            };
            Assert.Equal(WatchResult.Stop, await watchClient(k8s.WatchEventType.Modified, session).ConfigureAwait(false));

            sessionClient.Setup(s => s.TryReadAsync(session.Metadata.Name, default)).ReturnsAsync(session);
            sessionClient.Setup(s => s.DeleteAsync(session, It.IsAny <TimeSpan>(), default)).Returns(Task.CompletedTask);
            watchHook.TaskCompletionSource.SetResult(WatchExitReason.ClientDisconnected);

            var result = await task.ConfigureAwait(false);

            var response = Assert.IsType <WebDriverError>(result.Value);

            Assert.Equal(WebDriverErrorCode.SessionNotCreated, response.ErrorCode);
            Assert.Equal("data", response.Data);
            Assert.Equal("message", response.Message);
            Assert.Equal("stacktrace", response.StackTrace);
        }
示例#2
0
        public async Task CreateSessionAsync_InvalidCapabilities_Async(NewSessionRequest request, string expectedMessage)
        {
            var kubernetes = new Mock <KubernetesClient>();
            var webDriver  = new KubernetesWebDriver(kubernetes.Object, NullLogger <KubernetesWebDriver> .Instance);

            var result = await webDriver.CreateSessionAsync(request, default).ConfigureAwait(false);

            var error = Assert.IsType <WebDriverError>(result.Value);

            Assert.Equal(WebDriverErrorCode.SessionNotCreated, error.ErrorCode);
            Assert.Equal(expectedMessage, error.Message);
        }
示例#3
0
        public async Task CreateSession_TimesOut_Async()
        {
            var sessionClient = new Mock <NamespacedKubernetesClient <WebDriverSession> >(MockBehavior.Strict);
            var kubernetes    = new Mock <KubernetesClient>(MockBehavior.Strict);

            kubernetes.Setup(c => c.GetClient <WebDriverSession>()).Returns(sessionClient.Object);

            var webDriver = new KubernetesWebDriver(kubernetes.Object, NullLogger <KubernetesWebDriver> .Instance);

            webDriver.CreationTimeout = TimeSpan.FromMilliseconds(10);

            var request = new NewSessionRequest()
            {
                Capabilities = new CapabilitiesRequest()
                {
                    AlwaysMatch = new Dictionary <string, object>()
                    {
                        { "platformName", "fake" },
                    },
                },
            };

            var session = new WebDriverSession()
            {
                Metadata = new V1ObjectMeta()
                {
                    Name = "fake-abcd",
                },
            };

            sessionClient
            .Setup(s => s.CreateAsync(It.IsAny <WebDriverSession>(), default))
            .ReturnsAsync(session);

            var watchHook = sessionClient.WithWatcher(session);

            var task        = webDriver.CreateSessionAsync(request, default);
            var watchClient = await watchHook.ClientRegistered.Task.ConfigureAwait(false);

            var result = await task.ConfigureAwait(false);

            var response = Assert.IsType <WebDriverError>(result.Value);

            Assert.Equal(WebDriverErrorCode.SessionNotCreated, response.ErrorCode);
            Assert.Equal("The session creation timed out.", response.Message);
        }
示例#4
0
        public async Task CreateSession_CreatesSession_Async(string platformName, string automationName, string providerName)
        {
            var sessionClient = new Mock <NamespacedKubernetesClient <WebDriverSession> >(MockBehavior.Strict);
            var kubernetes    = new Mock <KubernetesClient>(MockBehavior.Strict);

            kubernetes.Setup(c => c.GetClient <WebDriverSession>()).Returns(sessionClient.Object);

            var webDriver = new KubernetesWebDriver(kubernetes.Object, NullLogger <KubernetesWebDriver> .Instance);

            var request = new NewSessionRequest()
            {
                Capabilities = new CapabilitiesRequest()
                {
                    AlwaysMatch = new Dictionary <string, object>()
                    {
                        { "platformName", platformName },
                        { "appium:automationName", automationName },
                    },
                },
            };

            var session = new WebDriverSession()
            {
                Metadata = new V1ObjectMeta()
                {
                    Name = "fake-abcd",
                },
            };

            sessionClient
            .Setup(s => s.CreateAsync(It.IsAny <WebDriverSession>(), default))
            .Returns <WebDriverSession, CancellationToken>((request, ct) =>
            {
                Assert.Equal($"{providerName}-", request.Metadata.GenerateName);
                Assert.Collection(
                    request.Metadata.Labels,
                    l =>
                {
                    Assert.Equal(Annotations.AutomationName, l.Key);
                    Assert.Equal(providerName, l.Value);
                });

                if (automationName != null)
                {
                    Assert.Equal($"{{\"alwaysMatch\":{{\"platformName\":\"{platformName}\",\"appium:automationName\":\"{automationName}\"}}}}", request.Spec.Capabilities);
                }
                else
                {
                    Assert.Equal($"{{\"alwaysMatch\":{{\"platformName\":\"{platformName}\",\"appium:automationName\":null}}}}", request.Spec.Capabilities);
                }

                return(Task.FromResult(session));
            });

            var watchHook = sessionClient.WithWatcher(session);

            var task        = webDriver.CreateSessionAsync(request, default);
            var watchClient = await watchHook.ClientRegistered.Task.ConfigureAwait(false);

            // Simulate the session going through the various stages of setup
            Assert.Equal(WatchResult.Continue, await watchClient(k8s.WatchEventType.Added, session).ConfigureAwait(false));
            Assert.Equal(WatchResult.Continue, await watchClient(k8s.WatchEventType.Modified, session).ConfigureAwait(false));
            Assert.Equal(WatchResult.Continue, await watchClient(k8s.WatchEventType.Bookmark, session).ConfigureAwait(false));

            session.Status = new WebDriverSessionStatus()
            {
                IngressReady = false,
                ServiceReady = false,
                SessionReady = false,
            };

            Assert.Equal(WatchResult.Continue, await watchClient(k8s.WatchEventType.Modified, session).ConfigureAwait(false));

            session.Status.IngressReady = true;
            Assert.Equal(WatchResult.Continue, await watchClient(k8s.WatchEventType.Modified, session).ConfigureAwait(false));

            session.Status.SessionReady = true;
            session.Status.Capabilities = "{}";
            Assert.Equal(WatchResult.Continue, await watchClient(k8s.WatchEventType.Modified, session).ConfigureAwait(false));

            session.Status.ServiceReady = true;
            Assert.Equal(WatchResult.Stop, await watchClient(k8s.WatchEventType.Modified, session).ConfigureAwait(false));

            sessionClient.Setup(s => s.TryReadAsync(session.Metadata.Name, default)).ReturnsAsync(session);
            watchHook.TaskCompletionSource.SetResult(WatchExitReason.ClientDisconnected);

            var result = await task.ConfigureAwait(false);

            var response = Assert.IsType <NewSessionResponse>(result.Value);

            Assert.Equal("fake-abcd", response.SessionId);
            Assert.Empty(response.Capabilities);
        }