fix(otopcua): guard discovered-injection equipment id + cover deferred forwarding

This commit is contained in:
Joseph Doherty
2026-06-26 07:27:09 -04:00
parent ccf93fc029
commit 34fc304712
3 changed files with 9 additions and 3 deletions
@@ -85,8 +85,12 @@ public interface IOpcUaAddressSpaceSink
/// </summary>
void RebuildAddressSpace();
/// <summary>Announce that nodes were added at runtime (discovered-node injection) under
/// <paramref name="affectedNodeId"/> so subscribed clients refresh their browse (Part 3 GeneralModelChangeEvent, verb NodeAdded).</summary>
/// <summary>
/// Announce that nodes were added at runtime (discovered-node injection) under
/// <paramref name="affectedNodeId"/> so subscribed clients refresh their browse
/// (Part 3 GeneralModelChangeEvent, verb NodeAdded).
/// </summary>
/// <param name="affectedNodeId">The node under which discovered nodes were added.</param>
void RaiseNodesAddedModelChange(string affectedNodeId);
}
@@ -319,6 +319,7 @@ public sealed class AddressSpaceApplier
IReadOnlyList<DiscoveredFolder> folders,
IReadOnlyList<DiscoveredVariable> variables)
{
ArgumentException.ThrowIfNullOrEmpty(equipmentRootNodeId);
ArgumentNullException.ThrowIfNull(folders);
ArgumentNullException.ThrowIfNull(variables);
if (folders.Count == 0 && variables.Count == 0) return;
@@ -30,8 +30,9 @@ public sealed class DeferredAddressSpaceSinkTests
deferred.WriteValue("x", 42, OpcUaQuality.Good, DateTime.UtcNow);
deferred.WriteAlarmCondition("a-1", Snapshot(active: true), DateTime.UtcNow);
deferred.RebuildAddressSpace();
deferred.RaiseNodesAddedModelChange("eq-1");
inner.Calls.ShouldBe(new[] { "WV:x", "WA:a-1", "RB" });
inner.Calls.ShouldBe(new[] { "WV:x", "WA:a-1", "RB", "NA:eq-1" });
}
/// <summary>Verifies that setting sink to null reverts to null sink.</summary>