feat(batch3): implement service feature group
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
// Copyright 2026 The NATS Authors
|
||||
// Licensed under the Apache License, Version 2.0
|
||||
|
||||
using Shouldly;
|
||||
using ZB.MOM.NatsNet.Server.Internal;
|
||||
|
||||
namespace ZB.MOM.NatsNet.Server.Tests.Internal;
|
||||
|
||||
public sealed class ServiceManagerTests
|
||||
{
|
||||
public ServiceManagerTests()
|
||||
{
|
||||
ServiceManager.Init(static _ => null);
|
||||
ServiceManager.SetServiceName("nats-server");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SetServiceName_WhenProvided_StoresConfiguredName()
|
||||
{
|
||||
ServiceManager.SetServiceName("custom-svc");
|
||||
|
||||
ServiceManager.CurrentServiceName.ShouldBe("custom-svc");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void IsWindowsService_WhenDockerized_ReturnsFalse()
|
||||
{
|
||||
ServiceManager.Init(static key => key == "NATS_DOCKERIZED" ? "1" : null);
|
||||
|
||||
ServiceManager.IsWindowsService(() => true).ShouldBeFalse();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Run_WhenNotRunningAsWindowsService_InvokesStartAction()
|
||||
{
|
||||
var called = false;
|
||||
|
||||
var error = ServiceManager.Run(() => called = true, () => false);
|
||||
|
||||
error.ShouldBeNull();
|
||||
called.ShouldBeTrue();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Execute_WhenServerNotReady_ReturnsFailureExitCode()
|
||||
{
|
||||
using var started = new ManualResetEventSlim(false);
|
||||
var reloadCalls = 0;
|
||||
var shutdownCalls = 0;
|
||||
|
||||
var result = ServiceManager.Execute(
|
||||
startServer: () => started.Set(),
|
||||
readyForConnections: _ => false,
|
||||
changes: [],
|
||||
reloadConfig: () => reloadCalls++,
|
||||
shutdown: () => shutdownCalls++,
|
||||
reopenLogFile: () => { },
|
||||
enterLameDuckMode: () => { });
|
||||
|
||||
result.exitCode.ShouldBe((uint)1);
|
||||
result.serviceSpecificExitCode.ShouldBeFalse();
|
||||
started.Wait(TimeSpan.FromSeconds(1)).ShouldBeTrue();
|
||||
reloadCalls.ShouldBe(0);
|
||||
shutdownCalls.ShouldBe(0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Execute_WhenCommandsReceived_DispatchesControlHandlers()
|
||||
{
|
||||
var reloadCalls = 0;
|
||||
var shutdownCalls = 0;
|
||||
var reopenCalls = 0;
|
||||
var ldmCalled = false;
|
||||
using var ldmInvoked = new ManualResetEventSlim(false);
|
||||
|
||||
var result = ServiceManager.Execute(
|
||||
startServer: () => { },
|
||||
readyForConnections: _ => true,
|
||||
changes: [ServiceControlCommand.ReopenLog, ServiceControlCommand.ParamChange, ServiceControlCommand.LameDuckMode, ServiceControlCommand.Stop],
|
||||
reloadConfig: () => reloadCalls++,
|
||||
shutdown: () => shutdownCalls++,
|
||||
reopenLogFile: () => reopenCalls++,
|
||||
enterLameDuckMode: () =>
|
||||
{
|
||||
ldmCalled = true;
|
||||
ldmInvoked.Set();
|
||||
});
|
||||
|
||||
result.exitCode.ShouldBe((uint)0);
|
||||
result.serviceSpecificExitCode.ShouldBeFalse();
|
||||
reloadCalls.ShouldBe(1);
|
||||
reopenCalls.ShouldBe(1);
|
||||
shutdownCalls.ShouldBe(1);
|
||||
ldmInvoked.Wait(TimeSpan.FromSeconds(1)).ShouldBeTrue();
|
||||
ldmCalled.ShouldBeTrue();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user