Skip to content

Commit

Permalink
Bootstrapping a test for R2RDump (#42150)
Browse files Browse the repository at this point in the history
  • Loading branch information
cshung committed Nov 7, 2020
1 parent 613c936 commit a057f27
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 0 deletions.
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?
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>

0 comments on commit a057f27

Please sign in to comment.