using System.IO; using System.Net.Sockets; using System.Net; using Microsoft.Extensions.Logging.Abstractions; using Opc.Ua; using Opc.Ua.Server; using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.OpcUaServer; namespace ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests; /// /// Audit gap closeout — verifies /// is reflected in Server.ServerArray after start. Single-server in-process check; the /// cross-server visibility check lives in OtOpcUa.OpcUaServer.IntegrationTests. /// public sealed class OpcUaApplicationHostServerArrayTests { /// /// Verifies that ServerArray contains local URI and configured peer URIs after start. /// [Fact] public async Task ServerArray_contains_local_uri_and_configured_peers_after_start() { var pkiRoot = Path.Combine(Path.GetTempPath(), $"otopcua-pki-{Guid.NewGuid():N}"); try { var started = await OpcUaHostStart.StartAsync( port => new OpcUaApplicationHost( new OpcUaApplicationHostOptions { ApplicationName = "OtOpcUa.UnitTest", ApplicationUri = "urn:OtOpcUa.UnitTest.NodeA", OpcUaPort = port, PublicHostname = "127.0.0.1", PkiStoreRoot = pkiRoot, PeerApplicationUris = new[] { "urn:OtOpcUa.UnitTest.NodeB" }, }, NullLogger.Instance), () => new StandardServer(), CancellationToken.None); await using var host = started.Host; var server = started.Server; var serverArray = server.CurrentInstance.ServerObject.ServerArray.Value; serverArray.ShouldNotBeNull(); serverArray.ShouldContain("urn:OtOpcUa.UnitTest.NodeA"); serverArray.ShouldContain("urn:OtOpcUa.UnitTest.NodeB"); } finally { if (Directory.Exists(pkiRoot)) Directory.Delete(pkiRoot, recursive: true); } } }