From d723604aaf802ae9e4deb0287da906d281c8744f Mon Sep 17 00:00:00 2001 From: Westin Musser <127992899+westin-m@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:24:27 -0800 Subject: [PATCH 1/3] Prevent inlining to guarantee stack frames --- .../Validation/ValidationErrorTests.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs b/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs index c1151641f8..f1fabfadb9 100644 --- a/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs +++ b/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +using System.Runtime.CompilerServices; using Xunit; namespace Microsoft.IdentityModel.Tokens.Tests @@ -22,11 +23,13 @@ public void ExceptionCreatedFromValidationError_ContainsTheRightStackTrace() } class ValidationErrorReturningClass { + [MethodImpl(MethodImplOptions.NoInlining)] public ValidationError firstMethod() { return secondMethod().AddCurrentStackFrame(); } + [MethodImpl(MethodImplOptions.NoInlining)] public ValidationError secondMethod() { return thirdMethod().AddCurrentStackFrame(); From c312fe3d9c6ad7b0baeb8d651a6f7e4d004346f5 Mon Sep 17 00:00:00 2001 From: Westin Musser <127992899+westin-m@users.noreply.github.com> Date: Wed, 13 Nov 2024 15:54:15 -0800 Subject: [PATCH 2/3] PR feedback --- .../Validation/ValidationErrorTests.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs b/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs index f1fabfadb9..5bc28d65c5 100644 --- a/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs +++ b/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs @@ -11,7 +11,7 @@ public class ValidationErrorTests [Fact] public void ExceptionCreatedFromValidationError_ContainsTheRightStackTrace() { - var validationError = new ValidationErrorReturningClass().firstMethod(); + var validationError = new ValidationErrorReturningClass().FirstMethod(); Assert.NotNull(validationError); Assert.NotNull(validationError.StackFrames); Assert.Equal(3, validationError.StackFrames.Count); @@ -24,18 +24,19 @@ public void ExceptionCreatedFromValidationError_ContainsTheRightStackTrace() class ValidationErrorReturningClass { [MethodImpl(MethodImplOptions.NoInlining)] - public ValidationError firstMethod() + public ValidationError FirstMethod() { - return secondMethod().AddCurrentStackFrame(); + return SecondMethod().AddCurrentStackFrame(); } [MethodImpl(MethodImplOptions.NoInlining)] - public ValidationError secondMethod() + public ValidationError SecondMethod() { - return thirdMethod().AddCurrentStackFrame(); + return ThirdMethod().AddCurrentStackFrame(); } - public ValidationError thirdMethod() + [MethodImpl(MethodImplOptions.NoInlining)] + public ValidationError ThirdMethod() { return new ValidationError( new MessageDetail("This is a test error"), From af1dd1d4b3501f20f8b3e4c785a46361d58e78c7 Mon Sep 17 00:00:00 2001 From: Westin Musser <127992899+westin-m@users.noreply.github.com> Date: Wed, 13 Nov 2024 16:38:39 -0800 Subject: [PATCH 3/3] Fix strings --- .../Validation/ValidationErrorTests.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs b/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs index 5bc28d65c5..03915c766c 100644 --- a/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs +++ b/test/Microsoft.IdentityModel.Tokens.Tests/Validation/ValidationErrorTests.cs @@ -17,10 +17,11 @@ public void ExceptionCreatedFromValidationError_ContainsTheRightStackTrace() Assert.Equal(3, validationError.StackFrames.Count); Assert.NotNull(validationError.GetException()); Assert.NotNull(validationError.GetException().StackTrace); - Assert.Equal("thirdMethod", validationError.StackFrames[0].GetMethod().Name); - Assert.Equal("secondMethod", validationError.StackFrames[1].GetMethod().Name); - Assert.Equal("firstMethod", validationError.StackFrames[2].GetMethod().Name); + Assert.Equal("ThirdMethod", validationError.StackFrames[0].GetMethod().Name); + Assert.Equal("SecondMethod", validationError.StackFrames[1].GetMethod().Name); + Assert.Equal("FirstMethod", validationError.StackFrames[2].GetMethod().Name); } + class ValidationErrorReturningClass { [MethodImpl(MethodImplOptions.NoInlining)]