64e3fbe035
v2-ci / build (push) Failing after 1m43s
v2-ci / unit-tests (tests/Core/ZB.MOM.WW.OtOpcUa.Cluster.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.ControlPlane.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Runtime.Tests) (push) Has been skipped
v2-ci / unit-tests (tests/Server/ZB.MOM.WW.OtOpcUa.Security.Tests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests) (push) Has been skipped
v2-ci / integration (tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests) (push) Has been skipped
Adds <summary>, <param>, <typeparam>, and <inheritdoc/> tags to public members surfaced by commentchecker — resolves 5,847 of 5,869 issues (99.6%) across three /fixdocs passes.
79 lines
3.1 KiB
C#
79 lines
3.1 KiB
C#
using Akka.Cluster;
|
|
using Shouldly;
|
|
using Xunit;
|
|
using ZB.MOM.WW.OtOpcUa.ControlPlane.Redundancy;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.ControlPlane.Tests;
|
|
|
|
public sealed class ServiceLevelCalculatorTests
|
|
{
|
|
/// <summary>Verifies that non-Up member statuses return a service level of zero.</summary>
|
|
/// <param name="status">The Akka cluster member status to test.</param>
|
|
[Theory]
|
|
[InlineData(MemberStatus.Down)]
|
|
[InlineData(MemberStatus.Removed)]
|
|
[InlineData(MemberStatus.Exiting)]
|
|
[InlineData(MemberStatus.Leaving)]
|
|
public void NotUp_returns_zero(MemberStatus status)
|
|
{
|
|
var sl = ServiceLevelCalculator.Compute(new(status,
|
|
DbReachable: true, OpcUaProbeOk: true, Stale: false, IsDriverRoleLeader: true));
|
|
sl.ShouldBe((byte)0);
|
|
}
|
|
|
|
/// <summary>Verifies that a fully healthy non-leader member returns a service level of 240.</summary>
|
|
[Fact]
|
|
public void Fully_healthy_non_leader_returns_240()
|
|
{
|
|
var sl = ServiceLevelCalculator.Compute(new(MemberStatus.Up,
|
|
DbReachable: true, OpcUaProbeOk: true, Stale: false, IsDriverRoleLeader: false));
|
|
sl.ShouldBe((byte)240);
|
|
}
|
|
|
|
/// <summary>Verifies that a fully healthy role leader returns a service level of 250.</summary>
|
|
[Fact]
|
|
public void Fully_healthy_role_leader_returns_250()
|
|
{
|
|
var sl = ServiceLevelCalculator.Compute(new(MemberStatus.Up,
|
|
DbReachable: true, OpcUaProbeOk: true, Stale: false, IsDriverRoleLeader: true));
|
|
sl.ShouldBe((byte)250);
|
|
}
|
|
|
|
/// <summary>Verifies that a database reachable but stale returns a service level of 200.</summary>
|
|
[Fact]
|
|
public void Db_reachable_but_stale_returns_200()
|
|
{
|
|
var sl = ServiceLevelCalculator.Compute(new(MemberStatus.Up,
|
|
DbReachable: true, OpcUaProbeOk: true, Stale: true, IsDriverRoleLeader: false));
|
|
sl.ShouldBe((byte)200);
|
|
}
|
|
|
|
/// <summary>Verifies that an unreachable and stale database returns a service level of 100.</summary>
|
|
[Fact]
|
|
public void Db_unreachable_and_stale_returns_100()
|
|
{
|
|
var sl = ServiceLevelCalculator.Compute(new(MemberStatus.Up,
|
|
DbReachable: false, OpcUaProbeOk: false, Stale: true, IsDriverRoleLeader: false));
|
|
sl.ShouldBe((byte)100);
|
|
}
|
|
|
|
/// <summary>Verifies that an OPC UA probe failure on a non-stale database returns zero.</summary>
|
|
[Fact]
|
|
public void Opcua_probe_fail_when_not_stale_returns_zero()
|
|
{
|
|
// (DbReachable=true, OpcUaProbeOk=false, Stale=false) falls through to the catch-all 0.
|
|
var sl = ServiceLevelCalculator.Compute(new(MemberStatus.Up,
|
|
DbReachable: true, OpcUaProbeOk: false, Stale: false, IsDriverRoleLeader: false));
|
|
sl.ShouldBe((byte)0);
|
|
}
|
|
|
|
/// <summary>Verifies that a Joining member status is treated like Up for service level grading.</summary>
|
|
[Fact]
|
|
public void Joining_member_is_treated_like_Up_for_grading()
|
|
{
|
|
var sl = ServiceLevelCalculator.Compute(new(MemberStatus.Joining,
|
|
DbReachable: true, OpcUaProbeOk: true, Stale: false, IsDriverRoleLeader: false));
|
|
sl.ShouldBe((byte)240);
|
|
}
|
|
}
|