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> /// </summary>
void RebuildAddressSpace(); void RebuildAddressSpace();
/// <summary>Announce that nodes were added at runtime (discovered-node injection) under /// <summary>
/// <paramref name="affectedNodeId"/> so subscribed clients refresh their browse (Part 3 GeneralModelChangeEvent, verb NodeAdded).</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); void RaiseNodesAddedModelChange(string affectedNodeId);
} }
@@ -319,6 +319,7 @@ public sealed class AddressSpaceApplier
IReadOnlyList<DiscoveredFolder> folders, IReadOnlyList<DiscoveredFolder> folders,
IReadOnlyList<DiscoveredVariable> variables) IReadOnlyList<DiscoveredVariable> variables)
{ {
ArgumentException.ThrowIfNullOrEmpty(equipmentRootNodeId);
ArgumentNullException.ThrowIfNull(folders); ArgumentNullException.ThrowIfNull(folders);
ArgumentNullException.ThrowIfNull(variables); ArgumentNullException.ThrowIfNull(variables);
if (folders.Count == 0 && variables.Count == 0) return; 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.WriteValue("x", 42, OpcUaQuality.Good, DateTime.UtcNow);
deferred.WriteAlarmCondition("a-1", Snapshot(active: true), DateTime.UtcNow); deferred.WriteAlarmCondition("a-1", Snapshot(active: true), DateTime.UtcNow);
deferred.RebuildAddressSpace(); 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> /// <summary>Verifies that setting sink to null reverts to null sink.</summary>