feat: add runtime profiling parity and close config runtime drift
This commit is contained in:
36
tests/NATS.Server.Tests/ConfigRuntimeParityTests.cs
Normal file
36
tests/NATS.Server.Tests/ConfigRuntimeParityTests.cs
Normal 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");
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user