using Opc.Ua; using ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Adapters; namespace ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Tests.Adapters; public class OpcUaSecurityDowngradeTests { /// Verifies that DC4: requested protection never falls back to none. /// The discovery fails. [Theory] [InlineData(false)] [InlineData(true)] public async Task DC4_RequestedProtectionNeverFallsBackToNone(bool discoveryFails) { await Assert.ThrowsAsync(() => RealOpcUaClient.DiscoverEndpointAsync("opc.tcp://test:4840", MessageSecurityMode.SignAndEncrypt, _ => discoveryFails ? throw new Exception("discovery unavailable") : Task.FromResult(new EndpointDescriptionCollection { new("opc.tcp://test:4840") { SecurityMode = MessageSecurityMode.None } }))); } /// Verifies that DC4: exact requested mode is selected. [Fact] public async Task DC4_ExactRequestedModeIsSelected() { var encrypted = new EndpointDescription("opc.tcp://test:4840") { SecurityMode = MessageSecurityMode.SignAndEncrypt }; Assert.Same(encrypted, await RealOpcUaClient.DiscoverEndpointAsync("opc.tcp://test:4840", MessageSecurityMode.SignAndEncrypt, _ => Task.FromResult(new EndpointDescriptionCollection { new("opc.tcp://test:4840"), encrypted }))); } }