diff --git a/NatsDotNet.slnx b/NatsDotNet.slnx index bbb6ad8..f7a2aab 100644 --- a/NatsDotNet.slnx +++ b/NatsDotNet.slnx @@ -12,6 +12,7 @@ + diff --git a/src/NATS.Server/NATS.Server.csproj b/src/NATS.Server/NATS.Server.csproj index 5a7783e..d5fce43 100644 --- a/src/NATS.Server/NATS.Server.csproj +++ b/src/NATS.Server/NATS.Server.csproj @@ -7,6 +7,7 @@ + diff --git a/tests/NATS.Server.Tests/EventSystemTests.cs b/tests/NATS.Server.Monitoring.Tests/EventSystemTests.cs similarity index 88% rename from tests/NATS.Server.Tests/EventSystemTests.cs rename to tests/NATS.Server.Monitoring.Tests/EventSystemTests.cs index 4924bc8..6e55e08 100644 --- a/tests/NATS.Server.Tests/EventSystemTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/EventSystemTests.cs @@ -1,8 +1,9 @@ using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Events; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class EventSystemTests { @@ -105,17 +106,8 @@ public class EventSystemTests private static NatsServer CreateTestServer() { - var port = GetFreePort(); + var port = TestPortAllocator.GetFreePort(); return new NatsServer(new NatsOptions { Port = port }, NullLoggerFactory.Instance); } - private static int GetFreePort() - { - using var sock = new System.Net.Sockets.Socket( - System.Net.Sockets.AddressFamily.InterNetwork, - System.Net.Sockets.SocketType.Stream, - System.Net.Sockets.ProtocolType.Tcp); - sock.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Loopback, 0)); - return ((System.Net.IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Events/AuthErrorEventTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/AuthErrorEventTests.cs similarity index 95% rename from tests/NATS.Server.Tests/Events/AuthErrorEventTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/AuthErrorEventTests.cs index d7c5f40..2cc9cda 100644 --- a/tests/NATS.Server.Tests/Events/AuthErrorEventTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/AuthErrorEventTests.cs @@ -9,8 +9,9 @@ using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server; using NATS.Server.Events; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests for , @@ -27,7 +28,7 @@ public class AuthErrorEventTests : IAsyncLifetime public async Task InitializeAsync() { - _port = GetFreePort(); + _port = TestPortAllocator.GetFreePort(); _server = new NatsServer(new NatsOptions { Port = _port }, NullLoggerFactory.Instance); _ = _server.StartAsync(CancellationToken.None); await _server.WaitForReadyAsync(); @@ -39,15 +40,6 @@ public class AuthErrorEventTests : IAsyncLifetime _server.Dispose(); } - private static int GetFreePort() - { - using var sock = new System.Net.Sockets.Socket( - System.Net.Sockets.AddressFamily.InterNetwork, - System.Net.Sockets.SocketType.Stream, - System.Net.Sockets.ProtocolType.Tcp); - sock.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Loopback, 0)); - return ((System.Net.IPEndPoint)sock.LocalEndPoint!).Port; - } // ======================================================================== // AuthErrorEventCount diff --git a/tests/NATS.Server.Tests/Events/EventApiAndSubjectsParityBatch2Tests.cs b/tests/NATS.Server.Monitoring.Tests/Events/EventApiAndSubjectsParityBatch2Tests.cs similarity index 99% rename from tests/NATS.Server.Tests/Events/EventApiAndSubjectsParityBatch2Tests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/EventApiAndSubjectsParityBatch2Tests.cs index 1d90416..392ddae 100644 --- a/tests/NATS.Server.Tests/Events/EventApiAndSubjectsParityBatch2Tests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/EventApiAndSubjectsParityBatch2Tests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; public class EventApiAndSubjectsParityBatch2Tests { diff --git a/tests/NATS.Server.Tests/Events/EventCompressionTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/EventCompressionTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Events/EventCompressionTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/EventCompressionTests.cs index 87a328e..fcffa9e 100644 --- a/tests/NATS.Server.Tests/Events/EventCompressionTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/EventCompressionTests.cs @@ -4,7 +4,7 @@ using System.Text; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests for — S2/Snappy compression for system event payloads. diff --git a/tests/NATS.Server.Tests/Events/EventGoParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/EventGoParityTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Events/EventGoParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/EventGoParityTests.cs index 7b847fe..fa6182b 100644 --- a/tests/NATS.Server.Tests/Events/EventGoParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/EventGoParityTests.cs @@ -9,7 +9,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Parity tests ported from Go server/events_test.go exercising @@ -278,7 +278,7 @@ public class EventGoParityTests var data = new ServerStatsData { SlowConsumers = 10, - SlowConsumerStats = new SlowConsumersStats + SlowConsumerStats = new NATS.Server.Events.SlowConsumersStats { Clients = 5, Routes = 2, @@ -302,7 +302,7 @@ public class EventGoParityTests var data = new ServerStatsData { StaleConnections = 7, - StaleConnectionStats = new StaleConnectionStats + StaleConnectionStats = new NATS.Server.Events.StaleConnectionStats { Clients = 3, Routes = 1, diff --git a/tests/NATS.Server.Tests/Events/EventPayloadTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/EventPayloadTests.cs similarity index 98% rename from tests/NATS.Server.Tests/Events/EventPayloadTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/EventPayloadTests.cs index 240595f..0dbcf23 100644 --- a/tests/NATS.Server.Tests/Events/EventPayloadTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/EventPayloadTests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests that all event DTOs have complete JSON fields matching Go's output. @@ -292,9 +292,9 @@ public class EventPayloadTests InBytes = 40_000, OutBytes = 50_000, SlowConsumers = 2, - SlowConsumerStats = new SlowConsumersStats { Clients = 1, Routes = 1 }, + SlowConsumerStats = new NATS.Server.Events.SlowConsumersStats { Clients = 1, Routes = 1 }, StaleConnections = 3, - StaleConnectionStats = new StaleConnectionStats { Clients = 2, Leafs = 1 }, + StaleConnectionStats = new NATS.Server.Events.StaleConnectionStats { Clients = 2, Leafs = 1 }, ActiveServers = 3, Routes = [new RouteStat { Id = 1, Name = "r1", Sent = new DataStats { Msgs = 10 }, Received = new DataStats { Msgs = 5 }, Pending = 0 }], Gateways = [new GatewayStat { Id = 1, Name = "gw1", Sent = new DataStats { Msgs = 20 }, Received = new DataStats { Msgs = 15 }, InboundConnections = 2 }], diff --git a/tests/NATS.Server.Tests/Events/EventServerInfoCapabilityParityBatch1Tests.cs b/tests/NATS.Server.Monitoring.Tests/Events/EventServerInfoCapabilityParityBatch1Tests.cs similarity index 96% rename from tests/NATS.Server.Tests/Events/EventServerInfoCapabilityParityBatch1Tests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/EventServerInfoCapabilityParityBatch1Tests.cs index 8308c92..d382485 100644 --- a/tests/NATS.Server.Tests/Events/EventServerInfoCapabilityParityBatch1Tests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/EventServerInfoCapabilityParityBatch1Tests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; public class EventServerInfoCapabilityParityBatch1Tests { diff --git a/tests/NATS.Server.Tests/Events/FullEventPayloadTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/FullEventPayloadTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Events/FullEventPayloadTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/FullEventPayloadTests.cs index d7d7b01..59f1c04 100644 --- a/tests/NATS.Server.Tests/Events/FullEventPayloadTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/FullEventPayloadTests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests that EventBuilder produces fully-populated system event messages diff --git a/tests/NATS.Server.Tests/Events/OcspEventTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/OcspEventTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Events/OcspEventTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/OcspEventTests.cs index 43f07ec..58e7107 100644 --- a/tests/NATS.Server.Tests/Events/OcspEventTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/OcspEventTests.cs @@ -8,7 +8,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests for , , diff --git a/tests/NATS.Server.Tests/Events/RemoteServerEventTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/RemoteServerEventTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Events/RemoteServerEventTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/RemoteServerEventTests.cs index 3e3800f..8373e6d 100644 --- a/tests/NATS.Server.Tests/Events/RemoteServerEventTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/RemoteServerEventTests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Events; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests for remote server and leaf node event DTOs and subject constants. diff --git a/tests/NATS.Server.Tests/Events/ServerEventTests.cs b/tests/NATS.Server.Monitoring.Tests/Events/ServerEventTests.cs similarity index 93% rename from tests/NATS.Server.Tests/Events/ServerEventTests.cs rename to tests/NATS.Server.Monitoring.Tests/Events/ServerEventTests.cs index 063e939..f0c9cb5 100644 --- a/tests/NATS.Server.Tests/Events/ServerEventTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Events/ServerEventTests.cs @@ -5,8 +5,9 @@ using Microsoft.Extensions.Logging.Abstractions; using NATS.Server; using NATS.Server.Auth; using NATS.Server.Events; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Events; +namespace NATS.Server.Monitoring.Tests.Events; /// /// Tests for server lifecycle events, stats tracking, advisory messages, and @@ -21,7 +22,7 @@ public class ServerEventTests : IAsyncLifetime public ServerEventTests() { - _port = GetFreePort(); + _port = TestPortAllocator.GetFreePort(); _server = new NatsServer(new NatsOptions { Port = _port }, NullLoggerFactory.Instance); } @@ -37,12 +38,6 @@ public class ServerEventTests : IAsyncLifetime _server.Dispose(); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } private async Task ConnectAndHandshakeAsync() { @@ -54,24 +49,10 @@ public class ServerEventTests : IAsyncLifetime // Send CONNECT + PING await sock.SendAsync(Encoding.ASCII.GetBytes("CONNECT {}\r\nPING\r\n")); // Read PONG (may include -ERR or other lines) - await ReadUntilAsync(sock, "PONG"); + await SocketTestHelper.ReadUntilAsync(sock, "PONG"); return sock; } - private static async Task ReadUntilAsync(Socket sock, string expected, int timeoutMs = 5000) - { - using var cts = new CancellationTokenSource(timeoutMs); - var sb = new StringBuilder(); - var buf = new byte[4096]; - while (!sb.ToString().Contains(expected)) - { - var n = await sock.ReceiveAsync(buf, SocketFlags.None, cts.Token); - if (n == 0) break; - sb.Append(Encoding.ASCII.GetString(buf, 0, n)); - } - return sb.ToString(); - } - // ----------------------------------------------------------------------- // Server lifecycle events // ----------------------------------------------------------------------- @@ -182,7 +163,7 @@ public class ServerEventTests : IAsyncLifetime await sock.SendAsync(pub); // Flush via PING/PONG await sock.SendAsync(Encoding.ASCII.GetBytes("PING\r\n")); - await ReadUntilAsync(sock, "PONG"); + await SocketTestHelper.ReadUntilAsync(sock, "PONG"); var afterMsgs = Interlocked.Read(ref _server.Stats.InMsgs); var afterBytes = Interlocked.Read(ref _server.Stats.InBytes); @@ -203,17 +184,17 @@ public class ServerEventTests : IAsyncLifetime // Subscribe await sub.SendAsync(Encoding.ASCII.GetBytes("SUB test.out 1\r\nPING\r\n")); - await ReadUntilAsync(sub, "PONG"); + await SocketTestHelper.ReadUntilAsync(sub, "PONG"); var beforeOut = Interlocked.Read(ref _server.Stats.OutMsgs); var payload = "World"u8.ToArray(); await pub.SendAsync(Encoding.ASCII.GetBytes($"PUB test.out {payload.Length}\r\nWorld\r\n")); await pub.SendAsync(Encoding.ASCII.GetBytes("PING\r\n")); - await ReadUntilAsync(pub, "PONG"); + await SocketTestHelper.ReadUntilAsync(pub, "PONG"); // Give delivery loop time to flush - await ReadUntilAsync(sub, "World", timeoutMs: 2000); + await SocketTestHelper.ReadUntilAsync(sub, "World", timeoutMs: 2000); var afterOut = Interlocked.Read(ref _server.Stats.OutMsgs); (afterOut - beforeOut).ShouldBeGreaterThanOrEqualTo(1L); diff --git a/tests/NATS.Server.Tests/JszMonitorTests.cs b/tests/NATS.Server.Monitoring.Tests/JszMonitorTests.cs similarity index 89% rename from tests/NATS.Server.Tests/JszMonitorTests.cs rename to tests/NATS.Server.Monitoring.Tests/JszMonitorTests.cs index cb05804..3e8e918 100644 --- a/tests/NATS.Server.Tests/JszMonitorTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/JszMonitorTests.cs @@ -5,8 +5,9 @@ using System.Text; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Configuration; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class JszMonitorTests { @@ -36,8 +37,8 @@ internal sealed class JetStreamMonitoringFixture : IAsyncDisposable public static async Task StartWithStreamAndConsumerAsync() { - var natsPort = GetFreePort(); - var monitorPort = GetFreePort(); + var natsPort = TestPortAllocator.GetFreePort(); + var monitorPort = TestPortAllocator.GetFreePort(); var options = new NatsOptions { Host = "127.0.0.1", @@ -103,10 +104,4 @@ internal sealed class JetStreamMonitoringFixture : IAsyncDisposable throw new TimeoutException("Monitoring endpoint did not become healthy."); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Loopback, 0)); - return ((System.Net.IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/MonitorClusterEndpointTests.cs b/tests/NATS.Server.Monitoring.Tests/MonitorClusterEndpointTests.cs similarity index 88% rename from tests/NATS.Server.Tests/MonitorClusterEndpointTests.cs rename to tests/NATS.Server.Monitoring.Tests/MonitorClusterEndpointTests.cs index f529f94..e1e440b 100644 --- a/tests/NATS.Server.Tests/MonitorClusterEndpointTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/MonitorClusterEndpointTests.cs @@ -2,8 +2,9 @@ using System.Net; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Configuration; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class MonitorClusterEndpointTests { @@ -35,7 +36,7 @@ internal sealed class MonitorFixture : IAsyncDisposable public static async Task StartClusterEnabledAsync() { - var monitorPort = GetFreePort(); + var monitorPort = TestPortAllocator.GetFreePort(); var options = new NatsOptions { Host = "127.0.0.1", @@ -96,10 +97,4 @@ internal sealed class MonitorFixture : IAsyncDisposable _cts.Dispose(); } - private static int GetFreePort() - { - using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - socket.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)socket.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/MonitorModelTests.cs b/tests/NATS.Server.Monitoring.Tests/MonitorModelTests.cs similarity index 97% rename from tests/NATS.Server.Tests/MonitorModelTests.cs rename to tests/NATS.Server.Monitoring.Tests/MonitorModelTests.cs index 690afd5..4de7c10 100644 --- a/tests/NATS.Server.Tests/MonitorModelTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/MonitorModelTests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Monitoring; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class MonitorModelTests { diff --git a/tests/NATS.Server.Tests/MonitorTests.cs b/tests/NATS.Server.Monitoring.Tests/MonitorTests.cs similarity index 95% rename from tests/NATS.Server.Tests/MonitorTests.cs rename to tests/NATS.Server.Monitoring.Tests/MonitorTests.cs index 0993c41..93f25f9 100644 --- a/tests/NATS.Server.Tests/MonitorTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/MonitorTests.cs @@ -7,7 +7,7 @@ using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class MonitorTests : IAsyncLifetime { @@ -19,8 +19,8 @@ public class MonitorTests : IAsyncLifetime public MonitorTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -289,12 +289,6 @@ public class MonitorTests : IAsyncLifetime varz.Mqtt.MaxAckPending.ShouldBe((ushort)0); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } public class MonitorTlsTests : IAsyncLifetime @@ -309,8 +303,8 @@ public class MonitorTlsTests : IAsyncLifetime public MonitorTlsTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); (_certPath, _keyPath) = TestCertHelper.GenerateTestCertFiles(); _server = new NatsServer( new NatsOptions @@ -375,10 +369,4 @@ public class MonitorTlsTests : IAsyncLifetime conn.TlsCipherSuite.ShouldNotBeNullOrEmpty(); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/ClosedConnectionRingBufferTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ClosedConnectionRingBufferTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Monitoring/ClosedConnectionRingBufferTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ClosedConnectionRingBufferTests.cs index aaeda9d..dd9b721 100644 --- a/tests/NATS.Server.Tests/Monitoring/ClosedConnectionRingBufferTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ClosedConnectionRingBufferTests.cs @@ -4,7 +4,7 @@ using NATS.Server.Monitoring; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; public class ClosedConnectionRingBufferTests { diff --git a/tests/NATS.Server.Tests/Monitoring/ClosedReasonTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ClosedReasonTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Monitoring/ClosedReasonTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ClosedReasonTests.cs index c6eb8a1..8d2899e 100644 --- a/tests/NATS.Server.Tests/Monitoring/ClosedReasonTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ClosedReasonTests.cs @@ -5,7 +5,7 @@ using NATS.Server.Monitoring; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; public class ClosedReasonTests { diff --git a/tests/NATS.Server.Tests/Monitoring/ConnzAccountFilterTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzAccountFilterTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Monitoring/ConnzAccountFilterTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzAccountFilterTests.cs index 786069c..bf91a68 100644 --- a/tests/NATS.Server.Tests/Monitoring/ConnzAccountFilterTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzAccountFilterTests.cs @@ -1,6 +1,6 @@ using NATS.Server.Monitoring; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Unit tests for account-scoped /connz filtering (Gap 10.2). diff --git a/tests/NATS.Server.Tests/Monitoring/ConnzFilterTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzFilterTests.cs similarity index 91% rename from tests/NATS.Server.Tests/Monitoring/ConnzFilterTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzFilterTests.cs index 17af8b0..e2dedee 100644 --- a/tests/NATS.Server.Tests/Monitoring/ConnzFilterTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzFilterTests.cs @@ -6,8 +6,9 @@ using Microsoft.Extensions.Logging.Abstractions; using NATS.Server; using NATS.Server.Auth; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Tests for ConnzHandler filtering, sorting, pagination, and closed connection @@ -26,7 +27,7 @@ public class ConnzFilterTests : IAsyncLifetime { _opts = new NatsOptions { - Port = GetFreePort(), + Port = TestPortAllocator.GetFreePort(), MaxClosedClients = 100, Users = [ @@ -54,12 +55,6 @@ public class ConnzFilterTests : IAsyncLifetime _server.Dispose(); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } private async Task ConnectAsync(string user, string? subjectToSubscribe = null) { @@ -79,7 +74,7 @@ public class ConnzFilterTests : IAsyncLifetime } await sock.SendAsync("PING\r\n"u8.ToArray()); - await ReadUntilAsync(sock, "PONG"); + await SocketTestHelper.ReadUntilAsync(sock, "PONG"); return sock; } @@ -395,26 +390,4 @@ public class ConnzFilterTests : IAsyncLifetime single.Conns[0].Stop.ShouldNotBeNull(); } - private static async Task ReadUntilAsync(Socket sock, string expected) - { - var buf = new byte[4096]; - var all = new StringBuilder(); - var deadline = DateTime.UtcNow.AddSeconds(5); - while (DateTime.UtcNow < deadline) - { - if (sock.Available > 0) - { - var n = await sock.ReceiveAsync(buf, SocketFlags.None); - all.Append(Encoding.ASCII.GetString(buf, 0, n)); - if (all.ToString().Contains(expected)) - return; - } - else - { - await Task.Delay(10); - } - } - - throw new TimeoutException($"Did not receive '{expected}' within 5 seconds. Got: {all}"); - } } diff --git a/tests/NATS.Server.Tests/Monitoring/ConnzParityFieldTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityFieldTests.cs similarity index 97% rename from tests/NATS.Server.Tests/Monitoring/ConnzParityFieldTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityFieldTests.cs index b62f2fb..466e283 100644 --- a/tests/NATS.Server.Tests/Monitoring/ConnzParityFieldTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityFieldTests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using System.Text; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class ConnzParityFieldTests { diff --git a/tests/NATS.Server.Tests/Monitoring/ConnzParityFilterTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityFilterTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Monitoring/ConnzParityFilterTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityFilterTests.cs index 69c8bd1..4d8039c 100644 --- a/tests/NATS.Server.Tests/Monitoring/ConnzParityFilterTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityFilterTests.cs @@ -6,7 +6,7 @@ using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Auth; using NATS.Server.Monitoring; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class ConnzParityFilterTests { diff --git a/tests/NATS.Server.Tests/Monitoring/ConnzParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityTests.cs similarity index 94% rename from tests/NATS.Server.Tests/Monitoring/ConnzParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityTests.cs index eab5e87..960ae49 100644 --- a/tests/NATS.Server.Tests/Monitoring/ConnzParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzParityTests.cs @@ -7,8 +7,9 @@ using System.Net.Http.Json; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class ConnzParityTests : IAsyncLifetime { @@ -20,8 +21,8 @@ public class ConnzParityTests : IAsyncLifetime public ConnzParityTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -167,10 +168,4 @@ public class ConnzParityTests : IAsyncLifetime } } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/ConnzSortTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzSortTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Monitoring/ConnzSortTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzSortTests.cs index 987bfee..df1b145 100644 --- a/tests/NATS.Server.Tests/Monitoring/ConnzSortTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/ConnzSortTests.cs @@ -1,6 +1,6 @@ using NATS.Server.Monitoring; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Unit tests for ConnzSortOption enum, ConnzSorter.Parse, and ConnzSorter.Sort. diff --git a/tests/NATS.Server.Tests/Monitoring/HealthzParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/HealthzParityTests.cs similarity index 87% rename from tests/NATS.Server.Tests/Monitoring/HealthzParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/HealthzParityTests.cs index f838b33..2ae3f1c 100644 --- a/tests/NATS.Server.Tests/Monitoring/HealthzParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/HealthzParityTests.cs @@ -4,8 +4,9 @@ using System.Net; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class HealthzParityTests : IAsyncLifetime { @@ -16,7 +17,7 @@ public class HealthzParityTests : IAsyncLifetime public HealthzParityTests() { - _monitorPort = GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = 0, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -73,10 +74,4 @@ public class HealthzParityTests : IAsyncLifetime body.ShouldContain("ok"); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitorConnzTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorConnzTests.cs similarity index 98% rename from tests/NATS.Server.Tests/Monitoring/MonitorConnzTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorConnzTests.cs index 7e07fe5..5b30c97 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitorConnzTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorConnzTests.cs @@ -26,8 +26,9 @@ using System.Net.Http.Json; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Tests covering /connz endpoint behavior, ported from the Go server's monitor_test.go. @@ -42,8 +43,8 @@ public class MonitorConnzTests : IAsyncLifetime public MonitorConnzTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -816,10 +817,4 @@ public class MonitorConnzTests : IAsyncLifetime return sock; } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitorGoParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorGoParityTests.cs similarity index 99% rename from tests/NATS.Server.Tests/Monitoring/MonitorGoParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorGoParityTests.cs index d83ff31..dba668d 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitorGoParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorGoParityTests.cs @@ -10,8 +10,9 @@ using System.Net.Sockets; using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Parity tests ported from Go server/monitor_test.go exercising /connz @@ -474,8 +475,8 @@ public class MonitorGoParityEndpointTests : IAsyncLifetime public MonitorGoParityEndpointTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -1808,10 +1809,4 @@ public class MonitorGoParityEndpointTests : IAsyncLifetime } } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitorRoutezTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorRoutezTests.cs similarity index 95% rename from tests/NATS.Server.Tests/Monitoring/MonitorRoutezTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorRoutezTests.cs index 5d4f56f..10b7a8f 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitorRoutezTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorRoutezTests.cs @@ -11,8 +11,9 @@ using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Configuration; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Tests covering /routez endpoint behavior, ported from the Go server's monitor_test.go. @@ -184,7 +185,7 @@ internal sealed class RoutezFixture : IAsyncDisposable public static async Task StartAsync() { - var monitorPort = GetFreePort(); + var monitorPort = TestPortAllocator.GetFreePort(); var options = new NatsOptions { Host = "127.0.0.1", @@ -197,7 +198,7 @@ internal sealed class RoutezFixture : IAsyncDisposable public static async Task StartWithClusterAsync() { - var monitorPort = GetFreePort(); + var monitorPort = TestPortAllocator.GetFreePort(); var options = new NatsOptions { Host = "127.0.0.1", @@ -259,10 +260,4 @@ internal sealed class RoutezFixture : IAsyncDisposable _cts.Dispose(); } - private static int GetFreePort() - { - using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - socket.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)socket.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitorStackszTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorStackszTests.cs similarity index 97% rename from tests/NATS.Server.Tests/Monitoring/MonitorStackszTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorStackszTests.cs index a71e232..57180bc 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitorStackszTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorStackszTests.cs @@ -11,8 +11,9 @@ using System.Net.Sockets; using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Tests covering miscellaneous monitoring endpoints: root, accountz, accstatz, @@ -29,8 +30,8 @@ public class MonitorStackszTests : IAsyncLifetime public MonitorStackszTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -346,10 +347,4 @@ public class MonitorStackszTests : IAsyncLifetime body.ShouldContain("leafs"); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitorSubszTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorSubszTests.cs similarity index 97% rename from tests/NATS.Server.Tests/Monitoring/MonitorSubszTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorSubszTests.cs index f640b2f..1fd4f1e 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitorSubszTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorSubszTests.cs @@ -11,8 +11,9 @@ using System.Net.Sockets; using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Tests covering /subz (subscriptionsz) endpoint behavior, @@ -28,8 +29,8 @@ public class MonitorSubszTests : IAsyncLifetime public MonitorSubszTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -350,10 +351,4 @@ public class MonitorSubszTests : IAsyncLifetime return sock; } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitorVarzTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorVarzTests.cs similarity index 97% rename from tests/NATS.Server.Tests/Monitoring/MonitorVarzTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorVarzTests.cs index e389767..0c3a76b 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitorVarzTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitorVarzTests.cs @@ -14,8 +14,9 @@ using System.Net.Sockets; using System.Text.Json; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; /// /// Tests covering /varz endpoint behavior, ported from the Go server's monitor_test.go. @@ -30,8 +31,8 @@ public class MonitorVarzTests : IAsyncLifetime public MonitorVarzTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -467,7 +468,7 @@ public class MonitorVarzTests : IAsyncLifetime [Fact] public async Task Monitor_not_accessible_when_port_not_configured() { - var natsPort = GetFreePort(); + var natsPort = TestPortAllocator.GetFreePort(); var server = new NatsServer( new NatsOptions { Port = natsPort, MonitorPort = 0 }, NullLoggerFactory.Instance); @@ -517,10 +518,4 @@ public class MonitorVarzTests : IAsyncLifetime return $"{(int)ts.TotalSeconds}s"; } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/MonitoringHealthAndSortParityBatch1Tests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitoringHealthAndSortParityBatch1Tests.cs similarity index 95% rename from tests/NATS.Server.Tests/Monitoring/MonitoringHealthAndSortParityBatch1Tests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/MonitoringHealthAndSortParityBatch1Tests.cs index ab24e07..4514d40 100644 --- a/tests/NATS.Server.Tests/Monitoring/MonitoringHealthAndSortParityBatch1Tests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/MonitoringHealthAndSortParityBatch1Tests.cs @@ -1,7 +1,7 @@ using System.Text.Json; using NATS.Server.Monitoring; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; public class MonitoringHealthAndSortParityBatch1Tests { diff --git a/tests/NATS.Server.Tests/Monitoring/PprofEndpointTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/PprofEndpointTests.cs similarity index 87% rename from tests/NATS.Server.Tests/Monitoring/PprofEndpointTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/PprofEndpointTests.cs index 2543d90..dd4bc93 100644 --- a/tests/NATS.Server.Tests/Monitoring/PprofEndpointTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/PprofEndpointTests.cs @@ -1,8 +1,9 @@ using System.Net; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class PprofEndpointTests { @@ -32,7 +33,7 @@ internal sealed class PprofMonitorFixture : IAsyncDisposable public static async Task StartWithProfilingAsync() { - var monitorPort = GetFreePort(); + var monitorPort = TestPortAllocator.GetFreePort(); var options = new NatsOptions { Host = "127.0.0.1", @@ -83,10 +84,4 @@ internal sealed class PprofMonitorFixture : IAsyncDisposable _cts.Dispose(); } - private static int GetFreePort() - { - using var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - socket.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)socket.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/PprofRuntimeParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/PprofRuntimeParityTests.cs similarity index 92% rename from tests/NATS.Server.Tests/Monitoring/PprofRuntimeParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/PprofRuntimeParityTests.cs index fc5ba15..8b4a8ae 100644 --- a/tests/NATS.Server.Tests/Monitoring/PprofRuntimeParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/PprofRuntimeParityTests.cs @@ -1,6 +1,6 @@ using System.Text.Json; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; public class PprofRuntimeParityTests { diff --git a/tests/NATS.Server.Tests/Monitoring/TlsPeerCertParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/TlsPeerCertParityTests.cs similarity index 97% rename from tests/NATS.Server.Tests/Monitoring/TlsPeerCertParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/TlsPeerCertParityTests.cs index 6599228..8ca44fc 100644 --- a/tests/NATS.Server.Tests/Monitoring/TlsPeerCertParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/TlsPeerCertParityTests.cs @@ -3,7 +3,7 @@ using System.Security.Cryptography.X509Certificates; using System.Text.Json; using NATS.Server.Monitoring; -namespace NATS.Server.Tests.Monitoring; +namespace NATS.Server.Monitoring.Tests.Monitoring; public class TlsPeerCertParityTests { diff --git a/tests/NATS.Server.Tests/Monitoring/VarzParityTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/VarzParityTests.cs similarity index 92% rename from tests/NATS.Server.Tests/Monitoring/VarzParityTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/VarzParityTests.cs index bc87802..34e0e64 100644 --- a/tests/NATS.Server.Tests/Monitoring/VarzParityTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/VarzParityTests.cs @@ -6,8 +6,9 @@ using System.Net.Http.Json; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class VarzParityTests : IAsyncLifetime { @@ -19,8 +20,8 @@ public class VarzParityTests : IAsyncLifetime public VarzParityTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -128,10 +129,4 @@ public class VarzParityTests : IAsyncLifetime varz.InBytes.ShouldBeGreaterThanOrEqualTo(5L); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/Monitoring/VarzSlowConsumerBreakdownTests.cs b/tests/NATS.Server.Monitoring.Tests/Monitoring/VarzSlowConsumerBreakdownTests.cs similarity index 93% rename from tests/NATS.Server.Tests/Monitoring/VarzSlowConsumerBreakdownTests.cs rename to tests/NATS.Server.Monitoring.Tests/Monitoring/VarzSlowConsumerBreakdownTests.cs index ac7346f..bac9cc4 100644 --- a/tests/NATS.Server.Tests/Monitoring/VarzSlowConsumerBreakdownTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/Monitoring/VarzSlowConsumerBreakdownTests.cs @@ -1,4 +1,4 @@ -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class VarzSlowConsumerBreakdownTests { diff --git a/tests/NATS.Server.Monitoring.Tests/NATS.Server.Monitoring.Tests.csproj b/tests/NATS.Server.Monitoring.Tests/NATS.Server.Monitoring.Tests.csproj new file mode 100644 index 0000000..c886361 --- /dev/null +++ b/tests/NATS.Server.Monitoring.Tests/NATS.Server.Monitoring.Tests.csproj @@ -0,0 +1,27 @@ + + + + false + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/NATS.Server.Tests/SubszTests.cs b/tests/NATS.Server.Monitoring.Tests/SubszTests.cs similarity index 92% rename from tests/NATS.Server.Tests/SubszTests.cs rename to tests/NATS.Server.Monitoring.Tests/SubszTests.cs index b049181..fed71e4 100644 --- a/tests/NATS.Server.Tests/SubszTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/SubszTests.cs @@ -3,8 +3,9 @@ using System.Net.Http.Json; using System.Net.Sockets; using Microsoft.Extensions.Logging.Abstractions; using NATS.Server.Monitoring; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class SubszTests : IAsyncLifetime { @@ -16,8 +17,8 @@ public class SubszTests : IAsyncLifetime public SubszTests() { - _natsPort = GetFreePort(); - _monitorPort = GetFreePort(); + _natsPort = TestPortAllocator.GetFreePort(); + _monitorPort = TestPortAllocator.GetFreePort(); _server = new NatsServer( new NatsOptions { Port = _natsPort, MonitorPort = _monitorPort }, NullLoggerFactory.Instance); @@ -128,10 +129,4 @@ public class SubszTests : IAsyncLifetime subz.Total.ShouldBeGreaterThanOrEqualTo(3); } - private static int GetFreePort() - { - using var sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); - sock.Bind(new IPEndPoint(IPAddress.Loopback, 0)); - return ((IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/SystemEventsTests.cs b/tests/NATS.Server.Monitoring.Tests/SystemEventsTests.cs similarity index 89% rename from tests/NATS.Server.Tests/SystemEventsTests.cs rename to tests/NATS.Server.Monitoring.Tests/SystemEventsTests.cs index efd6d11..a447c48 100644 --- a/tests/NATS.Server.Tests/SystemEventsTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/SystemEventsTests.cs @@ -2,8 +2,9 @@ using System.Text.Json; using NATS.Server; using NATS.Server.Events; using Microsoft.Extensions.Logging.Abstractions; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class SystemEventsTests { @@ -117,17 +118,8 @@ public class SystemEventsTests private static NatsServer CreateTestServer() { - var port = GetFreePort(); + var port = TestPortAllocator.GetFreePort(); return new NatsServer(new NatsOptions { Port = port }, NullLoggerFactory.Instance); } - private static int GetFreePort() - { - using var sock = new System.Net.Sockets.Socket( - System.Net.Sockets.AddressFamily.InterNetwork, - System.Net.Sockets.SocketType.Stream, - System.Net.Sockets.ProtocolType.Tcp); - sock.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Loopback, 0)); - return ((System.Net.IPEndPoint)sock.LocalEndPoint!).Port; - } } diff --git a/tests/NATS.Server.Tests/SystemRequestReplyTests.cs b/tests/NATS.Server.Monitoring.Tests/SystemRequestReplyTests.cs similarity index 92% rename from tests/NATS.Server.Tests/SystemRequestReplyTests.cs rename to tests/NATS.Server.Monitoring.Tests/SystemRequestReplyTests.cs index c5d0c97..a491f4a 100644 --- a/tests/NATS.Server.Tests/SystemRequestReplyTests.cs +++ b/tests/NATS.Server.Monitoring.Tests/SystemRequestReplyTests.cs @@ -3,8 +3,9 @@ using System.Text.Json; using NATS.Server; using NATS.Server.Events; using Microsoft.Extensions.Logging.Abstractions; +using NATS.Server.TestUtilities; -namespace NATS.Server.Tests; +namespace NATS.Server.Monitoring.Tests; public class SystemRequestReplyTests { @@ -154,17 +155,8 @@ public class SystemRequestReplyTests private static NatsServer CreateTestServer() { - var port = GetFreePort(); + var port = TestPortAllocator.GetFreePort(); return new NatsServer(new NatsOptions { Port = port }, NullLoggerFactory.Instance); } - private static int GetFreePort() - { - using var sock = new System.Net.Sockets.Socket( - System.Net.Sockets.AddressFamily.InterNetwork, - System.Net.Sockets.SocketType.Stream, - System.Net.Sockets.ProtocolType.Tcp); - sock.Bind(new System.Net.IPEndPoint(System.Net.IPAddress.Loopback, 0)); - return ((System.Net.IPEndPoint)sock.LocalEndPoint!).Port; - } }