diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs b/src/native/managed/cdac/tests/DumpTests/DumpTestBase.cs index 1b9a9de0e9e087..0da34a20d74821 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..f96f0bccb6719f 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} ({DumpSource})" : $"{RuntimeVersion}/{R2RMode}"; public void Serialize(IXunitSerializationInfo info) { info.AddValue(nameof(RuntimeVersion), RuntimeVersion); info.AddValue(nameof(R2RMode), R2RMode); + info.AddValue(nameof(DumpSource), DumpSource, typeof(string)); } public void Deserialize(IXunitSerializationInfo info) { RuntimeVersion = info.GetValue(nameof(RuntimeVersion)); R2RMode = info.GetValue(nameof(R2RMode)); + DumpSource = info.GetValue(nameof(DumpSource)); } } 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..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") --> @@ -97,7 +98,7 @@ - + $(DumpTestsPayload) $([System.IO.File]::ReadAllText('$(_HelixCommandFile)')) $(WorkItemTimeout)