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;
- }
}