From b797451e2ba7547beefd5a85581fdc481c079030 Mon Sep 17 00:00:00 2001 From: Dominion Date: Sat, 22 Apr 2023 10:39:34 -0400 Subject: [PATCH] Add better error handling to SwarmRpcMapper --- .../Swarm/SwarmRpcMapper.cs | 21 ++++++++++++------- .../Swarm/TestableSwarmNode.cs | 3 +-- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs b/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs index 985c868e19..8eb8d9a249 100644 --- a/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs +++ b/tests/Tgstation.Server.Host.Tests/Swarm/SwarmRpcMapper.cs @@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Routing; +using Microsoft.Extensions.Logging; using Microsoft.VisualStudio.TestTools.UnitTesting; using Moq; @@ -27,26 +28,26 @@ namespace Tgstation.Server.Host.Swarm.Tests { public bool AsyncRequests { get; set; } - readonly Stack incomingRegistrationIds = new(); + readonly ILogger logger; - readonly List serverErrors = new(); + readonly Stack incomingRegistrationIds = new(); List<(SwarmConfiguration, TestableSwarmNode)> configToNodes; - public SwarmRpcMapper(Mock clientMock) + int serverErrorCount; + + public SwarmRpcMapper(Mock clientMock, ILogger logger) { clientMock .Setup(x => x.SendAsync(It.IsNotNull(), It.IsAny())) .Returns(MapRequest); + this.logger = logger; AsyncRequests = true; } public void Dispose() { - if (serverErrors.Count > 1) - throw new AggregateException(serverErrors); - else if (serverErrors.Count == 1) - throw serverErrors[0]; + Assert.AreEqual(0, serverErrorCount); } public Guid GetRequestRegistrationId(HttpRequest request) => incomingRegistrationIds.Peek(); @@ -172,7 +173,11 @@ namespace Tgstation.Server.Host.Swarm.Tests catch (Exception ex) { if (ex is not OperationCanceledException) - serverErrors.Add(ex); + { + logger.LogCritical(ex, "Error in request to {nodeId}!", config.Identifier); + ++serverErrorCount; + } + response.Dispose(); throw; } diff --git a/tests/Tgstation.Server.Host.Tests/Swarm/TestableSwarmNode.cs b/tests/Tgstation.Server.Host.Tests/Swarm/TestableSwarmNode.cs index 060d1d49ac..258c30f421 100644 --- a/tests/Tgstation.Server.Host.Tests/Swarm/TestableSwarmNode.cs +++ b/tests/Tgstation.Server.Host.Tests/Swarm/TestableSwarmNode.cs @@ -104,8 +104,7 @@ namespace Tgstation.Server.Host.Swarm.Tests var mockServerUpdater = new Mock(); - RpcMapper = new SwarmRpcMapper(mockHttpClient); - + RpcMapper = new SwarmRpcMapper(mockHttpClient, loggerFactory.CreateLogger($"SwarmRpcMapper-{swarmConfiguration.Identifier}")); mockServerUpdater .Setup(x => x.BeginUpdate(It.IsNotNull(), It.IsNotNull(), It.IsAny()))