From e4105babd3ce74eb77eb47cda2bed64365d058e2 Mon Sep 17 00:00:00 2001 From: Michael Mantos Date: Sat, 14 Sep 2024 03:38:35 +0800 Subject: [PATCH] DOTNET-199: Adjust InnerException string before the '--- End of inner exception stack trace ---' line --- .../StackifyLib.log4net.Tests.csproj | 12 +-- Src/StackifyLib.log4net.Tests/packages.config | 3 +- Src/StackifyLib/Models/ErrorItem.cs | 10 +-- Src/StackifyLibCore.sln | 9 +-- .../Models/ErrorItem_Tests.cs | 78 +++++++++++++++++++ .../StackifyLib.UnitTests.csproj | 2 +- 6 files changed, 94 insertions(+), 20 deletions(-) create mode 100644 test/StackifyLib.UnitTests/Models/ErrorItem_Tests.cs diff --git a/Src/StackifyLib.log4net.Tests/StackifyLib.log4net.Tests.csproj b/Src/StackifyLib.log4net.Tests/StackifyLib.log4net.Tests.csproj index 75acbae..66781be 100644 --- a/Src/StackifyLib.log4net.Tests/StackifyLib.log4net.Tests.csproj +++ b/Src/StackifyLib.log4net.Tests/StackifyLib.log4net.Tests.csproj @@ -33,8 +33,8 @@ 4 - - ..\packages\log4net.2.0.11\lib\net45\log4net.dll + + ..\packages\log4net.2.0.17\lib\net45\log4net.dll ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll @@ -42,9 +42,13 @@ ..\packages\NUnit.3.13.2\lib\net45\nunit.framework.dll + + ..\packages\StackifyLib.2.2.15\lib\net452\StackifyLib.dll + + @@ -65,10 +69,6 @@ {7d98e5e3-a3e7-4613-8bb7-80a60d86a5e8} StackifyLib.log4net - - {03cf7411-65e2-4998-a157-9224eca6199b} - StackifyLib - diff --git a/Src/StackifyLib.log4net.Tests/packages.config b/Src/StackifyLib.log4net.Tests/packages.config index f89ee51..19fcb11 100644 --- a/Src/StackifyLib.log4net.Tests/packages.config +++ b/Src/StackifyLib.log4net.Tests/packages.config @@ -1,6 +1,7 @@  - + + \ No newline at end of file diff --git a/Src/StackifyLib/Models/ErrorItem.cs b/Src/StackifyLib/Models/ErrorItem.cs index b14c7e1..4692b00 100644 --- a/Src/StackifyLib/Models/ErrorItem.cs +++ b/Src/StackifyLib/Models/ErrorItem.cs @@ -298,15 +298,15 @@ public string FramesToString() { StringBuilder sb = new StringBuilder(); - foreach (var item in this.StackTrace) + if (InnerError != null) { - sb.AppendFormat(" at {0}\r\n", item.Method); + sb.Append(InnerError.FramesToString()); + sb.Append("--- End of inner exception stack trace ---\r\n"); } - if (InnerError != null) + foreach (var item in this.StackTrace) { - sb.Append("--- End of inner exception stack trace ---\r\n"); - sb.Append(InnerError.FramesToString()); + sb.AppendFormat(" at {0}\r\n", item.Method); } return sb.ToString(); diff --git a/Src/StackifyLibCore.sln b/Src/StackifyLibCore.sln index a726538..6f15531 100644 --- a/Src/StackifyLibCore.sln +++ b/Src/StackifyLibCore.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30907.101 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35303.130 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StackifyLib", "StackifyLib\StackifyLib.csproj", "{03CF7411-65E2-4998-A157-9224ECA6199B}" EndProject @@ -71,11 +71,9 @@ Global {D0E1AABD-6397-4CC7-9737-4904A4BF5BCD}.Release|Any CPU.ActiveCfg = Release|Any CPU {D0E1AABD-6397-4CC7-9737-4904A4BF5BCD}.Release|Any CPU.Build.0 = Release|Any CPU {2B832B34-BA30-4B5A-8E78-D6DC78AF16FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B832B34-BA30-4B5A-8E78-D6DC78AF16FB}.Debug|Any CPU.Build.0 = Debug|Any CPU {2B832B34-BA30-4B5A-8E78-D6DC78AF16FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {2B832B34-BA30-4B5A-8E78-D6DC78AF16FB}.Release|Any CPU.Build.0 = Release|Any CPU {BC6FDF2B-E063-4F8B-ABBA-6BD9425D4C64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC6FDF2B-E063-4F8B-ABBA-6BD9425D4C64}.Debug|Any CPU.Build.0 = Debug|Any CPU {BC6FDF2B-E063-4F8B-ABBA-6BD9425D4C64}.Release|Any CPU.ActiveCfg = Release|Any CPU {BC6FDF2B-E063-4F8B-ABBA-6BD9425D4C64}.Release|Any CPU.Build.0 = Release|Any CPU {CB09D719-F393-413D-B5CD-E0125543AD24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -99,15 +97,12 @@ Global {647F27AD-13D7-40C2-A7BB-97A5D19CE3D5}.Release|Any CPU.ActiveCfg = Release|Any CPU {647F27AD-13D7-40C2-A7BB-97A5D19CE3D5}.Release|Any CPU.Build.0 = Release|Any CPU {ADBD2138-9DE7-4211-AF58-84C7F0F9BEA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADBD2138-9DE7-4211-AF58-84C7F0F9BEA5}.Debug|Any CPU.Build.0 = Debug|Any CPU {ADBD2138-9DE7-4211-AF58-84C7F0F9BEA5}.Release|Any CPU.ActiveCfg = Release|Any CPU {ADBD2138-9DE7-4211-AF58-84C7F0F9BEA5}.Release|Any CPU.Build.0 = Release|Any CPU {99C81723-20FB-4241-862C-32F7ADDB7A9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99C81723-20FB-4241-862C-32F7ADDB7A9B}.Debug|Any CPU.Build.0 = Debug|Any CPU {99C81723-20FB-4241-862C-32F7ADDB7A9B}.Release|Any CPU.ActiveCfg = Release|Any CPU {99C81723-20FB-4241-862C-32F7ADDB7A9B}.Release|Any CPU.Build.0 = Release|Any CPU {EC5742DF-C1A8-4A7A-81DC-B6E0A4D3472D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC5742DF-C1A8-4A7A-81DC-B6E0A4D3472D}.Debug|Any CPU.Build.0 = Debug|Any CPU {EC5742DF-C1A8-4A7A-81DC-B6E0A4D3472D}.Release|Any CPU.ActiveCfg = Release|Any CPU {EC5742DF-C1A8-4A7A-81DC-B6E0A4D3472D}.Release|Any CPU.Build.0 = Release|Any CPU {18F96933-468E-4104-961E-0C68A5EF2B29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU diff --git a/test/StackifyLib.UnitTests/Models/ErrorItem_Tests.cs b/test/StackifyLib.UnitTests/Models/ErrorItem_Tests.cs new file mode 100644 index 0000000..633b046 --- /dev/null +++ b/test/StackifyLib.UnitTests/Models/ErrorItem_Tests.cs @@ -0,0 +1,78 @@ +// Copyright (c) 2024 BMC Software, Inc. +// Copyright (c) 2021-2024 Netreo +// Copyright (c) 2019 Stackify +using StackifyLib.Models; +using System; +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using Xunit; +using Moq; + +namespace StackifyLib.UnitTests.Models +{ + public class ErrorItem_Tests + { + + [Fact] + public async Task TestExceptionStringWithInnerException() + { + var expectedString = string.Join( + Environment.NewLine, + "System.Exception: Wrapping the exception to see the differences between outer and inner exceptions. ---> System.Exception: Throwing this exception to see all properties like stacktrace filled", + " at StackifyLib.UnitTests.Models.ExampleService.ThrowInnerException()", + " at StackifyLib.UnitTests.Models.ExampleService.CreateCaughtException()", + "--- End of inner exception stack trace ---", + " at StackifyLib.UnitTests.Models.ExampleService.ThrowOuterException(System.Exception)", + " at StackifyLib.UnitTests.Models.ExampleService.CreateCaughtException()", + " at StackifyLib.UnitTests.Models.ErrorItem_Tests+d__0.MoveNext()", + "" + ); + try + { + //ExampleService service = new ExampleService(); + ExampleService.CreateCaughtException(); + } + catch (Exception ex) + { + //PrintExceptionInfo(ex); + var exceptionString = new ErrorItem(ex).ToString(); + Assert.Contains(expectedString, exceptionString); + } + } + } + + class ExampleService + { + public static Exception CreateCaughtException() + { + try + { + try + { + ThrowInnerException(); + } + catch (Exception exception) + { + ThrowOuterException(exception); + } + } + catch (Exception) + { + throw; + } + // NOTE: never reached, but needed for the compiler. + return null; + } + private static void ThrowOuterException(Exception exception) + { + throw new Exception("Wrapping the exception to see the differences between outer and inner exceptions.", exception); + } + private static void ThrowInnerException() + { + throw new Exception("Throwing this exception to see all properties like stacktrace filled"); + } + } +} diff --git a/test/StackifyLib.UnitTests/StackifyLib.UnitTests.csproj b/test/StackifyLib.UnitTests/StackifyLib.UnitTests.csproj index f7cf30a..a4c6e25 100644 --- a/test/StackifyLib.UnitTests/StackifyLib.UnitTests.csproj +++ b/test/StackifyLib.UnitTests/StackifyLib.UnitTests.csproj @@ -16,7 +16,7 @@ - +