using Opc.Ua; using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Client.Shared.Adapters; using ZB.MOM.WW.OtOpcUa.Client.Shared.Models; namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Tests.Adapters; /// Uses the real configuration factory so fake sessions cannot conceal SDK initialization failures. public sealed class DefaultApplicationConfigurationFactoryTests { [Theory] [InlineData(SecurityMode.None)] [InlineData(SecurityMode.SignAndEncrypt)] public async Task Real_configuration_initializes_its_certificate_manager(SecurityMode mode) { var root = Path.Combine(Path.GetTempPath(), $"otopcua-real-config-{Guid.NewGuid():N}"); ApplicationConfiguration? config = null; try { config = await new DefaultApplicationConfigurationFactory().CreateAsync(new ConnectionSettings { EndpointUrl = "opc.tcp://localhost:4840", CertificateStorePath = root, SecurityMode = mode, AutoAcceptCertificates = false, }, TestContext.Current.CancellationToken); config.CertificateManager.ShouldNotBeNull(); config.SecurityConfiguration.AutoAcceptUntrustedCertificates.ShouldBeFalse(); if (mode != SecurityMode.None) Directory.EnumerateFiles(Path.Combine(root, "own"), "*", SearchOption.AllDirectories).ShouldNotBeEmpty(); } finally { (config?.CertificateManager as IDisposable)?.Dispose(); if (Directory.Exists(root)) Directory.Delete(root, recursive: true); } } }