From c55fbdfef95028ba03d0f7a35aebca03bd76f852 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Wed, 13 Jul 2022 15:16:11 +0200 Subject: [PATCH] [xharness] Collect and upload any crash reports that occurred during the entire test run. (#15466) --- tests/xharness/Jenkins/Jenkins.cs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/xharness/Jenkins/Jenkins.cs b/tests/xharness/Jenkins/Jenkins.cs index cf237cf84a..254c95b5ad 100644 --- a/tests/xharness/Jenkins/Jenkins.cs +++ b/tests/xharness/Jenkins/Jenkins.cs @@ -25,6 +25,7 @@ namespace Xharness.Jenkins { readonly TestVariationsFactory testVariationsFactory; public JenkinsDeviceLoader DeviceLoader { get; private set; } readonly ResourceManager resourceManager; + readonly DateTime startTimeUtc = DateTime.UtcNow; // report writers, do need to be a class instance because the have state. readonly HtmlReportWriter xamarinStorageHtmlReportWriter; @@ -287,6 +288,31 @@ namespace Xharness.Jenkins { MainLog.WriteLine ("Unexpected exception: {0}", ex); Console.WriteLine ("Unexpected exception: {0}", ex); return 2; + } finally { + CollectCrashReports (); + } + } + + // Collect any crash reports that were created during the test run + void CollectCrashReports () + { + try { + var dir = Path.Combine (Environment.GetEnvironmentVariable ("HOME"), "Library", "Logs", "DiagnosticReports"); + var reports = Directory.GetFiles (dir).Select (v => { + (string Path, DateTime LastWriteTimeUtc) rv = (v, File.GetLastWriteTimeUtc (v)); + return rv; + }).ToArray (); + MainLog.WriteLine ($"Found {reports.Length} crash reports in {dir} (the ones marked with 'x' occurred during this test run):"); + foreach (var report in reports.OrderBy (v => v)) { + MainLog.WriteLine ($" {(report.LastWriteTimeUtc > startTimeUtc ? "x" : " ")} {report.LastWriteTimeUtc.ToString ("u")} {report.Path}"); + } + var targetDir = Path.Combine (LogDirectory, "DiagnosticReports"); + Directory.CreateDirectory (targetDir); + foreach (var report in reports.Where (v => v.LastWriteTimeUtc >= startTimeUtc)) { + File.Copy (report.Path, Path.Combine (targetDir, Path.GetFileName (report.Path))); + } + } catch (Exception e) { + MainLog.WriteLine ($"Failed to collect crash reports: {e}"); } }