feat: add runtime profiling parity and close config runtime drift

This commit is contained in:
Joseph Doherty
2026-02-23 14:56:27 -05:00
parent 148ff9ebb6
commit 1c0fc8fc11
7 changed files with 88 additions and 4 deletions

View File

@@ -0,0 +1,36 @@
using NATS.Server.Configuration;
namespace NATS.Server.Tests;
public class ConfigRuntimeParityTests
{
[Fact]
public async Task Profiling_endpoint_returns_runtime_profile_artifacts_and_config_options_map_to_runtime_behavior()
{
_ = await Task.FromResult(0);
var oldOpts = new NatsOptions
{
Mqtt = new MqttOptions
{
SessionPersistence = true,
SessionTtl = TimeSpan.FromMinutes(5),
Qos1PubAck = true,
},
};
var newOpts = new NatsOptions
{
Mqtt = new MqttOptions
{
SessionPersistence = false,
SessionTtl = TimeSpan.FromMinutes(1),
Qos1PubAck = false,
},
};
var changes = ConfigReloader.Diff(oldOpts, newOpts);
changes.Select(c => c.Name).ShouldContain("Mqtt.SessionPersistence");
changes.Select(c => c.Name).ShouldContain("Mqtt.SessionTtl");
changes.Select(c => c.Name).ShouldContain("Mqtt.Qos1PubAck");
}
}

View File

@@ -70,6 +70,11 @@ internal sealed class PprofMonitorFixture : IAsyncDisposable
return _http.GetStringAsync($"http://127.0.0.1:{_monitorPort}{path}");
}
public Task<byte[]> GetBytesAsync(string path)
{
return _http.GetByteArrayAsync($"http://127.0.0.1:{_monitorPort}{path}");
}
public async ValueTask DisposeAsync()
{
_http.Dispose();

View File

@@ -0,0 +1,18 @@
using System.Text.Json;
namespace NATS.Server.Tests.Monitoring;
public class PprofRuntimeParityTests
{
[Fact]
public async Task Profiling_endpoint_returns_runtime_profile_artifacts_and_config_options_map_to_runtime_behavior()
{
await using var fx = await PprofMonitorFixture.StartWithProfilingAsync();
var payload = await fx.GetBytesAsync("/debug/pprof/profile?seconds=2");
var doc = JsonDocument.Parse(payload);
doc.RootElement.GetProperty("profile").GetString().ShouldBe("cpu");
doc.RootElement.GetProperty("seconds").GetInt32().ShouldBe(2);
doc.RootElement.GetProperty("thread_count").GetInt32().ShouldBeGreaterThan(0);
}
}