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));
|
||||
}
|
||||
|
||||
/// <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.
|
||||
/// The Subscribe is sent FROM the probe so the SubscribeAck returns to it. Mirrors the
|
||||
/// ScriptedAlarmHostActor test harness.</summary>
|
||||
|
||||
Reference in New Issue
Block a user