Exemplo n.º 1
0
 public void setNewSessionRequest(NewSessionRequest nsr)
 {
     if (nsr.SessionTemplate != null)
     {
         // use the session controller to find the session as the objects held
         // held in the session control may not be the same
         sessionComboBox.SelectedItem = sc.findSession(nsr.SessionTemplate);
         if (nsr.SessionFolder == null)
         {
             sessionFolderComboBox.SelectedItem = nsr.SessionTemplate.FolderName;
         }
         else
         {
             sessionFolderComboBox.SelectedItem = nsr.SessionFolder;
         }
     }
     else
     {
         sessionComboBox.SelectedItem = sc.findDefaultSession(false);
         if (nsr.SessionFolder != null && !(nsr.SessionFolder.Equals("")))
         {
             sessionFolderComboBox.SelectedItem = nsr.SessionFolder;
         }
     }
     launchSessionCheckBox.Checked = nsr.LaunchSession;
     copyUsernameCheckBox.Checked  = nsr.CopyDefaultUsername;
 }
        protected void newSession(List <Session> selectedSessions)
        {
            if (selectedSessions.Count > 0)
            {
                // Pick the first selected session to be the template
                Session           template = selectedSessions[0];
                NewSessionRequest nsr      = new NewSessionRequest(template, template.FolderName, "", "", true, false);
                nsf.setNewSessionRequest(nsr);
            }

            if (nsf.ShowDialog() == DialogResult.OK)
            {
                NewSessionRequest nsr = nsf.getNewSessionRequest();
                bool result           = sc.createNewSession(nsr, this);
                if (result == false)
                {
                    MessageBox.Show("Failed to create new session: " + nsr.SessionName
                                    , "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    if (nsr.LaunchSession == true)
                    {
                        String errMsg = sc.launchSession(nsr.SessionName);
                        if (errMsg.Equals("") == false)
                        {
                            MessageBox.Show("PuTTY Failed to start.\nCheck the PuTTY location in System Tray -> Options.\n" +
                                            errMsg
                                            , "Alert", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        public override Task <NewSessionReply> OpenSession(NewSessionRequest request, ServerCallContext context)
        {
            Console.WriteLine($"SPRO OpenSession for {request.Username} / {request.Type}");
            string idSession = "";

            if (request.Type != null && (_sessionsType == null || _sessionsType == request.Type))
            {
                _sessionsType = request.Type;
                var userTimer = new Timer(Config.TIMEOUT);
                lock (_lock)
                {
                    if (_usersInSession.Count < Config.MAX_USER_COUNT &&
                        _usersInSession.TryAdd(request.Username, userTimer))
                    {
                        idSession = Guid.NewGuid().ToString();

                        userTimer.Start();
                        userTimer.Elapsed += (object sender, ElapsedEventArgs e) =>
                        {
                            //RemoveUser(request.Username);
                        };

                        _initTimeout.Stop();
                        Console.WriteLine($"SPRO OpenSession for {request.Username} / {request.Type} GRANTED {idSession}");
                    }
                }
            }
            return(Task.FromResult(new NewSessionReply {
                Idsession = idSession
            }));
        }
Exemplo n.º 4
0
        public object Post(NewSessionRequest request)
        {
            if (request.RequiredCapabilities != null)
            {
                // TODO: verify that required capabilities can be supported, otherwise return session_not_created
            }

            if (request.DesiredCapabilities != null)
            {
                // TODO: verify that app exists, otherwise return session_not_created

                // TODO: support more desired capabilities, rather than just ignoring them
                var capabilities = new Capabilities(request.DesiredCapabilities);
                var session      = _sessionRepository.Create(capabilities);

                return(new HttpResult
                {
                    StatusCode = HttpStatusCode.RedirectMethod,
                    Headers =
                    {
                        { HttpHeaders.Location, RequestContext.AbsoluteUri.WithTrailingSlash() + session.SessionId.ToString("N") }
                    }
                });
            }

            throw new MissingCommandParameterException();
        }
Exemplo n.º 5
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);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        public int syncSessions(BackgroundWorker worker, SyncSessionsRequestedEventArgs e)
        {
            int            modifiedCount = 0;
            List <Session> delList       = new List <Session>();

            // Disable session refreshes
            BeginUpdate();

            foreach (SessionAction sa in e.SessionActionList)
            {
                if (sa.Action == SessionAction.ACTION.ADD)
                {
                    NewSessionRequest nsr = new NewSessionRequest(e.SessionTemplate
                                                                  , sa.NewSession.FolderName
                                                                  , sa.NewSession.Hostname
                                                                  , sa.NewSession.SessionDisplayText
                                                                  , sa.NewSession.Protocol
                                                                  , sa.NewSession.Portnumber
                                                                  , true, false);
                    createNewSession(nsr, worker);
                }
                else if (sa.Action == SessionAction.ACTION.DELETE)
                {
                    delList.Add(sa.ExistingSession);
                }
                else if (sa.Action == SessionAction.ACTION.UPDATE)
                {
                    Session existingSession = findSession(sa.NewSession);
                    if (existingSession != null)
                    {
                        sessionProvider.updateHostname(sa.NewSession);
                        sessionProvider.updateFolder(sa.NewSession);
                        sessionProvider.updateProtocol(sa.NewSession);
                        sessionProvider.updatePortnumber(sa.NewSession);
                    }
                }
                else if (sa.Action == SessionAction.ACTION.RENAME)
                {
                    Session existingSession = findSession(sa.ExistingSession);
                    sessionProvider.renameSession(existingSession, sa.NewSession.SessionDisplayText);
                    existingSession.FolderName = sa.NewSession.FolderName;
                    sessionProvider.updateFolder(existingSession);
                }
                modifiedCount++;
                worker.ReportProgress(modifiedCount);
            }

            if (delList.Count > 0)
            {
                deleteSessions(delList, worker);
            }

            worker.ReportProgress(e.SessionActionList.Count);

            // Re-enable session refreshes
            EndUpdate();

            return(modifiedCount);
        }
Exemplo n.º 7
0
        private void NoveSoubory(object s, NoveSouboryEventArgs e)
        {
            NewSessionRequest newSessionRequest = new NewSessionRequest();

            newSessionRequest.Soubory     = e.Soubory;
            newSessionRequest.RowTemplate = rowTemplates.FirstOrDefault(t => t.Nazev == e.Vzor) ?? throw new IndexOutOfRangeException($"V listu všech vzorů nebyl nalezen tempalte s nazvem{e.Vzor}");
            commandHandler.Handle(newSessionRequest);
        }
Exemplo n.º 8
0
        public GlobalJsonResult <bool> NewSession([FromBody] NewSessionRequest request)
        {
            var client = request.Map();

            clientStore.Set(client);

            return(GlobalJsonResult <bool> .Success(System.Net.HttpStatusCode.OK, true));
        }
        /// <summary>
        /// Create a new session based on an existing session
        /// Delegates to the sessionProvider, and then
        /// fires a session refresh event
        /// </summary>
        /// <param name="nsr">The new session request</param>
        /// <param name="sender"></param>
        /// <returns></returns>
        public bool createNewSession(NewSessionRequest nsr, Object sender)
        {
            bool result = sessionProvider.createNewSession(nsr);

            // Don't refresh the sender - this should have done it's own update
            invalidateSessionList(sender, false);

            return(result);
        }
Exemplo n.º 10
0
        public NewSessionRequest getNewSessionRequest()
        {
            NewSessionRequest nsr = new NewSessionRequest((Session)sessionComboBox.SelectedItem
                                                          , sessionFolderComboBox.Text
                                                          , hostnameTextBox.Text
                                                          , sessionnameTextBox.Text
                                                          , copyUsernameCheckBox.Checked
                                                          , launchSessionCheckBox.Checked);

            return(nsr);
        }
Exemplo n.º 11
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);
        }
Exemplo n.º 12
0
        public async Task NewSessionAsync_InvokesDriver_Async()
        {
            var request  = new NewSessionRequest();
            var response = new WebDriverResponse();

            var webDriver = new Mock <KubernetesWebDriver>(MockBehavior.Strict);

            webDriver
            .Setup(w => w.CreateSessionAsync(request, default))
            .ReturnsAsync(response);

            var controller = new WebDriverController(webDriver.Object, NullLogger <WebDriverController> .Instance);
            var result     = await controller.NewSessionAsync(request, default).ConfigureAwait(false);

            Assert.Same(response, result.Value);
        }
Exemplo n.º 13
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);
        }
Exemplo n.º 14
0
        /// <summary>
        /// Create a new session based on an old session
        /// </summary>
        /// <param name="nsr">The new session request</param>
        /// <returns></returns>
        public bool createNewSession(NewSessionRequest nsr)
        {
            // Check the template session is still there
            RegistryKey template = Registry.CurrentUser.OpenSubKey(PUTTY_SESSIONS_REG_KEY + "\\" + nsr.SessionTemplate.SessionKey, false);

            if (template == null)
            {
                return(false);
            }

            // Check no-one has created a new session with the same name
            RegistryKey newSession = Registry.CurrentUser.OpenSubKey(PUTTY_SESSIONS_REG_KEY + "\\" + nsr.SessionName, false);

            if (newSession != null)
            {
                newSession.Close();
                return(false);
            }

            // Create the new session
            newSession = Registry.CurrentUser.CreateSubKey(PUTTY_SESSIONS_REG_KEY + "\\" + Session.convertDisplayToSessionKey(nsr.SessionName));

            // Copy the values
            bool hostnameSet   = false;
            bool foldernameSet = false;
            bool protocolSet   = false;
            bool portnumberSet = false;

            object value;

            foreach (string valueName in template.GetValueNames())
            {
                if (valueName.Equals(PUTTY_HOSTNAME_ATTRIB))
                {
                    hostnameSet = true;
                    value       = nsr.Hostname;
                }
                else if (valueName.Equals(PUTTY_PSM_FOLDER_ATTRIB))
                {
                    foldernameSet = true;
                    value         = nsr.SessionFolder;
                }
                else if (nsr.CopyDefaultUsername == false &&
                         valueName.Equals(PUTTY_USERNAME_ATTRIB))
                {
                    value = "";
                }
                else if (valueName.Equals(PUTTY_PROTOCOL_ATTRIB) &&
                         !(nsr.Protocol.Equals("")))
                {
                    protocolSet = true;
                    value       = nsr.Protocol;
                }
                else if (valueName.Equals(PUTTY_PORTNUMBER_ATTRIB) &&
                         nsr.Portnumber > 0)
                {
                    portnumberSet = true;
                    value         = nsr.Portnumber;
                }
                else
                {
                    value = template.GetValue(valueName);
                }

                newSession.SetValue(valueName, value, template.GetValueKind(valueName));
            }

            // Set the hostname if it hasn't already been set
            if (hostnameSet == false)
            {
                newSession.SetValue(PUTTY_HOSTNAME_ATTRIB, nsr.Hostname, RegistryValueKind.String);
            }

            // Set the foldername if it hasn't already been set
            if (foldernameSet == false)
            {
                newSession.SetValue(PUTTY_PSM_FOLDER_ATTRIB, nsr.SessionFolder, RegistryValueKind.String);
            }

            // Set the protocol if it hasn't already been set
            if (protocolSet == false)
            {
                newSession.SetValue(PUTTY_PROTOCOL_ATTRIB, nsr.Protocol, RegistryValueKind.String);
            }

            // Set the portnumber if it hasn't already been set
            if (portnumberSet == false)
            {
                newSession.SetValue(PUTTY_PORTNUMBER_ATTRIB, nsr.Portnumber, RegistryValueKind.DWord);
            }

            template.Close();
            newSession.Close();

            return(true);
        }
Exemplo n.º 15
0
        public async Task <WebDriverResult> NewSessionAsync(NewSessionRequest request, CancellationToken cancellationToken)
        {
            var response = await this.webDriver.CreateSessionAsync(request, cancellationToken).ConfigureAwait(false);

            return(new WebDriverResult(response));
        }
Exemplo n.º 16
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);
        }