Пример #1
0
        public async Task WhenConnectingByUrlWithUsernameAndCredentialsExist_ThenConnectionIsMadeWithUsernameFromUrl()
        {
            var settings = InstanceConnectionSettings.CreateNew("project", "instance-1");

            settings.RdpUsername.Value = "existinguser";
            settings.RdpPassword.Value = SecureStringExtensions.FromClearText("password");

            var settingsService = this.serviceRegistry.AddMock <IConnectionSettingsService>();

            settingsService.Setup(s => s.GetConnectionSettings(
                                      It.IsAny <IProjectModelNode>()))
            .Returns(
                settings.ToPersistentSettingsCollection(s => Assert.Fail("should not be called")));

            var vmNode = new Mock <IProjectModelInstanceNode>();

            vmNode.SetupGet(n => n.Instance)
            .Returns(new InstanceLocator("project-1", "zone-1", "instance-1"));

            this.serviceRegistry.AddMock <ICredentialPrompt>()
            .Setup(p => p.ShowCredentialsPromptAsync(
                       It.IsAny <IWin32Window>(),
                       It.IsAny <InstanceLocator>(),
                       It.IsAny <ConnectionSettingsBase>(),
                       It.IsAny <bool>()));
            this.serviceRegistry.AddMock <IProjectModelService>()
            .Setup(p => p.GetNodeAsync(
                       It.IsAny <ResourceLocator>(),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(vmNode.Object);

            var remoteDesktopService = new Mock <IRemoteDesktopSessionBroker>();

            remoteDesktopService.Setup(s => s.Connect(
                                           It.IsAny <InstanceLocator>(),
                                           "localhost",
                                           It.IsAny <ushort>(),
                                           It.IsAny <InstanceConnectionSettings>())).Returns <IRemoteDesktopSession>(null);

            this.serviceRegistry.AddSingleton <IRemoteDesktopSessionBroker>(remoteDesktopService.Object);

            var service = new RdpConnectionService(this.serviceRegistry);
            await service.ActivateOrConnectInstanceAsync(
                IapRdpUrl.FromString("iap-rdp:///project/us-central-1/instance-1?username=john%20doe"));

            remoteDesktopService.Verify(s => s.Connect(
                                            It.IsAny <InstanceLocator>(),
                                            "localhost",
                                            It.IsAny <ushort>(),
                                            It.Is <InstanceConnectionSettings>(i => i.RdpUsername.StringValue == "john doe")), Times.Once);
            settingsService.Verify(s => s.GetConnectionSettings(
                                       It.IsAny <IProjectModelNode>()), Times.Once);
        }
Пример #2
0
        public async Task WhenConnectingByNodeAndPersistentCredentialsAllowed_ThenCredentialsAreUsed()
        {
            var settings = InstanceConnectionSettings.CreateNew("project", "instance-1");

            settings.RdpUsername.Value = "existinguser";
            settings.RdpPassword.Value = SecureStringExtensions.FromClearText("password");

            bool settingsSaved = false;

            var settingsService = this.serviceRegistry.AddMock <IConnectionSettingsService>();

            settingsService.Setup(s => s.GetConnectionSettings(
                                      It.IsAny <IProjectExplorerNode>()))
            .Returns(
                settings.ToPersistentSettingsCollection(s => settingsSaved = true));

            var vmNode = new Mock <IProjectExplorerInstanceNode>();

            vmNode.SetupGet(n => n.Instance)
            .Returns(new InstanceLocator("project-1", "zone-1", "instance-1"));

            this.serviceRegistry.AddMock <IProjectExplorer>()
            .Setup(p => p.TryFindNode(
                       It.IsAny <InstanceLocator>()))
            .Returns(vmNode.Object);

            var remoteDesktopService = new Mock <IRemoteDesktopSessionBroker>();

            remoteDesktopService.Setup(s => s.Connect(
                                           It.IsAny <InstanceLocator>(),
                                           "localhost",
                                           It.IsAny <ushort>(),
                                           It.IsAny <InstanceConnectionSettings>())).Returns <IRemoteDesktopSession>(null);

            this.serviceRegistry.AddSingleton <IRemoteDesktopSessionBroker>(remoteDesktopService.Object);

            var service = new RdpConnectionService(this.serviceRegistry);
            await service.ActivateOrConnectInstanceAsync(vmNode.Object, true);

            remoteDesktopService.Verify(s => s.Connect(
                                            It.IsAny <InstanceLocator>(),
                                            "localhost",
                                            It.IsAny <ushort>(),
                                            It.Is <InstanceConnectionSettings>(i =>
                                                                               i.RdpUsername.StringValue == "existinguser" &&
                                                                               i.RdpPassword.ClearTextValue == "password")), Times.Once);

            Assert.IsTrue(settingsSaved);
        }
Пример #3
0
        public async Task WhenConnectingByNodeAndPersistentCredentialsDisallowed_ThenPasswordIsClear()
        {
            var settings = InstanceConnectionSettings.CreateNew("project", "instance-1");

            settings.RdpUsername.Value = "existinguser";
            settings.RdpPassword.Value = SecureStringExtensions.FromClearText("password");

            var settingsService = this.serviceRegistry.AddMock <IConnectionSettingsService>();

            settingsService.Setup(s => s.GetConnectionSettings(
                                      It.IsAny <IProjectModelNode>()))
            .Returns(
                settings.ToPersistentSettingsCollection(s => Assert.Fail("should not be called")));

            var vmNode = CreateInstanceNodeMock();

            this.serviceRegistry.AddMock <IProjectModelService>()
            .Setup(p => p.GetNodeAsync(
                       It.IsAny <ResourceLocator>(),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync(vmNode.Object);

            var remoteDesktopService = new Mock <IRemoteDesktopSessionBroker>();

            remoteDesktopService.Setup(s => s.Connect(
                                           It.IsAny <InstanceLocator>(),
                                           "localhost",
                                           It.IsAny <ushort>(),
                                           It.IsAny <InstanceConnectionSettings>())).Returns <IRemoteDesktopSession>(null);

            this.serviceRegistry.AddSingleton <IRemoteDesktopSessionBroker>(remoteDesktopService.Object);

            var service = new RdpConnectionService(this.serviceRegistry);
            await service.ActivateOrConnectInstanceAsync(vmNode.Object, false);

            remoteDesktopService.Verify(s => s.Connect(
                                            It.IsAny <InstanceLocator>(),
                                            "localhost",
                                            It.IsAny <ushort>(),
                                            It.Is <InstanceConnectionSettings>(i =>
                                                                               i.RdpUsername.StringValue == "existinguser" &&
                                                                               i.RdpPassword.ClearTextValue == "")), Times.Once);
        }
Пример #4
0
        public async Task WhenConnectingByUrlWithUsernameAndNoCredentialsExist_ThenConnectionIsMadeWithThisUsername()
        {
            var settingsService = this.serviceRegistry.AddMock <IConnectionSettingsService>();

            this.serviceRegistry.AddMock <ICredentialPrompt>()
            .Setup(p => p.ShowCredentialsPromptAsync(
                       It.IsAny <IWin32Window>(),
                       It.IsAny <InstanceLocator>(),
                       It.IsAny <ConnectionSettingsBase>(),
                       It.IsAny <bool>())); // Nop -> Connect without configuring credentials.
            this.serviceRegistry.AddMock <IProjectModelService>()
            .Setup(p => p.GetNodeAsync(
                       It.IsAny <ResourceLocator>(),
                       It.IsAny <CancellationToken>()))
            .ReturnsAsync((IProjectModelNode)null);     // Not found

            var remoteDesktopService = new Mock <IRemoteDesktopSessionBroker>();

            remoteDesktopService.Setup(s => s.Connect(
                                           It.IsAny <InstanceLocator>(),
                                           "localhost",
                                           It.IsAny <ushort>(),
                                           It.IsAny <InstanceConnectionSettings>())).Returns <IRemoteDesktopSession>(null);

            this.serviceRegistry.AddSingleton <IRemoteDesktopSessionBroker>(remoteDesktopService.Object);

            var service = new RdpConnectionService(this.serviceRegistry);
            await service.ActivateOrConnectInstanceAsync(
                IapRdpUrl.FromString("iap-rdp:///project/us-central-1/instance?username=john%20doe"));

            remoteDesktopService.Verify(s => s.Connect(
                                            It.IsAny <InstanceLocator>(),
                                            "localhost",
                                            It.IsAny <ushort>(),
                                            It.Is <InstanceConnectionSettings>(i => i.RdpUsername.StringValue == "john doe")), Times.Once);
            settingsService.Verify(s => s.GetConnectionSettings(
                                       It.IsAny <IProjectModelNode>()), Times.Never);
        }