protected override async Task ExecuteAsync() { if (Finished) { return; } await VerifyRunAsync(); if (Finished) { return; } if (!await BuildAsync()) { return; } if (BuildOnly) { ExecutionResult = TestExecutingResult.BuildSucceeded; return; } ExecutionResult = TestExecutingResult.Running; duration.Restart(); // don't count the build time. await RunTestAsync(); }
public void ResultHasFlag(TestExecutingResult result, TestExecutingResult[] flags) { foreach (var flag in flags) { Assert.True(result.HasFlag(flag), $"{result} should have {flag}"); } }
public virtual void Reset() { test_log = null; failure_message = null; logs = null; duration.Reset(); execution_result = TestExecutingResult.NotStarted; execute_task = null; }
public void FlaggedIsPresentWhereItShouldBe(TestExecutingResult[] withFlag, TestExecutingResult flag) { var withoutFlag = Enum.GetValues(typeof(TestExecutingResult)) .Cast <TestExecutingResult>() .Except(withFlag); foreach (var result in withoutFlag) { Assert.False(result.HasFlag(flag), $"{result} should not have {flag}"); } foreach (var result in withFlag) { Assert.True(result.HasFlag(flag), $"{result} should have {flag}"); } }
protected async Task ExecuteProcessAsync(ILog log, string filename, List <string> arguments) { if (log == null) { log = Logs.Create($"execute-{Timestamp}.txt", LogType.ExecutionLog.ToString()); } using var proc = new Process(); proc.StartInfo.FileName = filename; proc.StartInfo.Arguments = StringUtils.FormatArguments(arguments); if (!string.IsNullOrEmpty(WorkingDirectory)) { proc.StartInfo.WorkingDirectory = WorkingDirectory; } SetEnvironmentVariables(proc); foreach (DictionaryEntry de in proc.StartInfo.EnvironmentVariables) { log.WriteLine($"export {de.Key}={de.Value}"); } Jenkins.MainLog.WriteLine("Executing {0} ({1})", TestName, Mode); if (!Harness.DryRun) { ExecutionResult = TestExecutingResult.Running; var result = await ProcessManager.RunAsync(proc, log, Timeout); if (result.TimedOut) { FailureMessage = $"Execution timed out after {Timeout.TotalMinutes} minutes."; log.WriteLine(FailureMessage); ExecutionResult = TestExecutingResult.TimedOut; } else if (result.Succeeded) { ExecutionResult = TestExecutingResult.Succeeded; } else { ExecutionResult = TestExecutingResult.Failed; FailureMessage = $"Execution failed with exit code {result.ExitCode}"; } } Jenkins.MainLog.WriteLine("Executed {0} ({1})", TestName, Mode); }
public async Task <bool> BuildAsync() { if (Finished) { return(true); } await VerifyBuildAsync(); if (Finished) { return(BuildTask.Succeeded); } ExecutionResult = TestExecutingResult.Building; await BuildTask.RunAsync(); if (!BuildTask.Succeeded) { if (BuildTask.TimedOut) { ExecutionResult = TestExecutingResult.TimedOut; } else { ExecutionResult = TestExecutingResult.BuildFailure; } FailureMessage = BuildTask.FailureMessage; if (!string.IsNullOrEmpty(BuildTask.KnownFailure)) { KnownFailure = BuildTask.KnownFailure; } if (Harness.InCI && BuildTask is MSBuildTask projectTask) { ResultParser.GenerateFailure(Logs, "build", projectTask.TestName, projectTask.Variation, $"App Build {projectTask.TestName} {projectTask.Variation}", $"App could not be built {FailureMessage}.", projectTask.BuildLog.FullPath, Harness.XmlJargon); } } else { ExecutionResult = TestExecutingResult.Built; } return(BuildTask.Succeeded); }