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 CallGpg_WithInput_WritesToProcessStandardInput() { var installation = new GpgInstallationBuilder().Build(); var processes = new Mock <IProcesses>(); var inputStream = new Mock <Stream>(); inputStream.Setup(s => s.CanWrite).Returns(true); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())) .Returns(new FakeProcessBuilder() .WithStandardOutput("") .WithStandardError("") .WithStandardInput(inputStream.Object) .Build()); var transport = new GpgTransport(new StubHomedirResolver(@"C:\gpghome"), installation, processes.Object); transport.CallGpg("--encrypt", "input"); inputStream.Verify(s => s.Write(It.IsAny <byte[]>(), 0, 5)); }
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); }
public void CallGpg_SetsResultFromProcess() { var installation = new GpgInstallationBuilder().Build(); var processes = new Mock <IProcesses>(); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())) .Returns(new FakeProcessBuilder() .WithStandardOutput("stdout data") .WithStandardError("stderr message 1\r\nstderr message 2") .WithExitCode(10) .Build()); var transport = new GpgTransport(new StubHomedirResolver(@"C:\gpghome"), installation, processes.Object); var result = transport.CallGpg("--decrypt"); result.ShouldSatisfyAllConditions( () => result.Stdout.ShouldBe("stdout data"), () => result.StderrMessages.ShouldBe(new[] { "stderr message 1", "stderr message 2" }), () => result.ExitCode.ShouldBe(10) ); }
public void CallGpg_ProcessOutputsStatusMessages_AddsStatusMessagesToResult() { var installation = new GpgInstallationBuilder().Build(); var processes = new Mock <IProcesses>(); processes.Setup(p => p.Start(It.IsAny <ProcessStartInfo>())) .Returns(new FakeProcessBuilder() .WithStandardOutput("") .WithStandardError("[GNUPG:] ENC_TO keyId\r\n[GNUPG:] DECRYPTION_OKAY") .Build()); var transport = new GpgTransport(new StubHomedirResolver(@"C:\gpghome"), installation, processes.Object); var result = transport.CallGpg("--decrypt"); result.StatusMessages.Length.ShouldBe(2); result.StatusMessages.ShouldSatisfyAllConditions( () => result.StatusMessages[0].StatusCode.ShouldBe(GpgStatusCode.ENC_TO), () => result.StatusMessages[0].Message.ShouldBe("keyId"), () => result.StatusMessages[1].StatusCode.ShouldBe(GpgStatusCode.DECRYPTION_OKAY), () => result.StatusMessages[1].Message.ShouldBe(null) ); }