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); }
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); }
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); }
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); }