feat(sitecallaudit): central→site Retry/Discard relay for parked operations
This commit is contained in:
@@ -214,4 +214,72 @@ public class SiteCommunicationActorTests : TestKit
|
||||
|
||||
ExpectMsg<EventLogQueryResponse>(msg => !msg.Success);
|
||||
}
|
||||
|
||||
// ── Task 5 (#22): central→site Retry/Discard relay for parked cached calls ──
|
||||
|
||||
[Fact]
|
||||
public void RetryParkedOperation_WithHandler_ForwardedToParkedMessageHandler()
|
||||
{
|
||||
var dmProbe = CreateTestProbe();
|
||||
var handlerProbe = CreateTestProbe();
|
||||
var siteActor = Sys.ActorOf(Props.Create(() =>
|
||||
new SiteCommunicationActor("site1", _options, dmProbe.Ref)));
|
||||
|
||||
siteActor.Tell(new RegisterLocalHandler(LocalHandlerType.ParkedMessages, handlerProbe.Ref));
|
||||
|
||||
var id = Commons.Types.TrackedOperationId.New();
|
||||
siteActor.Tell(new RetryParkedOperation("corr-rp", id));
|
||||
|
||||
handlerProbe.ExpectMsg<RetryParkedOperation>(msg =>
|
||||
msg.CorrelationId == "corr-rp" && msg.TrackedOperationId.Equals(id));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscardParkedOperation_WithHandler_ForwardedToParkedMessageHandler()
|
||||
{
|
||||
var dmProbe = CreateTestProbe();
|
||||
var handlerProbe = CreateTestProbe();
|
||||
var siteActor = Sys.ActorOf(Props.Create(() =>
|
||||
new SiteCommunicationActor("site1", _options, dmProbe.Ref)));
|
||||
|
||||
siteActor.Tell(new RegisterLocalHandler(LocalHandlerType.ParkedMessages, handlerProbe.Ref));
|
||||
|
||||
var id = Commons.Types.TrackedOperationId.New();
|
||||
siteActor.Tell(new DiscardParkedOperation("corr-dp", id));
|
||||
|
||||
handlerProbe.ExpectMsg<DiscardParkedOperation>(msg =>
|
||||
msg.CorrelationId == "corr-dp" && msg.TrackedOperationId.Equals(id));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void RetryParkedOperation_WithoutHandler_RepliesNotAppliedAck()
|
||||
{
|
||||
// No parked-message handler registered — the relay must get a definitive
|
||||
// non-applied ack, not silence (the SiteCallAuditActor's Ask must not
|
||||
// hang and then mis-report site-unreachable when the site IS reachable).
|
||||
var dmProbe = CreateTestProbe();
|
||||
var siteActor = Sys.ActorOf(Props.Create(() =>
|
||||
new SiteCommunicationActor("site1", _options, dmProbe.Ref)));
|
||||
|
||||
siteActor.Tell(new RetryParkedOperation("corr-no-handler", Commons.Types.TrackedOperationId.New()));
|
||||
|
||||
var ack = ExpectMsg<ParkedOperationActionAck>();
|
||||
Assert.Equal("corr-no-handler", ack.CorrelationId);
|
||||
Assert.False(ack.Applied);
|
||||
Assert.NotNull(ack.ErrorMessage);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiscardParkedOperation_WithoutHandler_RepliesNotAppliedAck()
|
||||
{
|
||||
var dmProbe = CreateTestProbe();
|
||||
var siteActor = Sys.ActorOf(Props.Create(() =>
|
||||
new SiteCommunicationActor("site1", _options, dmProbe.Ref)));
|
||||
|
||||
siteActor.Tell(new DiscardParkedOperation("corr-no-handler", Commons.Types.TrackedOperationId.New()));
|
||||
|
||||
var ack = ExpectMsg<ParkedOperationActionAck>();
|
||||
Assert.False(ack.Applied);
|
||||
Assert.NotNull(ack.ErrorMessage);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user