fix(runtime): narrow ActorNodeWriteGateway catch + drop vacuous no-actor assertion

This commit is contained in:
Joseph Doherty
2026-06-14 01:32:34 -04:00
parent 10efcf4517
commit 590e497872
2 changed files with 12 additions and 6 deletions
@@ -60,10 +60,20 @@ public sealed class ActorNodeWriteGateway : IOpcUaNodeWriteGateway
_logger.LogWarning("Operator write to {NodeId} rejected: {Reason}", nodeId, result.Reason);
return new NodeWriteOutcome(result.Success, result.Reason);
}
catch (Exception ex) // AskTimeoutException, actor faults, cancellation
catch (OperationCanceledException ex)
{
_logger.LogWarning(ex, "Operator write to {NodeId} failed or timed out", nodeId);
_logger.LogWarning(ex, "Operator write to {NodeId} cancelled", nodeId);
return new NodeWriteOutcome(false, "write cancelled");
}
catch (AskTimeoutException ex)
{
_logger.LogWarning(ex, "Operator write to {NodeId} timed out", nodeId);
return new NodeWriteOutcome(false, "write timeout");
}
catch (Exception ex)
{
_logger.LogError(ex, "Operator write to {NodeId} failed unexpectedly", nodeId);
return new NodeWriteOutcome(false, "write error");
}
}
}
@@ -75,15 +75,11 @@ public sealed class ActorNodeWriteGatewayTests : RuntimeActorTestBase
[Fact]
public async Task No_actor_registered_maps_to_writes_unavailable()
{
var probe = CreateTestProbe();
var gateway = new ActorNodeWriteGateway(resolveDriverHost: () => null, NullLogger.Instance);
var outcome = await gateway.WriteAsync("eq-1/speed", 123.0, CancellationToken.None);
outcome.Success.ShouldBeFalse();
outcome.Reason.ShouldBe("writes unavailable");
// The resolver returned null, so nothing should have been messaged anywhere.
probe.ExpectNoMsg(TimeSpan.FromMilliseconds(200));
}
}