From c257ca3b7775844566845fb765e1ede2e2f81288 Mon Sep 17 00:00:00 2001 From: "aicia[bot]" Date: Thu, 4 Jun 2026 03:52:10 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A9=B9=20Fix=20macOS=20compatibility?= =?UTF-8?q?=20and=20adjust=20test=20timing=20for=20reliability?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add macOS platform detection in UnmanagedDisposable to use libSystem.B.dylib. Increase test timeouts and sleep durations in resilience test assets to improve stability on slower systems. --- test/Cuemon.Core.Tests/Assets/UnmanagedDisposable.cs | 5 +++-- test/Cuemon.Diagnostics.Tests/TimeMeasureTest.cs | 4 ++-- .../Assets/ActionTransientOperation.cs | 4 ++-- .../Assets/AsyncActionTransientOperation.cs | 4 ++-- .../Assets/AsyncFuncTransientOperation.cs | 4 ++-- .../Cuemon.Resilience.Tests/Assets/FuncTransientOperation.cs | 4 ++-- test/Cuemon.Resilience.Tests/TransientOperationTest.cs | 4 ++-- 7 files changed, 15 insertions(+), 14 deletions(-) diff --git a/test/Cuemon.Core.Tests/Assets/UnmanagedDisposable.cs b/test/Cuemon.Core.Tests/Assets/UnmanagedDisposable.cs index a0bd688f1..68e5c254b 100644 --- a/test/Cuemon.Core.Tests/Assets/UnmanagedDisposable.cs +++ b/test/Cuemon.Core.Tests/Assets/UnmanagedDisposable.cs @@ -48,7 +48,8 @@ public UnmanagedDisposable() } else if (Environment.OSVersion.Platform == PlatformID.Unix) { - if (NativeLibrary.TryLoad("libc.so.6", GetType().Assembly, DllImportSearchPath.SafeDirectories, out _libHandle)) + var libraryName = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? "libSystem.B.dylib" : "libc.so.6"; + if (NativeLibrary.TryLoad(libraryName, GetType().Assembly, DllImportSearchPath.SafeDirectories, out _libHandle)) { _handle = _libHandle; // i don't know of any native methods on unix } @@ -119,4 +120,4 @@ protected override void OnDisposeUnmanagedResources() #endif } } -} \ No newline at end of file +} diff --git a/test/Cuemon.Diagnostics.Tests/TimeMeasureTest.cs b/test/Cuemon.Diagnostics.Tests/TimeMeasureTest.cs index cd6bd5de2..c6ba16786 100644 --- a/test/Cuemon.Diagnostics.Tests/TimeMeasureTest.cs +++ b/test/Cuemon.Diagnostics.Tests/TimeMeasureTest.cs @@ -11,7 +11,7 @@ namespace Cuemon.Diagnostics public class TimeMeasureTest : Test { private static readonly TimeSpan ExpectedExecutionTime = TimeSpan.FromSeconds(1); - private static readonly TimeSpan Jitter = TimeSpan.FromMilliseconds(100); + private static readonly TimeSpan Jitter = TimeSpan.FromMilliseconds(250); public TimeMeasureTest(ITestOutputHelper output) : base(output) { @@ -1288,4 +1288,4 @@ public void WithAction_ShouldHaveStoppedProfiler_WhenCompleted() Assert.False(profiler.Timer.IsRunning); } } -} \ No newline at end of file +} diff --git a/test/Cuemon.Resilience.Tests/Assets/ActionTransientOperation.cs b/test/Cuemon.Resilience.Tests/Assets/ActionTransientOperation.cs index 73806ba30..43f630557 100644 --- a/test/Cuemon.Resilience.Tests/Assets/ActionTransientOperation.cs +++ b/test/Cuemon.Resilience.Tests/Assets/ActionTransientOperation.cs @@ -26,7 +26,7 @@ public static void TriggerTransientFaultException(Guid id, ConcurrentDictionary< public static void TriggerLatencyException(Guid id, ConcurrentDictionary retryTracker) { - Thread.Sleep(250); + Thread.Sleep(750); retryTracker[id] += 1; throw new HttpRequestException(); } @@ -38,4 +38,4 @@ public static void FailWithNonTransientFaultException(Guid id, int expectedRetry throw new InvalidOperationException(); } } -} \ No newline at end of file +} diff --git a/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs b/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs index 79233835d..da2817078 100644 --- a/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs +++ b/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs @@ -29,7 +29,7 @@ public static Task TriggerTransientFaultExceptionAsync(Guid id, ConcurrentDictio public static Task TriggerLatencyExceptionAsync(Guid id, ConcurrentDictionary retryTracker, CancellationToken ct) { - Thread.Sleep(250); + Thread.Sleep(750); retryTracker[id] += 1; throw new HttpRequestException(); } @@ -41,4 +41,4 @@ public static Task FailWithNonTransientFaultExceptionAsync(Guid id, int expected throw new InvalidOperationException(); } } -} \ No newline at end of file +} diff --git a/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs b/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs index 21cd89b3f..f336526cd 100644 --- a/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs +++ b/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs @@ -29,7 +29,7 @@ public static Task TriggerTransientFaultExceptionAsync(Guid id, Concurre public static Task TriggerLatencyExceptionAsync(Guid id, ConcurrentDictionary retryTracker, CancellationToken ct) { - Thread.Sleep(350); + Thread.Sleep(750); retryTracker[id] += 1; throw new HttpRequestException(); } @@ -41,4 +41,4 @@ public static Task FailWithNonTransientFaultExceptionAsync(Guid id, int throw new InvalidOperationException(); } } -} \ No newline at end of file +} diff --git a/test/Cuemon.Resilience.Tests/Assets/FuncTransientOperation.cs b/test/Cuemon.Resilience.Tests/Assets/FuncTransientOperation.cs index d0279f572..b17e16fef 100644 --- a/test/Cuemon.Resilience.Tests/Assets/FuncTransientOperation.cs +++ b/test/Cuemon.Resilience.Tests/Assets/FuncTransientOperation.cs @@ -28,7 +28,7 @@ public static string TriggerTransientFaultException(Guid id, ConcurrentDictionar public static string TriggerLatencyException(Guid id, ConcurrentDictionary retryTracker) { - Thread.Sleep(250); + Thread.Sleep(750); retryTracker[id] += 1; throw new HttpRequestException(); } @@ -40,4 +40,4 @@ public static string FailWithNonTransientFaultException(Guid id, int expectedRet throw new InvalidOperationException(); } } -} \ No newline at end of file +} diff --git a/test/Cuemon.Resilience.Tests/TransientOperationTest.cs b/test/Cuemon.Resilience.Tests/TransientOperationTest.cs index 644dbe548..2da35fb97 100644 --- a/test/Cuemon.Resilience.Tests/TransientOperationTest.cs +++ b/test/Cuemon.Resilience.Tests/TransientOperationTest.cs @@ -21,7 +21,7 @@ public class TransientOperationTest : Test private const int NormalRunIncrement = 1; private const int DescriptiveExceptionCauseIncrement = 1; private static readonly TimeSpan ExpectedRecoveryWaitTime = TimeSpan.FromSeconds(1); - private static readonly TimeSpan ExpectedMaximumAllowedLatency = TimeSpan.FromMilliseconds(250); + private static readonly TimeSpan ExpectedMaximumAllowedLatency = TimeSpan.FromMilliseconds(500); public TransientOperationTest(ITestOutputHelper output) : base(output) { @@ -382,4 +382,4 @@ public async Task WithFuncAsync_ShouldTriggerInvalidOperationException() Assert.Equal(ExpectedRetryAttempts, _retryTracker[id]); } } -} \ No newline at end of file +} From 198fd32d2676212a1ae705a5ecbe3d728057d562 Mon Sep 17 00:00:00 2001 From: gimlichael Date: Thu, 4 Jun 2026 13:23:20 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A9=B9=20fix=20latency=20exception=20?= =?UTF-8?q?handling=20to=20use=20async/await=20pattern?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/AsyncActionTransientOperation.cs | 4 ++-- .../Assets/AsyncFuncTransientOperation.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs b/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs index da2817078..a3651e162 100644 --- a/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs +++ b/test/Cuemon.Resilience.Tests/Assets/AsyncActionTransientOperation.cs @@ -27,9 +27,9 @@ public static Task TriggerTransientFaultExceptionAsync(Guid id, ConcurrentDictio throw new HttpRequestException(); } - public static Task TriggerLatencyExceptionAsync(Guid id, ConcurrentDictionary retryTracker, CancellationToken ct) + public static async Task TriggerLatencyExceptionAsync(Guid id, ConcurrentDictionary retryTracker, CancellationToken ct) { - Thread.Sleep(750); + await Task.Delay(750, ct); retryTracker[id] += 1; throw new HttpRequestException(); } diff --git a/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs b/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs index f336526cd..41e095e89 100644 --- a/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs +++ b/test/Cuemon.Resilience.Tests/Assets/AsyncFuncTransientOperation.cs @@ -27,9 +27,9 @@ public static Task TriggerTransientFaultExceptionAsync(Guid id, Concurre throw new HttpRequestException(); } - public static Task TriggerLatencyExceptionAsync(Guid id, ConcurrentDictionary retryTracker, CancellationToken ct) + public static async Task TriggerLatencyExceptionAsync(Guid id, ConcurrentDictionary retryTracker, CancellationToken ct) { - Thread.Sleep(750); + await Task.Delay(750, ct); retryTracker[id] += 1; throw new HttpRequestException(); }