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