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);
            }
        }
Example #2
0
        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));
        }
Example #3
0
        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();