Separates ApplicationUri from namespace identity so each instance in a redundant pair has a unique server URI while sharing the same Galaxy namespace. Exposes RedundancySupport, ServerUriArray, and dynamic ServiceLevel through the standard OPC UA server object. ServiceLevel is computed from role (Primary/Secondary) and runtime health (MXAccess and DB connectivity). Adds CLI redundancy command, second deployed service instance, and 31 new tests including paired-server integration. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using Opc.Ua;
|
|
using Shouldly;
|
|
using Xunit;
|
|
using ZB.MOM.WW.LmxOpcUa.Host.OpcUa;
|
|
|
|
namespace ZB.MOM.WW.LmxOpcUa.Tests.Redundancy
|
|
{
|
|
public class RedundancyModeResolverTests
|
|
{
|
|
[Fact]
|
|
public void Resolve_Disabled_ReturnsNone()
|
|
{
|
|
RedundancyModeResolver.Resolve("Warm", enabled: false).ShouldBe(RedundancySupport.None);
|
|
}
|
|
|
|
[Fact]
|
|
public void Resolve_Warm_ReturnsWarm()
|
|
{
|
|
RedundancyModeResolver.Resolve("Warm", enabled: true).ShouldBe(RedundancySupport.Warm);
|
|
}
|
|
|
|
[Fact]
|
|
public void Resolve_Hot_ReturnsHot()
|
|
{
|
|
RedundancyModeResolver.Resolve("Hot", enabled: true).ShouldBe(RedundancySupport.Hot);
|
|
}
|
|
|
|
[Fact]
|
|
public void Resolve_Unknown_FallsBackToNone()
|
|
{
|
|
RedundancyModeResolver.Resolve("Transparent", enabled: true).ShouldBe(RedundancySupport.None);
|
|
}
|
|
|
|
[Fact]
|
|
public void Resolve_CaseInsensitive()
|
|
{
|
|
RedundancyModeResolver.Resolve("warm", enabled: true).ShouldBe(RedundancySupport.Warm);
|
|
RedundancyModeResolver.Resolve("WARM", enabled: true).ShouldBe(RedundancySupport.Warm);
|
|
RedundancyModeResolver.Resolve("hot", enabled: true).ShouldBe(RedundancySupport.Hot);
|
|
}
|
|
|
|
[Fact]
|
|
public void Resolve_Null_FallsBackToNone()
|
|
{
|
|
RedundancyModeResolver.Resolve(null!, enabled: true).ShouldBe(RedundancySupport.None);
|
|
}
|
|
|
|
[Fact]
|
|
public void Resolve_Empty_FallsBackToNone()
|
|
{
|
|
RedundancyModeResolver.Resolve("", enabled: true).ShouldBe(RedundancySupport.None);
|
|
}
|
|
}
|
|
}
|