refactor: extract NATS.Server.Monitoring.Tests project
Move 39 monitoring, events, and system endpoint test files from NATS.Server.Tests into a dedicated NATS.Server.Monitoring.Tests project. Update namespaces, replace private GetFreePort/ReadUntilAsync with TestUtilities shared helpers, add InternalsVisibleTo, and register in the solution file. All 439 tests pass.
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
<Project Path="tests/NATS.Server.LeafNodes.Tests/NATS.Server.LeafNodes.Tests.csproj" />
|
||||
<Project Path="tests/NATS.Server.Clustering.Tests/NATS.Server.Clustering.Tests.csproj" />
|
||||
<Project Path="tests/NATS.Server.Raft.Tests/NATS.Server.Raft.Tests.csproj" />
|
||||
<Project Path="tests/NATS.Server.Monitoring.Tests/NATS.Server.Monitoring.Tests.csproj" />
|
||||
<Project Path="tests/NATS.E2E.Tests/NATS.E2E.Tests.csproj" />
|
||||
</Folder>
|
||||
</Solution>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<InternalsVisibleTo Include="NATS.Server.LeafNodes.Tests" />
|
||||
<InternalsVisibleTo Include="NATS.Server.Clustering.Tests" />
|
||||
<InternalsVisibleTo Include="NATS.Server.Raft.Tests" />
|
||||
<InternalsVisibleTo Include="NATS.Server.Monitoring.Tests" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<FrameworkReference Include="Microsoft.AspNetCore.App" />
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for <see cref="InternalEventSystem.SendAuthErrorEvent"/>,
|
||||
@@ -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
|
||||
@@ -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
|
||||
{
|
||||
@@ -4,7 +4,7 @@
|
||||
using System.Text;
|
||||
using NATS.Server.Events;
|
||||
|
||||
namespace NATS.Server.Tests.Events;
|
||||
namespace NATS.Server.Monitoring.Tests.Events;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for <see cref="EventCompressor"/> — S2/Snappy compression for system event payloads.
|
||||
@@ -9,7 +9,7 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Server.Events;
|
||||
|
||||
namespace NATS.Server.Tests.Events;
|
||||
namespace NATS.Server.Monitoring.Tests.Events;
|
||||
|
||||
/// <summary>
|
||||
/// 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,
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Server.Events;
|
||||
|
||||
namespace NATS.Server.Tests.Events;
|
||||
namespace NATS.Server.Monitoring.Tests.Events;
|
||||
|
||||
/// <summary>
|
||||
/// 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 }],
|
||||
@@ -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
|
||||
{
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Server.Events;
|
||||
|
||||
namespace NATS.Server.Tests.Events;
|
||||
namespace NATS.Server.Monitoring.Tests.Events;
|
||||
|
||||
/// <summary>
|
||||
/// Tests that EventBuilder produces fully-populated system event messages
|
||||
@@ -8,7 +8,7 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Server.Events;
|
||||
|
||||
namespace NATS.Server.Tests.Events;
|
||||
namespace NATS.Server.Monitoring.Tests.Events;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for <see cref="OcspPeerRejectEventMsg"/>, <see cref="OcspChainValidationEvent"/>,
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Server.Events;
|
||||
|
||||
namespace NATS.Server.Tests.Events;
|
||||
namespace NATS.Server.Monitoring.Tests.Events;
|
||||
|
||||
/// <summary>
|
||||
/// Tests for remote server and leaf node event DTOs and subject constants.
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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<Socket> 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<string> 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);
|
||||
@@ -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<JetStreamMonitoringFixture> 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;
|
||||
}
|
||||
}
|
||||
@@ -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<MonitorFixture> 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;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Text.Json;
|
||||
using NATS.Server.Monitoring;
|
||||
|
||||
namespace NATS.Server.Tests;
|
||||
namespace NATS.Server.Monitoring.Tests;
|
||||
|
||||
public class MonitorModelTests
|
||||
{
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
using NATS.Server.Monitoring;
|
||||
|
||||
namespace NATS.Server.Tests.Monitoring;
|
||||
namespace NATS.Server.Monitoring.Tests.Monitoring;
|
||||
|
||||
public class ClosedConnectionRingBufferTests
|
||||
{
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
using NATS.Server.Monitoring;
|
||||
|
||||
namespace NATS.Server.Tests.Monitoring;
|
||||
namespace NATS.Server.Monitoring.Tests.Monitoring;
|
||||
|
||||
public class ClosedReasonTests
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
using NATS.Server.Monitoring;
|
||||
|
||||
namespace NATS.Server.Tests.Monitoring;
|
||||
namespace NATS.Server.Monitoring.Tests.Monitoring;
|
||||
|
||||
/// <summary>
|
||||
/// Unit tests for account-scoped /connz filtering (Gap 10.2).
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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<Socket> 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}");
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
using System.Text.Json;
|
||||
using System.Text;
|
||||
|
||||
namespace NATS.Server.Tests;
|
||||
namespace NATS.Server.Monitoring.Tests;
|
||||
|
||||
public class ConnzParityFieldTests
|
||||
{
|
||||
@@ -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
|
||||
{
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using NATS.Server.Monitoring;
|
||||
|
||||
namespace NATS.Server.Tests.Monitoring;
|
||||
namespace NATS.Server.Monitoring.Tests.Monitoring;
|
||||
|
||||
/// <summary>
|
||||
/// Unit tests for ConnzSortOption enum, ConnzSorter.Parse, and ConnzSorter.Sort.
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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<RoutezFixture> 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<RoutezFixture> 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/// <summary>
|
||||
/// 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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
@@ -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<PprofMonitorFixture> 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;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Text.Json;
|
||||
|
||||
namespace NATS.Server.Tests.Monitoring;
|
||||
namespace NATS.Server.Monitoring.Tests.Monitoring;
|
||||
|
||||
public class PprofRuntimeParityTests
|
||||
{
|
||||
@@ -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
|
||||
{
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace NATS.Server.Tests;
|
||||
namespace NATS.Server.Monitoring.Tests;
|
||||
|
||||
public class VarzSlowConsumerBreakdownTests
|
||||
{
|
||||
@@ -0,0 +1,27 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="coverlet.collector" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||
<PackageReference Include="NATS.Client.Core" />
|
||||
<PackageReference Include="NSubstitute" />
|
||||
<PackageReference Include="Shouldly" />
|
||||
<PackageReference Include="xunit" />
|
||||
<PackageReference Include="xunit.runner.visualstudio" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Using Include="Xunit" />
|
||||
<Using Include="Shouldly" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\src\NATS.Server\NATS.Server.csproj" />
|
||||
<ProjectReference Include="..\NATS.Server.TestUtilities\NATS.Server.TestUtilities.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user