From ade05fbccd25ab09c86045695bebb6ec9c27e73a Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Tue, 14 Apr 2026 13:23:12 -0400 Subject: [PATCH 1/3] Improve xplat dump test work item naming Include both the host platform and dump source in Helix work item names so AzDO test results clearly show which host analyzed which dumps (e.g. CdacXPlatDumpTests_host_linux_arm_dumps_windows_x64). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj b/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj index a38f88f00f7795..c7b521a1f26c7e 100644 --- a/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj +++ b/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj @@ -97,7 +97,7 @@ - + $(DumpTestsPayload) $([System.IO.File]::ReadAllText('$(_HelixCommandFile)')) $(WorkItemTimeout) From 99346831b55f1114cb1fef23f58557cbd10ee4ae Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Wed, 15 Apr 2026 15:57:47 -0400 Subject: [PATCH 2/3] Include dump source platform in xunit test display names When running xplat dump tests, include the dump source platform in TestConfiguration.ToString() so individual test results in AzDO show which platform's dumps were being analyzed (e.g. 'local/r2r (windows_x64)'). The dump source is extracted from the CDAC_DUMP_ROOT environment variable which is set by the Helix work item. For local runs, DumpSource is null and the display is unchanged. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../cdac/tests/DumpTests/DumpTestBase.cs | 27 +++++++++++++++++-- .../cdac/tests/DumpTests/TestConfiguration.cs | 14 ++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs b/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs index 1b9a9de0e9e087..d821980d847b01 100644 --- a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs +++ b/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs @@ -34,13 +34,14 @@ public static IEnumerable TestConfigurations { get { + string? dumpSource = GetDumpSource(); foreach (string r2rMode in GetR2RModes()) { if (!IsVersionSkipped("local")) - yield return [new TestConfiguration("local", r2rMode)]; + yield return [new TestConfiguration("local", r2rMode, dumpSource)]; if (!IsVersionSkipped("net10.0")) - yield return [new TestConfiguration("net10.0", r2rMode)]; + yield return [new TestConfiguration("net10.0", r2rMode, dumpSource)]; } } } @@ -176,6 +177,28 @@ private static string GetDumpRoot() return Path.Combine(repoRoot, "artifacts", "dumps", "cdac"); } + /// + /// Returns the dump source platform from dump-info.json (e.g., "windows/x64"), + /// or null for local runs where CDAC_DUMP_ROOT is not set. + /// + private static string? GetDumpSource() + { + string? dumpRoot = Environment.GetEnvironmentVariable("CDAC_DUMP_ROOT"); + if (string.IsNullOrEmpty(dumpRoot)) + return null; + + // Try loading dump-info.json from any version directory to get OS/Arch + foreach (string versionDir in new[] { "local", "net10.0" }) + { + DumpInfo? info = DumpInfo.TryLoad(Path.Combine(dumpRoot, versionDir)); + if (info is not null) + return $"{info.Os}/{info.Arch}"; + } + + // Fall back to the directory name if dump-info.json isn't available + return Path.GetFileName(dumpRoot.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)); + } + /// /// Returns the R2R modes to test against. Both modes are always tested; /// dumps that don't exist for a given mode are skipped via . diff --git a/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs b/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs index 7340256e985a97..969260a5806f95 100644 --- a/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs +++ b/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs @@ -26,25 +26,35 @@ public sealed class TestConfiguration : IXunitSerializable /// public string R2RMode { get; set; } = "r2r"; + /// + /// The platform that produced the dump (e.g., "windows/x64", "linux/arm64"). + /// Null for local runs where the host and dump source are the same. + /// + public string? DumpSource { get; set; } + public TestConfiguration() { } - public TestConfiguration(string runtimeVersion, string r2rMode) + public TestConfiguration(string runtimeVersion, string r2rMode, string? dumpSource = null) { RuntimeVersion = runtimeVersion; R2RMode = r2rMode; + DumpSource = dumpSource; } - public override string ToString() => $"{RuntimeVersion}/{R2RMode}"; + public override string ToString() => + DumpSource is not null ? $"{RuntimeVersion}/{R2RMode}, target: {DumpSource}" : $"{RuntimeVersion}/{R2RMode}"; public void Serialize(IXunitSerializationInfo info) { info.AddValue(nameof(RuntimeVersion), RuntimeVersion); info.AddValue(nameof(R2RMode), R2RMode); + info.AddValue(nameof(DumpSource), DumpSource); } public void Deserialize(IXunitSerializationInfo info) { RuntimeVersion = info.GetValue(nameof(RuntimeVersion)); R2RMode = info.GetValue(nameof(R2RMode)); + DumpSource = info.GetValue(nameof(DumpSource)); } } From 075516ad97d81a8acaace244461d8cd3135aabd7 Mon Sep 17 00:00:00 2001 From: Max Charlamb Date: Thu, 16 Apr 2026 15:00:10 -0400 Subject: [PATCH 3/3] Address review: unify os_arch format and fix serialization - Use underscore separator (windows_x64) consistently across Helix work item names, dump-info.json output, and test display names - Format test display as parenthesized suffix: local/r2r (windows_x64) - Pass typeof(string) to AddValue for nullable DumpSource serialization - Document TargetArchitecture in helix proj properties Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs | 4 ++-- .../managed/cdac/tests/DumpTests/TestConfiguration.cs | 6 +++--- .../cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj | 1 + 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs b/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs index d821980d847b01..0da34a20d74821 100644 --- a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs +++ b/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs @@ -178,7 +178,7 @@ private static string GetDumpRoot() } /// - /// Returns the dump source platform from dump-info.json (e.g., "windows/x64"), + /// Returns the dump source platform from dump-info.json (e.g., "windows_x64"), /// or null for local runs where CDAC_DUMP_ROOT is not set. /// private static string? GetDumpSource() @@ -192,7 +192,7 @@ private static string GetDumpRoot() { DumpInfo? info = DumpInfo.TryLoad(Path.Combine(dumpRoot, versionDir)); if (info is not null) - return $"{info.Os}/{info.Arch}"; + return $"{info.Os}_{info.Arch}"; } // Fall back to the directory name if dump-info.json isn't available diff --git a/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs b/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs index 969260a5806f95..f96f0bccb6719f 100644 --- a/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs +++ b/src/native/managed/cdac/tests/DumpTests/TestConfiguration.cs @@ -27,7 +27,7 @@ public sealed class TestConfiguration : IXunitSerializable public string R2RMode { get; set; } = "r2r"; /// - /// The platform that produced the dump (e.g., "windows/x64", "linux/arm64"). + /// The platform that produced the dump (e.g., "windows_x64", "linux_arm64"). /// Null for local runs where the host and dump source are the same. /// public string? DumpSource { get; set; } @@ -42,13 +42,13 @@ public TestConfiguration(string runtimeVersion, string r2rMode, string? dumpSour } public override string ToString() => - DumpSource is not null ? $"{RuntimeVersion}/{R2RMode}, target: {DumpSource}" : $"{RuntimeVersion}/{R2RMode}"; + DumpSource is not null ? $"{RuntimeVersion}/{R2RMode} ({DumpSource})" : $"{RuntimeVersion}/{R2RMode}"; public void Serialize(IXunitSerializationInfo info) { info.AddValue(nameof(RuntimeVersion), RuntimeVersion); info.AddValue(nameof(R2RMode), R2RMode); - info.AddValue(nameof(DumpSource), DumpSource); + info.AddValue(nameof(DumpSource), DumpSource, typeof(string)); } public void Deserialize(IXunitSerializationInfo info) diff --git a/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj b/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj index c7b521a1f26c7e..6672ad08f8e3ea 100644 --- a/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj +++ b/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj @@ -18,6 +18,7 @@ TestHostPayload — Path to testhost shared framework directory DumpTestsPayload — Path to payload directory (tests/ + dumps/) TargetOS — Target OS (windows, linux, osx) + TargetArchitecture — Target architecture (x64, x86, arm64, arm) SourcePlatforms — Semicolon-separated source platform names (e.g. "windows_x64;linux_x64;osx_arm64") -->