public void EnsureAgentResponsive_AgentDoesNotRespond_LeavesOtherAgentsAlive() { // Arrange var installation = new GpgInstallationBuilder().Build(); var runningAgentMocks = new[] { new Mock <IProcess>(), new Mock <IProcess>(), }; runningAgentMocks[0].Setup(p => p.MainModuleName).Returns(installation.GpgAgentExecutable.FullName); runningAgentMocks[1].Setup(p => p.MainModuleName).Returns(@"C:\other\gpg-agent.exe"); processes.Setup(p => p.GetProcessesByName("gpg-agent")).Returns(runningAgentMocks.Select(m => m.Object).ToArray); processes.Setup(p => p.GetProcesses()).Returns(runningAgentMocks.Select(m => m.Object).ToArray); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Returns(CreateProcessWithBlockingStandardOutput); var agent = new GpgAgent(processes.Object, installation); // Act agent.EnsureAgentResponsive(); // Assert runningAgentMocks[0].Verify(m => m.Kill(), Times.Once); runningAgentMocks[1].Verify(m => m.Kill(), Times.Never); }
public void EnsureAgentResponsive_StartConnectAgentThrows_CatchesException() { AddRunningAgentProcess(); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Throws <Exception>(); var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); Should.NotThrow(() => agent.EnsureAgentResponsive()); }
public void EnsureAgentResponsive_ConnectAgentDoesNotExist_DoesNotThrow() { AddRunningAgentProcess(); var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); installation.GpgConnectAgentExecutable.Delete(); Should.NotThrow(() => agent.EnsureAgentResponsive()); }
public void EnsureAgentResponsive_NoAgentRunning_ReturnsWithoutAction() { var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); agent.EnsureAgentResponsive(); processes.Verify(p => p.GetProcessesByName(It.IsAny <string>())); processes.VerifyNoOtherCalls(); }
public void EnsureAgentResponsive_AgentRunning_StartsConnectAgent() { AddRunningAgentProcess(); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())).Returns(() => new FakeProcess()); var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); agent.EnsureAgentResponsive(); processes.Verify(p => p.GetProcessesByName(It.IsAny <string>())); processes.Verify(p => p.Start(It.Is <ProcessStartInfo>( info => info.FileName == installation.GpgConnectAgentExecutable.FullName ))); }
public void EnsureAgentResponsive_ConnectWaitsForAgentAndExits_Returns(string connectAgentOutput) { AddRunningAgentProcess(); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())) .Returns(() => new FakeProcessBuilder().WithStandardError(connectAgentOutput).Build()); var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); agent.EnsureAgentResponsive(); processes.Verify(p => p.GetProcessesByName(It.IsAny <string>())); processes.Verify(p => p.Start(It.Is <ProcessStartInfo>( info => info.FileName == installation.GpgConnectAgentExecutable.FullName ))); }
public void EnsureAgentResponsive_AgentDoesNotRespond_KillsConnectAgent() { // Arrange AddRunningAgentProcess(); var connectAgentProcessMock = new Mock <IProcess>(); connectAgentProcessMock.Setup(p => p.StandardError).Returns(CreateBlockingStreamReader()); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())) .Returns(() => connectAgentProcessMock.Object); var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); // Act agent.EnsureAgentResponsive(); // Assert connectAgentProcessMock.Verify(p => p.Kill(), Times.Once); }
public void EnsureAgentResponsive_ConnectAgentReadsButDoesNotExit_KillsConnectAgent() { // Arrange AddRunningAgentProcess(); var connectAgentProcessMock = new Mock <IProcess>(); connectAgentProcessMock.Setup(c => c.WaitForExit(It.IsAny <TimeSpan>())).Returns(false); connectAgentProcessMock.Setup(p => p.StandardError).Returns(new StreamReader(new MemoryStream(new byte[] { 10 }))); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())) .Returns(() => connectAgentProcessMock.Object); var installation = new GpgInstallationBuilder().Build(); var agent = new GpgAgent(processes.Object, installation); // Act agent.EnsureAgentResponsive(); // Assert connectAgentProcessMock.Verify(p => p.Kill(), Times.Once); }