Example #1
0
        public async Task ExecuteProcessAsync(ILog log, string filename, List <string> arguments)
        {
            if (log == null)
            {
                throw new ArgumentNullException(nameof(log));
            }

            using var proc           = new Process();
            proc.StartInfo.FileName  = filename;
            proc.StartInfo.Arguments = StringUtils.FormatArguments(arguments);
            if (!string.IsNullOrEmpty(WorkingDirectory))
            {
                proc.StartInfo.WorkingDirectory = WorkingDirectory;
            }
            envManager.SetEnvironmentVariables(proc);
            foreach (DictionaryEntry de in proc.StartInfo.EnvironmentVariables)
            {
                log.WriteLine($"export {de.Key}={de.Value}");
            }
            mainLog.WriteLine("Executing {0} ({1})", testTask.TestName, testTask.Mode);
            if (!dryRun)
            {
                testTask.ExecutionResult = TestExecutingResult.Running;
                var result = await ProcessManager.RunAsync(proc, log, Timeout);

                if (result.TimedOut)
                {
                    testTask.FailureMessage = $"Execution timed out after {Timeout.TotalMinutes} minutes.";
                    log.WriteLine(testTask.FailureMessage);
                    testTask.ExecutionResult = TestExecutingResult.TimedOut;
                }
                else if (result.Succeeded)
                {
                    testTask.ExecutionResult = TestExecutingResult.Succeeded;
                }
                else
                {
                    testTask.ExecutionResult = TestExecutingResult.Failed;
                    testTask.FailureMessage  = $"Execution failed with exit code {result.ExitCode}";
                }
            }
            mainLog.WriteLine("Executed {0} ({1})", testTask.TestName, testTask.Mode);
        }