public async Task WhenConnectingTwice_ExistingTunnelIsReturned() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <ITunnel>(); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromResult(true)); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new InstanceLocator("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync(destination)) .Returns(Task.FromResult(mockTunnel.Object)); var tunnel1 = await broker.ConnectAsync(destination, TimeSpan.FromMinutes(1)); var tunnel2 = await broker.ConnectAsync(destination, TimeSpan.FromMinutes(1)); Assert.IsNotNull(tunnel1); Assert.IsNotNull(tunnel2); Assert.AreSame(tunnel1, tunnel2); Assert.AreEqual(1, broker.OpenTunnels.Count()); }
public void WhenProbeFails_ThenOpenTunnelsDoesNotIncludeTunnel() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <ITunnel>(); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromException(new ApplicationException())); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new InstanceLocator("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync(destination)) .Returns(Task.FromResult(mockTunnel.Object)); AssertEx.ThrowsAggregateException <ApplicationException>(() => { broker.ConnectAsync(destination, TimeSpan.FromMinutes(1)).Wait(); }); Assert.AreEqual(0, broker.OpenTunnels.Count()); }
public async Task WhenConnectSuccessful_OpenEventIsFired() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <ITunnel>(); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromResult(true)); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new InstanceLocator("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync(destination)) .Returns(Task.FromResult(mockTunnel.Object)); var tunnel = await broker.ConnectAsync(destination, TimeSpan.FromMinutes(1)); mockEventService.Verify(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>()), Times.Once); }
public async Task WhenConnectSuccessful_ThenOpenTunnelsIncludesTunnel() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <ITunnel>(); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromResult(true)); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new InstanceLocator("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync( destination, It.IsAny <ISshRelayPolicy>())) .Returns(Task.FromResult(mockTunnel.Object)); var tunnel = await broker.ConnectAsync( destination, new AllowAllRelayPolicy(), TimeSpan.FromMinutes(1)); Assert.IsNotNull(tunnel); Assert.AreEqual(1, broker.OpenTunnels.Count()); Assert.IsTrue(broker.IsConnected(destination)); Assert.AreSame(tunnel, broker.OpenTunnels.First()); }
public async Task WhenClosingAllTunnels_CloseEventsAreFired() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelClosedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <ITunnel>(); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromResult(true)); mockTunnel.Setup(t => t.Close()); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new InstanceLocator("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync( destination, It.IsAny <ISshRelayPolicy>())) .Returns(Task.FromResult(mockTunnel.Object)); var tunnel = await broker.ConnectAsync( destination, new AllowAllRelayPolicy(), TimeSpan.FromMinutes(1)); await broker.DisconnectAllAsync(); mockEventService.Verify(s => s.FireAsync(It.IsAny <TunnelClosedEvent>()), Times.Once); }
public async Task WhenClosingTunnel_ThenTunnelIsRemovedFromOpenTunnels() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <ITunnel>(); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromResult(true)); mockTunnel.Setup(t => t.Close()); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new InstanceLocator("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync( destination, It.IsAny <ISshRelayPolicy>())) .Returns(Task.FromResult(mockTunnel.Object)); var tunnel = await broker.ConnectAsync( destination, new AllowAllRelayPolicy(), TimeSpan.FromMinutes(1)); Assert.AreEqual(1, broker.OpenTunnels.Count()); await broker.DisconnectAsync(destination); Assert.AreEqual(0, broker.OpenTunnels.Count()); }
public async Task WhenClosingAllTunnels_AllTunnelsAreClosed() { var mockTunnelService = new Mock <ITunnelService>(); var mockEventService = new Mock <IEventService>(); mockEventService.Setup(s => s.FireAsync(It.IsAny <TunnelOpenedEvent>())) .Returns(Task.FromResult(true)); var mockTunnel = new Mock <Tunnel>(null, null, null); mockTunnel.Setup(t => t.Probe(It.IsAny <TimeSpan>())) .Returns(Task.FromResult(true)); mockTunnel.Setup(t => t.Close()); var broker = new TunnelBrokerService(mockTunnelService.Object, mockEventService.Object); var vmInstanceRef = new VmInstanceReference("project", "zone", "instance"); var destination = new TunnelDestination(vmInstanceRef, 3389); mockTunnelService.Setup(s => s.CreateTunnelAsync(destination)) .Returns(Task.FromResult(mockTunnel.Object)); var tunnel = await broker.ConnectAsync(destination, TimeSpan.FromMinutes(1)); Assert.AreEqual(1, broker.OpenTunnels.Count()); await broker.DisconnectAllAsync(); Assert.AreEqual(0, broker.OpenTunnels.Count()); }
public TunnelsWindow(IServiceProvider serviceProvider) { InitializeComponent(); this.dockPanel = serviceProvider.GetService <IMainForm>().MainPanel; this.tunnelBrokerService = serviceProvider.GetService <TunnelBrokerService>(); this.exceptionDialog = serviceProvider.GetService <IExceptionDialog>(); this.TabText = this.Text; // // This window is a singleton, so we never want it to be closed, // just hidden. // this.HideOnClose = true; // Keep the list up tp date. var eventService = serviceProvider.GetService <IEventService>(); eventService.BindHandler <TunnelOpenedEvent>(_ => RefreshTunnels()); eventService.BindHandler <TunnelClosedEvent>(_ => RefreshTunnels()); }