From 412bdb64d94b6034c0f4d43bea9419050dfe2e18 Mon Sep 17 00:00:00 2001 From: Tarek Mahmoud Sayed Date: Tue, 13 Jun 2017 15:00:49 -0700 Subject: [PATCH] Enable UAP Remote Execution for all tests This change to enable remote execution of all corefx tests in UAP. Because the remote execution code for UAP is using WinRT APIs and to avoid forcing adding UAP configuration to all test projects, we factor the remote execution code into its own test library (called TestHelper) which is cross compiled. --- src/CoreFx.Private.TestUtilities/dir.props | 8 + .../ref/Configurations.props | 8 + .../ref/CoreFx.Private.TestUtilities.cs | 57 ++++++ .../ref/CoreFx.Private.TestUtilities.csproj | 14 ++ .../src/Configurations.props | 12 ++ .../src/CoreFx.Private.TestUtilities.csproj | 58 +++++++ .../RemoteExecutorTestBase.Process.cs | 66 +++++++ .../Diagnostics/RemoteExecutorTestBase.cs | 163 ++---------------- .../RemoteExecutorTestBase.netcore.cs | 18 ++ .../RemoteExecutorTestBase.netfx.cs | 17 ++ .../Diagnostics/RemoteExecutorTestBase.uap.cs | 76 ++++++++ .../RemoteExecutorTestBase.uapaot.cs | 18 ++ .../src}/System/IO/FileCleanupTestBase.cs | 0 .../tests/System.Console.Tests.csproj | 6 - .../System.Data.SqlClient.Tests.csproj | 6 - ....Diagnostics.DiagnosticSource.Tests.csproj | 6 - ...m.Diagnostics.FileVersionInfo.Tests.csproj | 3 - .../tests/Configurations.props | 1 + ...agnostics.Process.Performance.Tests.csproj | 6 - .../System.Diagnostics.Process.Tests.csproj | 10 +- ...ystem.Diagnostics.TraceSource.Tests.csproj | 3 - .../tests/System.Globalization.Tests.csproj | 10 -- ...System.IO.Compression.ZipFile.Tests.csproj | 3 - .../tests/System.IO.Compression.Tests.csproj | 3 - .../System.IO.FileSystem.Watcher.Tests.csproj | 3 - ...tem.IO.FileSystem.Performance.Tests.csproj | 6 - .../tests/System.IO.FileSystem.Tests.csproj | 6 - ...MemoryMappedFiles.Performance.Tests.csproj | 3 - .../System.IO.MemoryMappedFiles.Tests.csproj | 6 - .../tests/System.IO.Packaging.Tests.csproj | 3 - ...System.IO.Pipes.AccessControl.Tests.csproj | 6 - .../tests/System.IO.Pipes.Tests.csproj | 6 - .../System.Net.Http.Functional.Tests.csproj | 6 - .../System.Net.Mail.Functional.Tests.csproj | 6 - ...tem.Net.Primitives.Functional.Tests.csproj | 6 - .../tests/System.Net.Requests.Tests.csproj | 6 - .../System.Net.Security.Tests.csproj | 6 - .../System.Net.Sockets.Tests.csproj | 6 - .../System.Runtime.Extensions.Tests.csproj | 6 - .../tests/System/Environment.Exit.cs | 2 +- ...time.Serialization.Formatters.Tests.csproj | 6 - .../tests/System.Runtime.Tests.csproj | 6 - ...ystem.Text.RegularExpressions.Tests.csproj | 6 - ...stem.Threading.Tasks.Dataflow.Tests.csproj | 6 - .../tests/System.Threading.Tests.csproj | 6 - 45 files changed, 372 insertions(+), 313 deletions(-) create mode 100644 src/CoreFx.Private.TestUtilities/dir.props create mode 100644 src/CoreFx.Private.TestUtilities/ref/Configurations.props create mode 100644 src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs create mode 100644 src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.csproj create mode 100644 src/CoreFx.Private.TestUtilities/src/Configurations.props create mode 100644 src/CoreFx.Private.TestUtilities/src/CoreFx.Private.TestUtilities.csproj create mode 100644 src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.Process.cs rename src/{Common/tests => CoreFx.Private.TestUtilities/src}/System/Diagnostics/RemoteExecutorTestBase.cs (52%) create mode 100644 src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netcore.cs create mode 100644 src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netfx.cs create mode 100644 src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uap.cs create mode 100644 src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uapaot.cs rename src/{Common/tests => CoreFx.Private.TestUtilities/src}/System/IO/FileCleanupTestBase.cs (100%) diff --git a/src/CoreFx.Private.TestUtilities/dir.props b/src/CoreFx.Private.TestUtilities/dir.props new file mode 100644 index 000000000000..04794ecf658c --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/dir.props @@ -0,0 +1,8 @@ + + + + + 1.0.0.0 + Test + + \ No newline at end of file diff --git a/src/CoreFx.Private.TestUtilities/ref/Configurations.props b/src/CoreFx.Private.TestUtilities/ref/Configurations.props new file mode 100644 index 000000000000..c398e42e8994 --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/ref/Configurations.props @@ -0,0 +1,8 @@ + + + + + netstandard; + + + \ No newline at end of file diff --git a/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs b/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs new file mode 100644 index 000000000000..cdb6977322fd --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.cs @@ -0,0 +1,57 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; +using System.Threading.Tasks; +using System.Runtime.CompilerServices; + +namespace System.Diagnostics +{ + public abstract partial class RemoteExecutorTestBase : System.IO.FileCleanupTestBase + { + public const int FailWaitTimeoutMilliseconds = 60000; + protected static readonly string HostRunner; + protected static readonly string HostRunnerName; + public const int SuccessExitCode = 42; + protected static readonly string TestConsoleApp; + protected RemoteExecutorTestBase() { } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func method, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func method, string arg, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func method, string arg1, string arg2, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func method, string arg1, string arg2, string arg3, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func method, string arg1, string arg2, string arg3, string arg4, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func method, string arg1, string arg2, string arg3, string arg4, string arg5, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvoke(System.Func> method, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public static System.Diagnostics.RemoteExecutorTestBase.RemoteInvokeHandle RemoteInvokeRaw(System.Delegate method, string unparsedArg, System.Diagnostics.RemoteInvokeOptions options=null) { throw null; } + public sealed partial class RemoteInvokeHandle : System.IDisposable + { + public RemoteInvokeHandle(System.Diagnostics.Process process, System.Diagnostics.RemoteInvokeOptions options) { } + public System.Diagnostics.RemoteInvokeOptions Options { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } + public System.Diagnostics.Process Process { [System.Runtime.CompilerServices.CompilerGeneratedAttribute] get { throw null; } } + public void Dispose() { } + } + } + public sealed partial class RemoteInvokeOptions + { + public RemoteInvokeOptions() { } + public bool CheckExitCode { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public bool EnableProfiling { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public bool Start { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public System.Diagnostics.ProcessStartInfo StartInfo { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + public int TimeOut { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } } + } +} +namespace System.IO +{ + public abstract partial class FileCleanupTestBase : System.IDisposable + { + protected FileCleanupTestBase() { } + protected string TestDirectory { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } } + public void Dispose() { } + protected virtual void Dispose(bool disposing) { } + ~FileCleanupTestBase() { } + protected string GetTestFileName(System.Nullable index=default(System.Nullable), [System.Runtime.CompilerServices.CallerMemberNameAttribute]string memberName=null, [System.Runtime.CompilerServices.CallerLineNumberAttribute]int lineNumber=0) { throw null; } + protected string GetTestFilePath(System.Nullable index=default(System.Nullable), [System.Runtime.CompilerServices.CallerMemberNameAttribute]string memberName=null, [System.Runtime.CompilerServices.CallerLineNumberAttribute]int lineNumber=0) { throw null; } + } +} \ No newline at end of file diff --git a/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.csproj b/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.csproj new file mode 100644 index 000000000000..ed421724cf1c --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/ref/CoreFx.Private.TestUtilities.csproj @@ -0,0 +1,14 @@ + + + + + {E2E59C98-998F-9965-991D-99411166AF6F} + + + + + + + + + \ No newline at end of file diff --git a/src/CoreFx.Private.TestUtilities/src/Configurations.props b/src/CoreFx.Private.TestUtilities/src/Configurations.props new file mode 100644 index 000000000000..c25540e0321b --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/Configurations.props @@ -0,0 +1,12 @@ + + + + + uapaot-Windows_NT; + uap-Windows_NT; + netfx-Windows_NT; + netcoreapp-Windows_NT; + netcoreapp-Unix; + + + \ No newline at end of file diff --git a/src/CoreFx.Private.TestUtilities/src/CoreFx.Private.TestUtilities.csproj b/src/CoreFx.Private.TestUtilities/src/CoreFx.Private.TestUtilities.csproj new file mode 100644 index 000000000000..05cb43af2a40 --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/CoreFx.Private.TestUtilities.csproj @@ -0,0 +1,58 @@ + + + + + CoreFx.Private.TestUtilities + {5B7EAEC-93CB-40DF-BE40-A60BC189B737} + $(ProjectDir)\external\test-runtime\XUnit.Runtime.depproj + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.Process.cs b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.Process.cs new file mode 100644 index 000000000000..01c731be23ac --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.Process.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Xunit; + +namespace System.Diagnostics +{ + /// Base class used for all tests that need to spawn a remote process. + public abstract partial class RemoteExecutorTestBase : FileCleanupTestBase + { + /// Invokes the method from this assembly in another process using the specified arguments. + /// The method to invoke. + /// The arguments to pass to the method. + /// true if this function should Start the Process; false if that responsibility is left up to the caller. + /// The ProcessStartInfo to use, or null for a default. + private static RemoteInvokeHandle RemoteInvoke(MethodInfo method, string[] args, RemoteInvokeOptions options) + { + options = options ?? new RemoteInvokeOptions(); + + // Verify the specified method is and that it returns an int (the exit code), + // and that if it accepts any arguments, they're all strings. + Assert.True(method.ReturnType == typeof(int) || method.ReturnType == typeof(Task)); + Assert.All(method.GetParameters(), pi => Assert.Equal(typeof(string), pi.ParameterType)); + + // And make sure it's in this assembly. This isn't critical, but it helps with deployment to know + // that the method to invoke is available because we're already running in this assembly. + Type t = method.DeclaringType; + Assembly a = t.GetTypeInfo().Assembly; + + // Start the other process and return a wrapper for it to handle its lifetime and exit checking. + var psi = options.StartInfo; + psi.UseShellExecute = false; + + if (!options.EnableProfiling) + { + // Profilers / code coverage tools doing coverage of the test process set environment + // variables to tell the targeted process what profiler to load. We don't want the child process + // to be profiled / have code coverage, so we remove these environment variables for that process + // before it's started. + psi.Environment.Remove("Cor_Profiler"); + psi.Environment.Remove("Cor_Enable_Profiling"); + psi.Environment.Remove("CoreClr_Profiler"); + psi.Environment.Remove("CoreClr_Enable_Profiling"); + } + + // If we need the host (if it exists), use it, otherwise target the console app directly. + string testConsoleAppArgs = "\"" + a.FullName + "\" " + t.FullName + " " + method.Name + " " + string.Join(" ", args); + + if (!File.Exists(TestConsoleApp)) + throw new IOException("RemoteExecutorConsoleApp test app isn't present in the test runtime directory."); + + psi.FileName = HostRunner; + psi.Arguments = ExtraParameter + testConsoleAppArgs; + + // Return the handle to the process, which may or not be started + return new RemoteInvokeHandle(options.Start ? + Process.Start(psi) : + new Process() { StartInfo = psi }, options); + } + } +} diff --git a/src/Common/tests/System/Diagnostics/RemoteExecutorTestBase.cs b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.cs similarity index 52% rename from src/Common/tests/System/Diagnostics/RemoteExecutorTestBase.cs rename to src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.cs index 60d203b63ee9..f6178afa5bd6 100644 --- a/src/Common/tests/System/Diagnostics/RemoteExecutorTestBase.cs +++ b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.cs @@ -3,45 +3,30 @@ // See the LICENSE file in the project root for more information. using System.IO; +using System.Diagnostics; using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using Xunit; -#if uap -using Windows.ApplicationModel; -using Windows.ApplicationModel.AppService; -using Windows.Foundation.Collections; -#endif // uap - namespace System.Diagnostics { /// Base class used for all tests that need to spawn a remote process. - public abstract class RemoteExecutorTestBase : FileCleanupTestBase + public abstract partial class RemoteExecutorTestBase : FileCleanupTestBase { - /// The name of the test console app. - protected static readonly string TestConsoleApp = "RemoteExecutorConsoleApp.exe"; - /// The name, without an extension, of the host used to host the test console app. - private static readonly string HostRunnerExecutableName = IsFullFramework ? "xunit.console" : IsNetNative ? "xunit.console.netcore" : "dotnet"; - /// The name, with an extension, of the host host used to host the test console app. - protected static readonly string HostRunnerName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? HostRunnerExecutableName + ".exe" : HostRunnerExecutableName; - /// The absolute path to the host runner executable. - protected static string HostRunner => Process.GetCurrentProcess().MainModule.FileName; - /// A timeout (milliseconds) after which a wait on a remote operation should be considered a failure. public const int FailWaitTimeoutMilliseconds = 60 * 1000; /// The exit code returned when the test process exits successfully. - internal const int SuccessExitCode = 42; + public const int SuccessExitCode = 42; - /// Determines if we're running on the .NET Framework (rather than .NET Core). - internal static bool IsFullFramework => RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework", StringComparison.OrdinalIgnoreCase); + /// The name of the test console app. + protected static readonly string TestConsoleApp = "RemoteExecutorConsoleApp.exe"; - internal static bool IsNetNative => RuntimeInformation.FrameworkDescription.StartsWith(".NET Native", StringComparison.OrdinalIgnoreCase); /// Invokes the method from this assembly in another process using the specified arguments. /// The method to invoke. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func method, RemoteInvokeOptions options = null) { @@ -51,7 +36,7 @@ internal static RemoteInvokeHandle RemoteInvoke( /// Invokes the method from this assembly in another process using the specified arguments. /// The method to invoke. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func> method, RemoteInvokeOptions options = null) { @@ -62,7 +47,7 @@ internal static RemoteInvokeHandle RemoteInvoke( /// The method to invoke. /// The first argument to pass to the method. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func method, string arg, RemoteInvokeOptions options = null) @@ -75,7 +60,7 @@ internal static RemoteInvokeHandle RemoteInvoke( /// The first argument to pass to the method. /// The second argument to pass to the method. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func method, string arg1, string arg2, RemoteInvokeOptions options = null) @@ -89,7 +74,7 @@ internal static RemoteInvokeHandle RemoteInvoke( /// The second argument to pass to the method. /// The third argument to pass to the method. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func method, string arg1, string arg2, string arg3, RemoteInvokeOptions options = null) @@ -104,7 +89,7 @@ internal static RemoteInvokeHandle RemoteInvoke( /// The third argument to pass to the method. /// The fourth argument to pass to the method. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func method, string arg1, string arg2, string arg3, string arg4, RemoteInvokeOptions options = null) @@ -120,7 +105,7 @@ internal static RemoteInvokeHandle RemoteInvoke( /// The fourth argument to pass to the method. /// The fifth argument to pass to the method. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvoke( + public static RemoteInvokeHandle RemoteInvoke( Func method, string arg1, string arg2, string arg3, string arg4, string arg5, RemoteInvokeOptions options = null) @@ -132,130 +117,12 @@ internal static RemoteInvokeHandle RemoteInvoke( /// The method to invoke. /// The arguments to pass to the method. /// Options to use for the invocation. - internal static RemoteInvokeHandle RemoteInvokeRaw(Delegate method, string unparsedArg, + public static RemoteInvokeHandle RemoteInvokeRaw(Delegate method, string unparsedArg, RemoteInvokeOptions options = null) { return RemoteInvoke(GetMethodInfo(method), new[] { unparsedArg }, options); } -#if uap - /// Invokes the method from this assembly in another process using the specified arguments. - /// The method to invoke. - /// The arguments to pass to the method. - /// true if this function should Start the Process; false if that responsibility is left up to the caller. - /// The ProcessStartInfo to use, or null for a default. - private static RemoteInvokeHandle RemoteInvoke(MethodInfo method, string[] args, RemoteInvokeOptions options) - { - options = options ?? new RemoteInvokeOptions(); - - // Verify the specified method is and that it returns an int (the exit code), - // and that if it accepts any arguments, they're all strings. - Assert.True(method.ReturnType == typeof(int) || method.ReturnType == typeof(Task)); - Assert.All(method.GetParameters(), pi => Assert.Equal(typeof(string), pi.ParameterType)); - - // And make sure it's in this assembly. This isn't critical, but it helps with deployment to know - // that the method to invoke is available because we're already running in this assembly. - Type t = method.DeclaringType; - Assembly a = t.GetTypeInfo().Assembly; - Assert.Equal(typeof(RemoteExecutorTestBase).GetTypeInfo().Assembly, a); - - using (AppServiceConnection remoteExecutionService = new AppServiceConnection()) - { - // Here, we use the app service name defined in the app service provider's Package.appxmanifest file in the section. - remoteExecutionService.AppServiceName = "com.microsoft.corefxuaptests"; - remoteExecutionService.PackageFamilyName = Package.Current.Id.FamilyName; - - AppServiceConnectionStatus status = remoteExecutionService.OpenAsync().GetAwaiter().GetResult(); - if (status != AppServiceConnectionStatus.Success) - { - throw new IOException($"RemoteInvoke cannot open the remote service. Open Service Status: {status}"); - } - - ValueSet message = new ValueSet(); - - message.Add("AssemblyName", a.FullName); - message.Add("TypeName", t.FullName); - message.Add("MethodName", method.Name); - - int i = 0; - foreach (string arg in args) - { - message.Add("Arg" + i, arg); - i++; - } - - AppServiceResponse response = remoteExecutionService.SendMessageAsync(message).GetAwaiter().GetResult(); - - Assert.True(response.Status == AppServiceResponseStatus.Success, $"response.Status = {response.Status}"); - int res = (int) response.Message["Results"]; - Assert.True(res == SuccessExitCode, (string) response.Message["Log"] + Environment.NewLine + $"Returned Error code: {res}"); - } - - // RemoteInvokeHandle is not really needed in the UAP scenario but we use it just to have consistent interface as non UAP - return new RemoteInvokeHandle(null, options); - } -#else - - /// Invokes the method from this assembly in another process using the specified arguments. - /// The method to invoke. - /// The arguments to pass to the method. - /// true if this function should Start the Process; false if that responsibility is left up to the caller. - /// The ProcessStartInfo to use, or null for a default. - private static RemoteInvokeHandle RemoteInvoke(MethodInfo method, string[] args, RemoteInvokeOptions options) - { - options = options ?? new RemoteInvokeOptions(); - - // Verify the specified method is and that it returns an int (the exit code), - // and that if it accepts any arguments, they're all strings. - Assert.True(method.ReturnType == typeof(int) || method.ReturnType == typeof(Task)); - Assert.All(method.GetParameters(), pi => Assert.Equal(typeof(string), pi.ParameterType)); - - // And make sure it's in this assembly. This isn't critical, but it helps with deployment to know - // that the method to invoke is available because we're already running in this assembly. - Type t = method.DeclaringType; - Assembly a = t.GetTypeInfo().Assembly; - Assert.Equal(typeof(RemoteExecutorTestBase).GetTypeInfo().Assembly, a); - - // Start the other process and return a wrapper for it to handle its lifetime and exit checking. - var psi = options.StartInfo; - psi.UseShellExecute = false; - - if (!options.EnableProfiling) - { - // Profilers / code coverage tools doing coverage of the test process set environment - // variables to tell the targeted process what profiler to load. We don't want the child process - // to be profiled / have code coverage, so we remove these environment variables for that process - // before it's started. - psi.Environment.Remove("Cor_Profiler"); - psi.Environment.Remove("Cor_Enable_Profiling"); - psi.Environment.Remove("CoreClr_Profiler"); - psi.Environment.Remove("CoreClr_Enable_Profiling"); - } - - // If we need the host (if it exists), use it, otherwise target the console app directly. - string testConsoleAppArgs = "\"" + a.FullName + "\" " + t.FullName + " " + method.Name + " " + string.Join(" ", args); - - if (!File.Exists(TestConsoleApp)) - throw new IOException("RemoteExecutorConsoleApp test app isn't present in the test runtime directory."); - - if (IsFullFramework || IsNetNative) - { - psi.FileName = TestConsoleApp; - psi.Arguments = testConsoleAppArgs; - } - else - { - psi.FileName = HostRunner; - psi.Arguments = TestConsoleApp + " " + testConsoleAppArgs; - } - - // Return the handle to the process, which may or not be started - return new RemoteInvokeHandle(options.Start ? - Process.Start(psi) : - new Process() { StartInfo = psi }, options); - } -#endif - private static MethodInfo GetMethodInfo(Delegate d) { // RemoteInvoke doesn't support marshaling state on classes associated with @@ -279,7 +146,7 @@ private static MethodInfo GetMethodInfo(Delegate d) } /// A cleanup handle to the Process created for the remote invocation. - internal sealed class RemoteInvokeHandle : IDisposable + public sealed class RemoteInvokeHandle : IDisposable { public RemoteInvokeHandle(Process process, RemoteInvokeOptions options) { @@ -321,7 +188,7 @@ public void Dispose() } /// Options used with RemoteInvoke. - internal sealed class RemoteInvokeOptions + public sealed class RemoteInvokeOptions { public bool Start { get; set; } = true; public ProcessStartInfo StartInfo { get; set; } = new ProcessStartInfo(); diff --git a/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netcore.cs b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netcore.cs new file mode 100644 index 000000000000..fb2fe31cad16 --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netcore.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; +using System.Runtime.InteropServices; + +namespace System.Diagnostics +{ + /// Base class used for all tests that need to spawn a remote process. + public abstract partial class RemoteExecutorTestBase : FileCleanupTestBase + { + protected static readonly string HostRunnerName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "dotnet.exe" : "dotnet"; + protected static readonly string HostRunner = Process.GetCurrentProcess().MainModule.FileName; + + private static readonly string ExtraParameter = TestConsoleApp + " " ; + } +} diff --git a/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netfx.cs b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netfx.cs new file mode 100644 index 000000000000..01f69914711b --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.netfx.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; + +namespace System.Diagnostics +{ + /// Base class used for all tests that need to spawn a remote process. + public abstract partial class RemoteExecutorTestBase : FileCleanupTestBase + { + protected static readonly string HostRunnerName = "xunit.console.exe"; + protected static readonly string HostRunner = TestConsoleApp; + + private static readonly string ExtraParameter = ""; + } +} diff --git a/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uap.cs b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uap.cs new file mode 100644 index 000000000000..218a1267d86d --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uap.cs @@ -0,0 +1,76 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Xunit; +using System.IO; +using System.Reflection; +using System.Threading.Tasks; +using Windows.ApplicationModel; +using Windows.Foundation.Collections; +using Windows.ApplicationModel.AppService; + +namespace System.Diagnostics +{ + /// Base class used for all tests that need to spawn a remote process. + public abstract partial class RemoteExecutorTestBase : FileCleanupTestBase + { + protected static readonly string HostRunnerName = "xunit.runner.uap.exe"; + protected static readonly string HostRunner = "xunit.runner.uap"; + + /// Invokes the method from this assembly in another process using the specified arguments. + /// The method to invoke. + /// The arguments to pass to the method. + /// true if this function should Start the Process; false if that responsibility is left up to the caller. + /// The ProcessStartInfo to use, or null for a default. + private static RemoteInvokeHandle RemoteInvoke(MethodInfo method, string[] args, RemoteInvokeOptions options) + { + options = options ?? new RemoteInvokeOptions(); + + // Verify the specified method is and that it returns an int (the exit code), + // and that if it accepts any arguments, they're all strings. + Assert.True(method.ReturnType == typeof(int) || method.ReturnType == typeof(Task)); + Assert.All(method.GetParameters(), pi => Assert.Equal(typeof(string), pi.ParameterType)); + + // And make sure it's in this assembly. This isn't critical, but it helps with deployment to know + // that the method to invoke is available because we're already running in this assembly. + Type t = method.DeclaringType; + Assembly a = t.GetTypeInfo().Assembly; + + using (AppServiceConnection remoteExecutionService = new AppServiceConnection()) + { + // Here, we use the app service name defined in the app service provider's Package.appxmanifest file in the section. + remoteExecutionService.AppServiceName = "com.microsoft.corefxuaptests"; + remoteExecutionService.PackageFamilyName = Package.Current.Id.FamilyName; + + AppServiceConnectionStatus status = remoteExecutionService.OpenAsync().GetAwaiter().GetResult(); + if (status != AppServiceConnectionStatus.Success) + { + throw new IOException($"RemoteInvoke cannot open the remote service. Open Service Status: {status}"); + } + + ValueSet message = new ValueSet(); + + message.Add("AssemblyName", a.FullName); + message.Add("TypeName", t.FullName); + message.Add("MethodName", method.Name); + + int i = 0; + foreach (string arg in args) + { + message.Add("Arg" + i, arg); + i++; + } + + AppServiceResponse response = remoteExecutionService.SendMessageAsync(message).GetAwaiter().GetResult(); + + Assert.True(response.Status == AppServiceResponseStatus.Success, $"response.Status = {response.Status}"); + int res = (int) response.Message["Results"]; + Assert.True(res == SuccessExitCode, (string) response.Message["Log"] + Environment.NewLine + $"Returned Error code: {res}"); + } + + // RemoteInvokeHandle is not really needed in the UAP scenario but we use it just to have consistent interface as non UAP + return new RemoteInvokeHandle(null, options); + } + } +} diff --git a/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uapaot.cs b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uapaot.cs new file mode 100644 index 000000000000..adc0b6af273d --- /dev/null +++ b/src/CoreFx.Private.TestUtilities/src/System/Diagnostics/RemoteExecutorTestBase.uapaot.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; + +namespace System.Diagnostics +{ + /// Base class used for all tests that need to spawn a remote process. + public abstract partial class RemoteExecutorTestBase : FileCleanupTestBase + { + protected static readonly string HostRunnerName = "xunit.console.netcore.exe"; + protected static readonly string HostRunner = TestConsoleApp; + + private static readonly string ExtraParameter = ""; + } + +} diff --git a/src/Common/tests/System/IO/FileCleanupTestBase.cs b/src/CoreFx.Private.TestUtilities/src/System/IO/FileCleanupTestBase.cs similarity index 100% rename from src/Common/tests/System/IO/FileCleanupTestBase.cs rename to src/CoreFx.Private.TestUtilities/src/System/IO/FileCleanupTestBase.cs diff --git a/src/System.Console/tests/System.Console.Tests.csproj b/src/System.Console/tests/System.Console.Tests.csproj index c10c8f5b28c1..7729b83ea5e9 100644 --- a/src/System.Console/tests/System.Console.Tests.csproj +++ b/src/System.Console/tests/System.Console.Tests.csproj @@ -40,12 +40,6 @@ Common\System\IO\InterceptStreamWriter.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\ShouldNotBeInvokedException.cs diff --git a/src/System.Data.SqlClient/tests/FunctionalTests/System.Data.SqlClient.Tests.csproj b/src/System.Data.SqlClient/tests/FunctionalTests/System.Data.SqlClient.Tests.csproj index 162185615edb..77e2f7f2778b 100644 --- a/src/System.Data.SqlClient/tests/FunctionalTests/System.Data.SqlClient.Tests.csproj +++ b/src/System.Data.SqlClient/tests/FunctionalTests/System.Data.SqlClient.Tests.csproj @@ -31,12 +31,6 @@ Common\System\AssertExtensions.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\PlatformDetection.cs diff --git a/src/System.Diagnostics.DiagnosticSource/tests/System.Diagnostics.DiagnosticSource.Tests.csproj b/src/System.Diagnostics.DiagnosticSource/tests/System.Diagnostics.DiagnosticSource.Tests.csproj index 2fbd944ab56c..86316971ef75 100644 --- a/src/System.Diagnostics.DiagnosticSource/tests/System.Diagnostics.DiagnosticSource.Tests.csproj +++ b/src/System.Diagnostics.DiagnosticSource/tests/System.Diagnostics.DiagnosticSource.Tests.csproj @@ -35,12 +35,6 @@ Common\System\Net\Configuration.Http.cs - - Common\System\IO\FileCleanupTestBase.cs - - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - \ No newline at end of file diff --git a/src/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj b/src/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj index 6f695af0374e..16c061f977c0 100644 --- a/src/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj +++ b/src/System.Diagnostics.FileVersionInfo/tests/System.Diagnostics.FileVersionInfo.Tests/System.Diagnostics.FileVersionInfo.Tests.csproj @@ -27,9 +27,6 @@ - - Common\System\IO\FileCleanupTestBase.cs - Common\System\PlatformDetection.cs diff --git a/src/System.Diagnostics.Process/tests/Configurations.props b/src/System.Diagnostics.Process/tests/Configurations.props index f333d20c1aaa..c71f0fb5ae98 100644 --- a/src/System.Diagnostics.Process/tests/Configurations.props +++ b/src/System.Diagnostics.Process/tests/Configurations.props @@ -4,6 +4,7 @@ netstandard-Windows_NT; netstandard-Unix; + uap-Windows_NT; \ No newline at end of file diff --git a/src/System.Diagnostics.Process/tests/Performance/System.Diagnostics.Process.Performance.Tests.csproj b/src/System.Diagnostics.Process/tests/Performance/System.Diagnostics.Process.Performance.Tests.csproj index be629d40721f..0bb7bb2f7593 100644 --- a/src/System.Diagnostics.Process/tests/Performance/System.Diagnostics.Process.Performance.Tests.csproj +++ b/src/System.Diagnostics.Process/tests/Performance/System.Diagnostics.Process.Performance.Tests.csproj @@ -10,12 +10,6 @@ - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - diff --git a/src/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj index fd1e907a95cd..d441671781fd 100644 --- a/src/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj +++ b/src/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj @@ -11,7 +11,9 @@ - + + + Common\System\AssertExtensions.cs @@ -21,12 +23,6 @@ Common\System\PlatformDetection.Unix.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\ShouldNotBeInvokedException.cs diff --git a/src/System.Diagnostics.TraceSource/tests/System.Diagnostics.TraceSource.Tests.csproj b/src/System.Diagnostics.TraceSource/tests/System.Diagnostics.TraceSource.Tests.csproj index e7197d9e270b..58badc80b58b 100644 --- a/src/System.Diagnostics.TraceSource/tests/System.Diagnostics.TraceSource.Tests.csproj +++ b/src/System.Diagnostics.TraceSource/tests/System.Diagnostics.TraceSource.Tests.csproj @@ -34,9 +34,6 @@ Common\System\AssertExtensions.cs - - Common\System\IO\FileCleanupTestBase.cs - Common\tests\System\PlatformDetection.cs diff --git a/src/System.Globalization/tests/System.Globalization.Tests.csproj b/src/System.Globalization/tests/System.Globalization.Tests.csproj index f9f3b2125087..ff7eb68ae48c 100644 --- a/src/System.Globalization/tests/System.Globalization.Tests.csproj +++ b/src/System.Globalization/tests/System.Globalization.Tests.csproj @@ -143,22 +143,12 @@ Common\System\RandomDataGenerator.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - {69e46a6f-9966-45a5-8945-2559fe337827} RemoteExecutorConsoleApp - - - - CharUnicodeInfo\UnicodeData8.0.txt diff --git a/src/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj b/src/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj index 52213bf0dd1e..c61ecbcd7092 100644 --- a/src/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj +++ b/src/System.IO.Compression.ZipFile/tests/System.IO.Compression.ZipFile.Tests.csproj @@ -15,9 +15,6 @@ Common\System\AssertExtensions.cs - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\TempFile.cs diff --git a/src/System.IO.Compression/tests/System.IO.Compression.Tests.csproj b/src/System.IO.Compression/tests/System.IO.Compression.Tests.csproj index cec2b8b3be1f..64e2dfde30c1 100644 --- a/src/System.IO.Compression/tests/System.IO.Compression.Tests.csproj +++ b/src/System.IO.Compression/tests/System.IO.Compression.Tests.csproj @@ -42,9 +42,6 @@ Common\System\IO\Compression\StreamHelpers.cs - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\TempFile.cs diff --git a/src/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj b/src/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj index c97af90ff29c..f6ee7a174d16 100644 --- a/src/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj +++ b/src/System.IO.FileSystem.Watcher/tests/System.IO.FileSystem.Watcher.Tests.csproj @@ -40,9 +40,6 @@ Common\System\AssertExtensions.cs - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\TempFile.cs diff --git a/src/System.IO.FileSystem/tests/Performance/System.IO.FileSystem.Performance.Tests.csproj b/src/System.IO.FileSystem/tests/Performance/System.IO.FileSystem.Performance.Tests.csproj index 85258bbfe6db..14a24cd377b9 100644 --- a/src/System.IO.FileSystem/tests/Performance/System.IO.FileSystem.Performance.Tests.csproj +++ b/src/System.IO.FileSystem/tests/Performance/System.IO.FileSystem.Performance.Tests.csproj @@ -23,15 +23,9 @@ Common\System\PerfUtils.cs - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\PathFeatures.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - diff --git a/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj b/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj index d4fcb1c666ac..be391761c820 100644 --- a/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj +++ b/src/System.IO.FileSystem/tests/System.IO.FileSystem.Tests.csproj @@ -158,9 +158,6 @@ - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\TempFile.cs @@ -170,9 +167,6 @@ Common\System\PlatformDetection.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - Common\System\AssertExtensions.cs diff --git a/src/System.IO.MemoryMappedFiles/tests/Performance/System.IO.MemoryMappedFiles.Performance.Tests.csproj b/src/System.IO.MemoryMappedFiles/tests/Performance/System.IO.MemoryMappedFiles.Performance.Tests.csproj index b5eb4684a002..7d0243f7d15a 100644 --- a/src/System.IO.MemoryMappedFiles/tests/Performance/System.IO.MemoryMappedFiles.Performance.Tests.csproj +++ b/src/System.IO.MemoryMappedFiles/tests/Performance/System.IO.MemoryMappedFiles.Performance.Tests.csproj @@ -14,9 +14,6 @@ - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\StringBuilderCache.cs diff --git a/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj b/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj index f3f89a4c2f82..a18106f2fb7e 100644 --- a/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj +++ b/src/System.IO.MemoryMappedFiles/tests/System.IO.MemoryMappedFiles.Tests.csproj @@ -26,12 +26,6 @@ Common\System\IO\TempFile.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\AssertExtensions.cs diff --git a/src/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj b/src/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj index c109c85fd9d1..e2a2ecbbe051 100644 --- a/src/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj +++ b/src/System.IO.Packaging/tests/System.IO.Packaging.Tests.csproj @@ -8,9 +8,6 @@ - - Common\System\IO\FileCleanupTestBase.cs - diff --git a/src/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj b/src/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj index 0539a6885f4e..b531986ec2f2 100644 --- a/src/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj +++ b/src/System.IO.Pipes.AccessControl/tests/System.IO.Pipes.AccessControl.Tests.csproj @@ -11,12 +11,6 @@ - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\PlatformDetection.cs diff --git a/src/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj b/src/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj index fec7b2d3c8df..33fc1ef8a171 100644 --- a/src/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj +++ b/src/System.IO.Pipes/tests/System.IO.Pipes.Tests.csproj @@ -36,12 +36,6 @@ Common\System\AssertExtensions.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\PlatformDetection.cs diff --git a/src/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj b/src/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj index 67bb82b27479..b00fcf49668a 100644 --- a/src/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj +++ b/src/System.Net.Http/tests/FunctionalTests/System.Net.Http.Functional.Tests.csproj @@ -23,18 +23,12 @@ Common\System\PlatformDetection.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - Common\System\Diagnostics\Tracing\TestEventListener.cs Common\System\IO\DelegateStream.cs - - Common\System\IO\FileCleanupTestBase.cs - Common\System\Net\Configuration.Certificates.cs diff --git a/src/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj b/src/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj index 5ea28c39c447..1075c5a8beb3 100644 --- a/src/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj +++ b/src/System.Net.Mail/tests/Functional/System.Net.Mail.Functional.Tests.csproj @@ -28,12 +28,6 @@ Common\System\Diagnostics\Tracing\TestEventListener.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - diff --git a/src/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj b/src/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj index 5321e59a4b39..c3be1073ea5a 100644 --- a/src/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj +++ b/src/System.Net.Primitives/tests/FunctionalTests/System.Net.Primitives.Functional.Tests.csproj @@ -36,12 +36,6 @@ Common\System\Diagnostics\Tracing\TestEventListener.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\Runtime\Serialization\Formatters\BinaryFormatterHelpers.cs diff --git a/src/System.Net.Requests/tests/System.Net.Requests.Tests.csproj b/src/System.Net.Requests/tests/System.Net.Requests.Tests.csproj index 57100724eb5d..f74fa454cca2 100644 --- a/src/System.Net.Requests/tests/System.Net.Requests.Tests.csproj +++ b/src/System.Net.Requests/tests/System.Net.Requests.Tests.csproj @@ -30,12 +30,6 @@ Common\System\Net\Http\LoopbackServer.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - {69e46a6f-9966-45a5-8945-2559fe337827} RemoteExecutorConsoleApp diff --git a/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj b/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj index 62134ea08a33..f0ddcc4fe139 100644 --- a/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj +++ b/src/System.Net.Security/tests/FunctionalTests/System.Net.Security.Tests.csproj @@ -107,12 +107,6 @@ Common\System\Diagnostics\Tracing\TestEventListener.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - diff --git a/src/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj b/src/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj index 9ca5cf80771c..ac1cfd69d6ee 100644 --- a/src/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj +++ b/src/System.Net.Sockets/tests/FunctionalTests/System.Net.Sockets.Tests.csproj @@ -98,12 +98,6 @@ Common\System\Diagnostics\Tracing\TestEventListener.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - diff --git a/src/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj b/src/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj index b6f285207352..08dc8331926b 100644 --- a/src/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj +++ b/src/System.Runtime.Extensions/tests/System.Runtime.Extensions.Tests.csproj @@ -90,12 +90,6 @@ Common\System\AssertExtensions.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\IO\PathFeatures.cs diff --git a/src/System.Runtime.Extensions/tests/System/Environment.Exit.cs b/src/System.Runtime.Extensions/tests/System/Environment.Exit.cs index 29af52ccd7f6..0852b9787805 100644 --- a/src/System.Runtime.Extensions/tests/System/Environment.Exit.cs +++ b/src/System.Runtime.Extensions/tests/System/Environment.Exit.cs @@ -60,7 +60,7 @@ public static void ExitCode_VoidMainAppReturnsSetValue(int mode) const string AppName = "VoidMainWithExitCodeApp.exe"; var psi = new ProcessStartInfo(); - if (IsFullFramework || IsNetNative) + if (PlatformDetection.IsFullFramework || PlatformDetection.IsNetNative) { psi.FileName = AppName; psi.Arguments = $"{expectedExitCode} {mode}"; diff --git a/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj b/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj index 29c663616ca1..9eb51250bab5 100644 --- a/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj +++ b/src/System.Runtime.Serialization.Formatters/tests/System.Runtime.Serialization.Formatters.Tests.csproj @@ -29,12 +29,6 @@ Common\System\NonRuntimeType.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - CommonTest\System\PlatformDetection.cs diff --git a/src/System.Runtime/tests/System.Runtime.Tests.csproj b/src/System.Runtime/tests/System.Runtime.Tests.csproj index 23234b7eab9f..8687ad8fc3bc 100644 --- a/src/System.Runtime/tests/System.Runtime.Tests.csproj +++ b/src/System.Runtime/tests/System.Runtime.Tests.csproj @@ -228,12 +228,6 @@ - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - {69e46a6f-9966-45a5-8945-2559fe337827} RemoteExecutorConsoleApp diff --git a/src/System.Text.RegularExpressions/tests/System.Text.RegularExpressions.Tests.csproj b/src/System.Text.RegularExpressions/tests/System.Text.RegularExpressions.Tests.csproj index 0f9f4a66213e..0f544cd5674a 100644 --- a/src/System.Text.RegularExpressions/tests/System.Text.RegularExpressions.Tests.csproj +++ b/src/System.Text.RegularExpressions/tests/System.Text.RegularExpressions.Tests.csproj @@ -15,12 +15,6 @@ Common\tests\System\PlatformDetection.cs - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - diff --git a/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj b/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj index ef9b10eda34d..1c8adef64f90 100644 --- a/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj +++ b/src/System.Threading.Tasks.Dataflow/tests/System.Threading.Tasks.Dataflow.Tests.csproj @@ -24,12 +24,6 @@ - - Common\System\Diagnostics\RemoteExecutorTestBase.cs - - - Common\System\IO\FileCleanupTestBase.cs - Common\System\Diagnostics\Tracing\TestEventListener.cs diff --git a/src/System.Threading/tests/System.Threading.Tests.csproj b/src/System.Threading/tests/System.Threading.Tests.csproj index d7c76321b31e..6e437a3437c8 100644 --- a/src/System.Threading/tests/System.Threading.Tests.csproj +++ b/src/System.Threading/tests/System.Threading.Tests.csproj @@ -43,12 +43,6 @@ CommonTest\System\Diagnostics\Tracing\TestEventListener.cs - - CommonTest\System\Diagnostics\RemoteExecutorTestBase.cs - - - CommonTest\System\IO\FileCleanupTestBase.cs - CommonTest\System\Threading\ThreadTestHelpers.cs