private void RunProcess(ObservableProcess process, Action <LineOut> onLine = null) { var capturedLines = new List <string>(); ExceptionDispatchInfo e = null; process.SubscribeLines(line => { capturedLines.Add(line.Line); onLine?.Invoke(line); }, exception => e = ExceptionDispatchInfo.Capture(exception)); var completed = process.WaitForCompletion(_defaultTimeout); if (!completed) { process.Dispose(); throw new TerraformResourceException( $"terraform {_resourceDirectory} timed out after {_defaultTimeout}", -1, capturedLines); } if (e != null) { throw new TerraformResourceException( $"terraform {_resourceDirectory} did not succeed", e.SourceException); } if (process.ExitCode != 0) { throw new TerraformResourceException( $"terraform {_resourceDirectory} did not succeed", process.ExitCode.Value, capturedLines); } }
public void DelayedWriterStopWaitToShort() { var seen = new List <string>(); var args = TestCaseArguments(nameof(DelayedWriter)); args.WaitForExit = TimeSpan.FromMilliseconds(200); var process = new ObservableProcess(args); process.SubscribeLines(c => seen.Add(c.Line)); process.Dispose(); process.ExitCode.Should().NotHaveValue(); seen.Should().BeEmpty(string.Join(Environment.NewLine, seen)); }
public void DelayedWriterStopNoWaitDispose() { var seen = new List <string>(); var args = TestCaseArguments(nameof(DelayedWriter)); args.WaitForExit = null; //never wait for exit var process = new ObservableProcess(args); process.SubscribeLines(c => seen.Add(c.Line)); process.Dispose(); //disposing the process itself will stop the underlying Process process.ExitCode.Should().NotHaveValue(); seen.Should().BeEmpty(string.Join(Environment.NewLine, seen)); }
public void Dispose() => _process?.Dispose();