using Microsoft.Extensions.Logging; using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Core.Hosting; using ZB.MOM.WW.OtOpcUa.Driver.FOCAS; using ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Wire; namespace ZB.MOM.WW.OtOpcUa.Driver.FOCAS.Tests; /// #602 CONV-3: the FOCAS factory hands the host logger factory to the driver and its wire client. [Trait("Category", "Unit")] public sealed class FocasFactoryLoggerTests { private sealed class RecordingLoggerFactory : ILoggerFactory { public List Categories { get; } = []; public ILogger CreateLogger(string categoryName) { lock (Categories) Categories.Add(categoryName); return Microsoft.Extensions.Logging.Abstractions.NullLogger.Instance; } public void AddProvider(ILoggerProvider provider) { } public void Dispose() { } } [Fact] public void Registered_factory_creates_driver_and_wire_client_loggers_from_the_host_factory() { var lf = new RecordingLoggerFactory(); var registry = new DriverFactoryRegistry(); FocasDriverFactoryExtensions.Register(registry, lf); var drv = registry.TryGet(FocasDriverFactoryExtensions.DriverTypeName)!("drv-1", "{}"); drv.ShouldBeOfType(); lf.Categories.ShouldContain(typeof(FocasDriver).FullName!); lf.Categories.ShouldContain(typeof(FocasWireClient).FullName!); } [Fact] public void Registering_without_a_logger_factory_still_works() { var registry = new DriverFactoryRegistry(); FocasDriverFactoryExtensions.Register(registry); registry.TryGet(FocasDriverFactoryExtensions.DriverTypeName)!("drv-1", "{}").ShouldBeOfType(); } }