using Microsoft.Extensions.Logging.Abstractions; using ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Adapters; namespace ZB.MOM.WW.ScadaBridge.DataConnectionLayer.Tests; /// /// Tests for protocol extensibility via DataConnectionFactory. /// public class DataConnectionFactoryTests { /// Verifies that creating an OPC UA connection returns the OPC UA adapter. [Fact] public void Create_OpcUa_ReturnsOpcUaAdapter() { var factory = new DataConnectionFactory(NullLoggerFactory.Instance); var connection = factory.Create("OpcUa", new Dictionary()); Assert.IsType(connection); } /// Verifies that creating an MxGateway connection returns the MxGateway adapter. [Fact] public void Create_MxGateway_ReturnsMxGatewayAdapter() { var factory = new DataConnectionFactory(NullLoggerFactory.Instance); var connection = factory.Create("MxGateway", new Dictionary()); Assert.IsType(connection); } /// Verifies that protocol names are matched case-insensitively. [Fact] public void Create_CaseInsensitive() { var factory = new DataConnectionFactory(NullLoggerFactory.Instance); var connection = factory.Create("opcua", new Dictionary()); Assert.IsType(connection); } /// Verifies that an unknown protocol throws an exception. [Fact] public void Create_UnknownProtocol_Throws() { var factory = new DataConnectionFactory(NullLoggerFactory.Instance); var ex = Assert.Throws(() => factory.Create("UnknownProtocol", new Dictionary())); Assert.Contains("Unknown protocol type", ex.Message); Assert.Contains("OpcUa", ex.Message); } /// Verifies that a registered adapter extends the set of protocols the factory can create. [Fact] public void RegisterAdapter_ExtendsFactory() { var factory = new DataConnectionFactory(NullLoggerFactory.Instance); // Adding a new protocol = register an adapter factory.RegisterAdapter("Custom", _ => new OpcUaDataConnection( new DefaultOpcUaClientFactory(), NullLogger.Instance)); var connection = factory.Create("Custom", new Dictionary()); Assert.NotNull(connection); } }