diff --git a/eng/testing/tests.mobile.targets b/eng/testing/tests.mobile.targets index 2c355fea155915..2da19d5173d4f4 100644 --- a/eng/testing/tests.mobile.targets +++ b/eng/testing/tests.mobile.targets @@ -108,6 +108,13 @@ AndroidTestRunner.dll + + + <_AndroidEnv Condition="'$(XUnitSingleThreadedMode)' == 'true'" Include="XUNIT_SINGLE_THREADED"> + 1 + + + @(MonoAOTCompilerDefaultAotArguments, ';') @@ -140,6 +147,7 @@ MonoRuntimeHeaders="$(MicrosoftNetCoreAppRuntimePackNativeDir)include\mono-2.0" Assemblies="@(BundleAssemblies)" MainLibraryFileName="$(MainLibraryFileName)" + EnvironmentVariables="@(_AndroidEnv)" ForceAOT="$(RunAOTCompilation)" ForceInterpreter="$(MonoForceInterpreter)" StripDebugSymbols="False" diff --git a/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs b/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs index ee58a16f4436eb..e181c37290adcd 100644 --- a/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs +++ b/src/libraries/Common/tests/AndroidTestRunner/AndroidTestRunner.cs @@ -30,7 +30,8 @@ public static async Task Main(string[] args) int exitCode = 0; s_MainTestName = Path.GetFileNameWithoutExtension(s_testLibs[0]); string? verbose = Environment.GetEnvironmentVariable("XUNIT_VERBOSE")?.ToLower(); - var simpleTestRunner = new SimpleAndroidTestRunner(verbose == "true" || verbose == "1"); + bool enableMaxThreads = (Environment.GetEnvironmentVariable("XUNIT_SINGLE_THREADED") != "1"); + var simpleTestRunner = new SimpleAndroidTestRunner(verbose == "true" || verbose == "1", enableMaxThreads); simpleTestRunner.TestsCompleted += (e, result) => { if (result.FailedTests > 0) @@ -42,17 +43,14 @@ public static async Task Main(string[] args) return exitCode; } - public SimpleAndroidTestRunner(bool verbose) + public SimpleAndroidTestRunner(bool verbose, bool enableMaxThreads) { - if (verbose) - { - MinimumLogLevel = MinimumLogLevel.Verbose; - _maxParallelThreads = 1; - } - else + MinimumLogLevel = (verbose) ? MinimumLogLevel.Verbose : MinimumLogLevel.Info; + _maxParallelThreads = (enableMaxThreads) ? Environment.ProcessorCount : 1; + + if (!enableMaxThreads) { - MinimumLogLevel = MinimumLogLevel.Info; - _maxParallelThreads = Environment.ProcessorCount; + Console.WriteLine("XUNIT: SINGLE THREADED MODE ENABLED"); } } diff --git a/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj b/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj index 3fce6c8a16ea71..26d518fc740def 100644 --- a/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj +++ b/src/libraries/System.Security.Cryptography.X509Certificates/tests/System.Security.Cryptography.X509Certificates.Tests.csproj @@ -11,9 +11,12 @@ $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) $(DefineConstants);Unix - true true + + true + true + diff --git a/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj b/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj index 889dca4802564c..8ee00a560deb0d 100644 --- a/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj +++ b/src/libraries/System.Security.Cryptography/tests/System.Security.Cryptography.Tests.csproj @@ -9,7 +9,10 @@ $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) - true + + + true + true - - - - @@ -191,14 +187,6 @@ - - - - - - - - diff --git a/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs b/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs index fcf71c0e6f68e3..b2ae7276fe90b9 100644 --- a/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs +++ b/src/tasks/AndroidAppBuilder/AndroidAppBuilder.cs @@ -28,6 +28,11 @@ public class AndroidAppBuilderTask : Task /// public ITaskItem[] Assemblies { get; set; } = Array.Empty(); + /// + /// The set of environment variables to provide to the native embedded application + /// + public ITaskItem[] EnvironmentVariables { get; set; } = Array.Empty(); + /// /// Prefer FullAOT mode for Emulator over JIT /// @@ -103,6 +108,7 @@ public override bool Execute() apkBuilder.KeyStorePath = KeyStorePath; apkBuilder.ForceInterpreter = ForceInterpreter; apkBuilder.ForceAOT = ForceAOT; + apkBuilder.EnvironmentVariables = EnvironmentVariables; apkBuilder.StaticLinkedRuntime = StaticLinkedRuntime; apkBuilder.RuntimeComponents = RuntimeComponents; apkBuilder.DiagnosticPorts = DiagnosticPorts; diff --git a/src/tasks/AndroidAppBuilder/ApkBuilder.cs b/src/tasks/AndroidAppBuilder/ApkBuilder.cs index d11c8da8b79711..b6acdc48592f1c 100644 --- a/src/tasks/AndroidAppBuilder/ApkBuilder.cs +++ b/src/tasks/AndroidAppBuilder/ApkBuilder.cs @@ -27,6 +27,7 @@ public class ApkBuilder public string? KeyStorePath { get; set; } public bool ForceInterpreter { get; set; } public bool ForceAOT { get; set; } + public ITaskItem[] EnvironmentVariables { get; set; } = Array.Empty(); public bool InvariantGlobalization { get; set; } public bool EnableRuntimeLogging { get; set; } public bool StaticLinkedRuntime { get; set; } @@ -371,8 +372,17 @@ public ApkBuilder(TaskLoggingHelper logger) if (!string.IsNullOrEmpty(NativeMainSource)) File.Copy(NativeMainSource, javaActivityPath, true); + string envVariables = ""; + foreach (ITaskItem item in EnvironmentVariables) + { + string name = item.ItemSpec; + string value = item.GetMetadata("Value"); + envVariables += $"\t\tsetEnv(\"{name}\", \"{value}\");\n"; + } + string monoRunner = Utils.GetEmbeddedResource("MonoRunner.java") - .Replace("%EntryPointLibName%", Path.GetFileName(mainLibraryFileName)); + .Replace("%EntryPointLibName%", Path.GetFileName(mainLibraryFileName)) + .Replace("%EnvVariables%", envVariables); File.WriteAllText(monoRunnerPath, monoRunner); diff --git a/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java b/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java index 1f9654c0acf909..700d95e123f07a 100644 --- a/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java +++ b/src/tasks/AndroidAppBuilder/Templates/MonoRunner.java @@ -65,6 +65,8 @@ public void onCreate(Bundle arguments) { argsToForward = argsList.toArray(new String[argsList.size()]); } +%EnvVariables% + super.onCreate(arguments); start(); }