test(communication): M2.11 review nits — bridge-actor not-found test + dead-letter comment + toast wording (#24)
- Add DebugStreamBridgeActorTests: On_InstanceNotFound_Snapshot_Forwards_To_OnEvent_Does_Not_Open_Stream_And_Terminates — asserts _onEvent receives the not-found snapshot, SubscribeCalls remains empty, and the actor terminates cleanly via Watch/ExpectTerminated. - Add comment in DebugStreamBridgeActor near Context.Stop(Self) explaining that the subsequent StopDebugStream Tell from DebugStreamService.StopStream produces a benign expected dead-letter. - Reword not-found toast in DebugView.razor to "Instance not found on the selected site — check the deployment target." (accurate when the instance may be deployed to a different site).
This commit is contained in:
@@ -60,6 +60,44 @@ public class DebugStreamBridgeActorTests : TestKit
|
||||
return new TestContext(actor, commProbe, mockClient, events, terminated);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void On_InstanceNotFound_Snapshot_Forwards_To_OnEvent_Does_Not_Open_Stream_And_Terminates()
|
||||
{
|
||||
// M2.11: when the site reports InstanceNotFound=true the bridge actor must
|
||||
// (a) forward the not-found snapshot to _onEvent so DebugStreamService's TCS
|
||||
// resolves and the caller can inspect the flag,
|
||||
// (b) NOT open a gRPC stream (SubscribeCalls must remain empty), and
|
||||
// (c) stop itself cleanly.
|
||||
var ctx = CreateBridgeActor();
|
||||
ctx.CommProbe.ExpectMsg<SiteEnvelope>(); // initial subscribe envelope
|
||||
|
||||
var notFoundSnapshot = new DebugViewSnapshot(
|
||||
InstanceName,
|
||||
new List<AttributeValueChanged>(),
|
||||
new List<AlarmStateChanged>(),
|
||||
DateTimeOffset.UtcNow,
|
||||
InstanceNotFound: true);
|
||||
|
||||
Watch(ctx.BridgeActor);
|
||||
ctx.BridgeActor.Tell(notFoundSnapshot);
|
||||
|
||||
// (a) _onEvent must receive the not-found snapshot
|
||||
AwaitCondition(() => { lock (ctx.ReceivedEvents) { return ctx.ReceivedEvents.Count == 1; } },
|
||||
TimeSpan.FromSeconds(3));
|
||||
lock (ctx.ReceivedEvents)
|
||||
{
|
||||
var received = Assert.IsType<DebugViewSnapshot>(ctx.ReceivedEvents[0]);
|
||||
Assert.True(received.InstanceNotFound);
|
||||
}
|
||||
|
||||
// (b) no gRPC stream opened
|
||||
ExpectTerminated(ctx.BridgeActor, TimeSpan.FromSeconds(3));
|
||||
Assert.Empty(ctx.MockGrpcClient.SubscribeCalls);
|
||||
|
||||
// (c) actor terminates cleanly
|
||||
// ExpectTerminated above already verified termination
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PreStart_Sends_SubscribeDebugViewRequest_Via_ClusterClient()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user