From 48565dbae06ee770536d8da0151851b409c2291a Mon Sep 17 00:00:00 2001 From: Roman Ettlinger Date: Tue, 27 Oct 2026 10:30:02 +0100 Subject: [PATCH] Client tests: bound ManagedSession connect retries in failing-factory tests Four ManagedSession tests used MaxRetries = 0, which means unlimited, so the initial connect retried every 1-5 ms until the 5-10 s budget ran out. The mocked factory rethrew one exception instance, whose stack trace grows by a frame per throw, so the log grew quadratically (~124k stack lines in 30 s) and the Linux runner lost communication mid-flood. Use MaxRetries = 1 and create a fresh exception per attempt. Co-Authored-By: Claude Opus 5.5 --- .../Session/ManagedSessionTests.cs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/tests/Opc.Ua.Client.Tests/Session/ManagedSessionTests.cs b/tests/Opc.Ua.Client.Tests/Session/ManagedSessionTests.cs index 06214a55a8..c4780a0f69 100644 --- a/tests/Opc.Ua.Client.Tests/Session/ManagedSessionTests.cs +++ b/tests/Opc.Ua.Client.Tests/Session/ManagedSessionTests.cs @@ -1288,7 +1288,8 @@ namespace Opc.Ua.Client.Tests.ManagedSession .Callback, CancellationToken>( (_, _, _, _, _, _, identity, _, _) => observed = identity) - .ThrowsAsync(new ServiceResultException(StatusCodes.BadCertificateUntrusted)); + .Returns(() => Task.FromException( + new ServiceResultException(StatusCodes.BadCertificateUntrusted))); var provider = new Mock(); @@ -1339,7 +1340,8 @@ namespace Opc.Ua.Client.Tests.ManagedSession .Callback, CancellationToken>( (_, _, _, _, _, _, identity, _, _) => observed = identity) - .ThrowsAsync(new ServiceResultException(StatusCodes.BadCertificateUntrusted)); + .Returns(() => Task.FromException( + new ServiceResultException(StatusCodes.BadCertificateUntrusted))); var provider = new Mock(MockBehavior.Strict); @@ -1365,11 +1367,13 @@ namespace Opc.Ua.Client.Tests.ManagedSession private static ReconnectPolicy NoRetryPolicy() { + // MaxRetries = 0 means unlimited: the connect would retry every + // millisecond until MaxTotalReconnectTime and flood the log. return new ReconnectPolicy { Strategy = BackoffStrategy.Constant, InitialDelay = TimeSpan.FromMilliseconds(1), - MaxRetries = 0, + MaxRetries = 1, JitterFactor = 0.0, MaxTotalReconnectTime = TimeSpan.FromSeconds(5) }; @@ -1483,13 +1487,14 @@ namespace Opc.Ua.Client.Tests.ManagedSession It.IsAny(), It.IsAny>(), It.IsAny())) - .ThrowsAsync(new ServiceResultException(StatusCodes.BadCertificateUntrusted)); + .Returns(() => Task.FromException( + new ServiceResultException(StatusCodes.BadCertificateUntrusted))); var reconnectPolicy = new ReconnectPolicy { Strategy = BackoffStrategy.Constant, InitialDelay = TimeSpan.FromMilliseconds(5), - MaxRetries = 0, + MaxRetries = 1, JitterFactor = 0.0, MaxTotalReconnectTime = TimeSpan.FromSeconds(10) };