Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/tests/Common/Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@
<ItemGroup>
<RunTimeArtifactsIncludeFolders Include="/" />

<!-- Experiment -->
<RunTimeArtifactsIncludeFolders Include="R2RDump/" />

<!-- Used by the Crossgen comparison job -->
<RunTimeArtifactsIncludeFolders Include="IL/" />

Expand Down
3 changes: 3 additions & 0 deletions src/tests/issues.targets
Original file line number Diff line number Diff line change
Expand Up @@ -1556,6 +1556,9 @@
<ExcludeList Include="$(XunitTestBinBase)/profiler/rejit/rejit/rejit.sh">
<Issue>needs triage</Issue>
</ExcludeList>
<ExcludeList Include="$(XunitTestBinBase)/r2rdump/R2RDumpTests/*">
<Issue>These tests are not supposed to be run with mono.</Issue>
</ExcludeList>
<ExcludeList Include="$(XunitTestBinBase)/readytorun/crossgen2/crossgen2smoke/**">
<Issue>needs triage</Issue>
</ExcludeList>
Expand Down
80 changes: 80 additions & 0 deletions src/tests/r2rdump/R2RDumpTester.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
using System;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
using Xunit;

namespace R2RDumpTests
{
public class R2RDumpTester : XunitBase
{
private const string CoreRoot = "CORE_ROOT";
private const string R2RDumpRelativePath = "R2RDump";
private const string R2RDumpFile = "R2RDump.dll";
private const string CoreRunFileName = "corerun";

public static string FindExePath(string exe)
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
exe = exe + ".exe";
}
exe = Environment.ExpandEnvironmentVariables(exe);
if (!File.Exists(exe))
{
if (Path.GetDirectoryName(exe) == String.Empty)
{
foreach (string test in (Environment.GetEnvironmentVariable("PATH") ?? "").Split(Path.PathSeparator))
{
string path = test.Trim();
if (!String.IsNullOrEmpty(path) && File.Exists(path = Path.Combine(path, exe)))
return Path.GetFullPath(path);
}
}
throw new FileNotFoundException(new FileNotFoundException().Message, exe);
}
return Path.GetFullPath(exe);
}

[Fact]
public void DumpCoreLib()
{
string CoreRootVar = Environment.GetEnvironmentVariable(CoreRoot);
bool IsUnix = !RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
string R2RDumpAbsolutePath = Path.Combine(CoreRootVar, R2RDumpRelativePath, R2RDumpFile);
string CoreLibFile = "System.Private.CoreLib.dll";
string CoreLibAbsolutePath = Path.Combine(CoreRootVar, CoreLibFile);
string OutputFile = Path.GetTempFileName();
string TestDotNetCmdVar = Environment.GetEnvironmentVariable("__TestDotNetCmd");
string DotNetAbsolutePath = string.IsNullOrEmpty(TestDotNetCmdVar) ? FindExePath("dotnet") : TestDotNetCmdVar;

ProcessStartInfo processStartInfo = new ProcessStartInfo
{
UseShellExecute = false,
FileName = DotNetAbsolutePath,
// TODO, what flags do we like to test?
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ultimately, all flags. We can't use --disasm today before #13122 is fixed.

Arguments = string.Join(" ", new string[]{"exec", R2RDumpAbsolutePath, "--in", CoreLibAbsolutePath, "--out", OutputFile})
};

Process process = Process.Start(processStartInfo);
process.WaitForExit();
int exitCode = process.ExitCode;
string outputContent = File.ReadAllText(OutputFile);
File.Delete(OutputFile);
// TODO, here is a point where we can add more validation to outputs
// An uncaught exception (such as signature decoding error, would be caught by the error code)
bool failed = exitCode != 0;
if (failed)
{
Console.WriteLine("The process terminated with exit code {0}", exitCode);
Console.WriteLine(outputContent);
Assert.True(!failed);
}
}

public static int Main(string[] args)
{
return new R2RDumpTester().RunTests();
}
}
}
19 changes: 19 additions & 0 deletions src/tests/r2rdump/R2RDumpTests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<DisableProjectBuild Condition="'$(RuntimeFlavor)' != 'coreclr'">true</DisableProjectBuild>
<CLRTestTargetUnsupported Condition="'$(RuntimeFlavor)' != 'coreclr'">true</CLRTestTargetUnsupported>
</PropertyGroup>
<ItemGroup>
<Compile Include="R2RDumpTester.cs" />
<Compile Include="..\Common\XunitBase.cs" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Resources\**" />
<EmbeddedResource Remove="Resources\**" />
<None Remove="Resources\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="xunit" Version="$(XUnitVersion)" />
</ItemGroup>
</Project>