test(alarms): assert OperatorComment flows through ForwardNativeAlarm
This commit is contained in:
+38
@@ -188,6 +188,44 @@ public sealed class DriverHostActorNativeAlarmTests : RuntimeActorTestBase
|
|||||||
alerts.ExpectNoMsg(TimeSpan.FromMilliseconds(500));
|
alerts.ExpectNoMsg(TimeSpan.FromMilliseconds(500));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>A native alarm whose <c>AlarmEventArgs.OperatorComment</c> is set flows through
|
||||||
|
/// <c>DriverHostActor.ForwardNativeAlarm</c> into the published <see cref="AlarmTransitionEvent"/>:
|
||||||
|
/// <c>Comment</c> carries the operator string and <c>User</c> is <c>"device"</c> (a non-null comment
|
||||||
|
/// signals the upstream alarm system provided an operator origin, but without a specific user identity).
|
||||||
|
/// </summary>
|
||||||
|
[Fact]
|
||||||
|
public void Native_alarm_operator_comment_flows_to_transition_event()
|
||||||
|
{
|
||||||
|
var db = NewInMemoryDbFactory();
|
||||||
|
var deploymentId = SeedDeploymentWithAlarmTag(db, RevA,
|
||||||
|
Equip: "eq-1", Driver: "drv-1", FullName: "Temp.HiHi", Folder: null, Name: "temp_hi");
|
||||||
|
|
||||||
|
var alerts = CreateTestProbe();
|
||||||
|
SubscribeToAlerts(alerts);
|
||||||
|
|
||||||
|
var (actor, publish) = SpawnHostAndApply(db, deploymentId);
|
||||||
|
|
||||||
|
// Send an alarm whose OperatorComment is set — simulates an upstream acknowledge-with-comment.
|
||||||
|
actor.Tell(new DriverInstanceActor.AttributeAlarmPublished("drv-1", new AlarmEventArgs(
|
||||||
|
new StubAlarmHandle(),
|
||||||
|
SourceNodeId: "Temp",
|
||||||
|
ConditionId: "Temp.HiHi",
|
||||||
|
AlarmType: "OffNormalAlarm",
|
||||||
|
Message: "investigating",
|
||||||
|
Severity: AlarmSeverity.High,
|
||||||
|
SourceTimestampUtc: Ts,
|
||||||
|
Kind: AlarmTransitionKind.Acknowledge,
|
||||||
|
OperatorComment: "investigating")));
|
||||||
|
|
||||||
|
// OPC UA condition update is ungated — drain it.
|
||||||
|
publish.ExpectMsg<OpcUaPublishActor.AlarmStateUpdate>(TimeSpan.FromSeconds(5));
|
||||||
|
|
||||||
|
// The published AlarmTransitionEvent must carry the comment + the "device" user marker.
|
||||||
|
var evt = alerts.ExpectMsg<AlarmTransitionEvent>(TimeSpan.FromSeconds(5));
|
||||||
|
evt.Comment.ShouldBe("investigating");
|
||||||
|
evt.User.ShouldBe("device");
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>Subscribe <paramref name="probe"/> to the <c>alerts</c> DPS topic and wait for the ack.
|
/// <summary>Subscribe <paramref name="probe"/> to the <c>alerts</c> DPS topic and wait for the ack.
|
||||||
/// The Subscribe is sent FROM the probe so the SubscribeAck returns to it. Mirrors the
|
/// The Subscribe is sent FROM the probe so the SubscribeAck returns to it. Mirrors the
|
||||||
/// ScriptedAlarmHostActor test harness.</summary>
|
/// ScriptedAlarmHostActor test harness.</summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user