From dbb65a7b8b842adda057d135280f391db0936638 Mon Sep 17 00:00:00 2001 From: Adeel Mujahid <3840695+am11@users.noreply.github.com> Date: Tue, 28 Sep 2021 03:51:08 +0300 Subject: [PATCH] Allow multiple [SkipOnCoreClr] (#7960) * Set AllowMultiple to true in SkipOnCoreClrAttribute * Probe DOTNET_ variables related to COMPlus_ as well * Address CR feedback --- .../src/Attributes/SkipOnCoreClrAttribute.cs | 2 +- .../src/Discoverers/SkipOnCoreClrDiscoverer.cs | 17 +++++++++-------- .../src/RuntimeTestModes.cs | 14 +++++++------- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.DotNet.XUnitExtensions/src/Attributes/SkipOnCoreClrAttribute.cs b/src/Microsoft.DotNet.XUnitExtensions/src/Attributes/SkipOnCoreClrAttribute.cs index a2d5b933eb9..ef527b206ec 100644 --- a/src/Microsoft.DotNet.XUnitExtensions/src/Attributes/SkipOnCoreClrAttribute.cs +++ b/src/Microsoft.DotNet.XUnitExtensions/src/Attributes/SkipOnCoreClrAttribute.cs @@ -7,7 +7,7 @@ namespace Xunit { [TraitDiscoverer("Microsoft.DotNet.XUnitExtensions.SkipOnCoreClrDiscoverer", "Microsoft.DotNet.XUnitExtensions")] - [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class SkipOnCoreClrAttribute : Attribute, ITraitAttribute { internal SkipOnCoreClrAttribute() { } diff --git a/src/Microsoft.DotNet.XUnitExtensions/src/Discoverers/SkipOnCoreClrDiscoverer.cs b/src/Microsoft.DotNet.XUnitExtensions/src/Discoverers/SkipOnCoreClrDiscoverer.cs index 24443a347a5..8f9fd31101e 100644 --- a/src/Microsoft.DotNet.XUnitExtensions/src/Discoverers/SkipOnCoreClrDiscoverer.cs +++ b/src/Microsoft.DotNet.XUnitExtensions/src/Discoverers/SkipOnCoreClrDiscoverer.cs @@ -13,13 +13,13 @@ namespace Microsoft.DotNet.XUnitExtensions { public class SkipOnCoreClrDiscoverer : ITraitDiscoverer { - private static readonly Lazy s_isJitStress = new Lazy(() => !string.Equals(GetEnvironmentVariableValue("COMPlus_JitStress"), "0", StringComparison.InvariantCulture)); - private static readonly Lazy s_isJitStressRegs = new Lazy(() => !string.Equals(GetEnvironmentVariableValue("COMPlus_JitStressRegs"), "0", StringComparison.InvariantCulture)); - private static readonly Lazy s_isJitMinOpts = new Lazy(() => string.Equals(GetEnvironmentVariableValue("COMPlus_JITMinOpts"), "1", StringComparison.InvariantCulture)); - private static readonly Lazy s_isTailCallStress = new Lazy(() => string.Equals(GetEnvironmentVariableValue("COMPlus_TailcallStress"), "1", StringComparison.InvariantCulture)); - private static readonly Lazy s_isZapDisable = new Lazy(() => string.Equals(GetEnvironmentVariableValue("COMPlus_ZapDisable"), "1", StringComparison.InvariantCulture)); - private static readonly Lazy s_isGCStress3 = new Lazy(() => CompareGCStressModeAsLower(GetEnvironmentVariableValue("COMPlus_GCStress"), "0x3", "3")); - private static readonly Lazy s_isGCStressC = new Lazy(() => CompareGCStressModeAsLower(GetEnvironmentVariableValue("COMPlus_GCStress"), "0xC", "C")); + private static readonly Lazy s_isJitStress = new Lazy(() => !string.Equals(GetEnvironmentVariableValue("JitStress"), "0", StringComparison.InvariantCulture)); + private static readonly Lazy s_isJitStressRegs = new Lazy(() => !string.Equals(GetEnvironmentVariableValue("JitStressRegs"), "0", StringComparison.InvariantCulture)); + private static readonly Lazy s_isJitMinOpts = new Lazy(() => string.Equals(GetEnvironmentVariableValue("JITMinOpts"), "1", StringComparison.InvariantCulture)); + private static readonly Lazy s_isTailCallStress = new Lazy(() => string.Equals(GetEnvironmentVariableValue("TailcallStress"), "1", StringComparison.InvariantCulture)); + private static readonly Lazy s_isZapDisable = new Lazy(() => string.Equals(GetEnvironmentVariableValue("ZapDisable"), "1", StringComparison.InvariantCulture)); + private static readonly Lazy s_isGCStress3 = new Lazy(() => CompareGCStressModeAsLower(GetEnvironmentVariableValue("GCStress"), "0x3", "3")); + private static readonly Lazy s_isGCStressC = new Lazy(() => CompareGCStressModeAsLower(GetEnvironmentVariableValue("GCStress"), "0xC", "C")); private static readonly Lazy s_isCheckedRuntime = new Lazy(() => IsCheckedRuntime()); private static readonly Lazy s_isReleaseRuntime = new Lazy(() => IsReleaseRuntime()); private static readonly Lazy s_isDebugRuntime = new Lazy(() => IsDebugRuntime()); @@ -81,7 +81,8 @@ private static bool StressModeApplies(RuntimeTestModes stressMode) => s_isJitStress.Value || s_isJitMinOpts.Value; - private static string GetEnvironmentVariableValue(string name) => Environment.GetEnvironmentVariable(name) ?? "0"; + private static string GetEnvironmentVariableValue(string name) => + Environment.GetEnvironmentVariable("DOTNET_" + name) ?? Environment.GetEnvironmentVariable("COMPlus_" + name) ?? "0"; private static bool IsCheckedRuntime() => AssemblyConfigurationEquals("Checked"); diff --git a/src/Microsoft.DotNet.XUnitExtensions/src/RuntimeTestModes.cs b/src/Microsoft.DotNet.XUnitExtensions/src/RuntimeTestModes.cs index b8c32c93654..f64318dd4d2 100644 --- a/src/Microsoft.DotNet.XUnitExtensions/src/RuntimeTestModes.cs +++ b/src/Microsoft.DotNet.XUnitExtensions/src/RuntimeTestModes.cs @@ -17,22 +17,22 @@ public enum RuntimeTestModes // JitStress, JitStressRegs, JitMinOpts and TailcallStress enable // various modes in the JIT that cause us to exercise more code paths, // and generate different kinds of code - JitStress = 1 << 1, // COMPlus_JitStress is set. - JitStressRegs = 1 << 2, // COMPlus_JitStressRegs is set. - JitMinOpts = 1 << 3, // COMPlus_JITMinOpts is set. - TailcallStress = 1 << 4, // COMPlus_TailcallStress is set. + JitStress = 1 << 1, // DOTNET_JitStress (or COMPlus_JitStress) is set. + JitStressRegs = 1 << 2, // DOTNET_JitStressRegs (or COMPlus_JitStressRegs) is set. + JitMinOpts = 1 << 3, // DOTNET_JITMinOpts (or COMPlus_JITMinOpts) is set. + TailcallStress = 1 << 4, // DOTNET_TailcallStress (or COMPlus_TailcallStress) is set. // ZapDisable says to not use NGEN or ReadyToRun images. // This means we JIT everything. - ZapDisable = 1 << 5, // COMPlus_ZapDisable is set. + ZapDisable = 1 << 5, // DOTNET_ZapDisable (or COMPlus_ZapDisable) is set. // GCStress3 forces a GC at various locations, typically transitions // to/from the VM from managed code. - GCStress3 = 1 << 6, // COMPlus_GCStress includes mode 0x3. + GCStress3 = 1 << 6, // DOTNET_GCStress (or COMPlus_GCStress) includes mode 0x3. // GCStressC forces a GC at every JIT-generated code instruction, // including in NGEN/ReadyToRun code. - GCStressC = 1 << 7, // COMPlus_GCStress includes mode 0xC. + GCStressC = 1 << 7, // DOTNET_GCStress (or COMPlus_GCStress) includes mode 0xC. AnyGCStress = GCStress3 | GCStressC // Disable when any GCStress is exercised. } }