using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.Client.CLI.Commands; using ZB.MOM.WW.OtOpcUa.Client.CLI.Tests.Fakes; using ZB.MOM.WW.OtOpcUa.Client.Shared.Models; namespace ZB.MOM.WW.OtOpcUa.Client.CLI.Tests; public class CommandBaseTests { /// Verifies that common options map to connection settings correctly. /// A task that represents the asynchronous operation. [Fact] public async Task CommonOptions_MapToConnectionSettings_Correctly() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://myserver:4840", Username = "admin", Password = "secret", Security = "sign", FailoverUrls = "opc.tcp://backup1:4840,opc.tcp://backup2:4840" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); var settings = fakeService.LastConnectionSettings; settings.ShouldNotBeNull(); settings.EndpointUrl.ShouldBe("opc.tcp://myserver:4840"); settings.Username.ShouldBe("admin"); settings.Password.ShouldBe("secret"); settings.SecurityMode.ShouldBe(SecurityMode.Sign); settings.FailoverUrls.ShouldNotBeNull(); settings.FailoverUrls!.Length.ShouldBe(3); // primary + 2 failover settings.FailoverUrls[0].ShouldBe("opc.tcp://myserver:4840"); settings.AutoAcceptCertificates.ShouldBeTrue(); } /// Verifies that encrypt option maps to SignAndEncrypt. /// A task that represents the asynchronous operation. [Fact] public async Task SecurityOption_Encrypt_MapsToSignAndEncrypt() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://localhost:4840", Security = "encrypt" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); fakeService.LastConnectionSettings!.SecurityMode.ShouldBe(SecurityMode.SignAndEncrypt); } /// Verifies that none option maps to None. /// A task that represents the asynchronous operation. [Fact] public async Task SecurityOption_None_MapsToNone() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://localhost:4840", Security = "none" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); fakeService.LastConnectionSettings!.SecurityMode.ShouldBe(SecurityMode.None); } /// Verifies that no failover URLs results in null FailoverUrls. /// A task that represents the asynchronous operation. [Fact] public async Task NoFailoverUrls_FailoverUrlsIsNull() { var fakeService = new FakeOpcUaClientService(); var factory = new FakeOpcUaClientServiceFactory(fakeService); var command = new ConnectCommand(factory) { Url = "opc.tcp://localhost:4840" }; using var console = TestConsoleHelper.CreateConsole(); await command.ExecuteAsync(console); fakeService.LastConnectionSettings!.FailoverUrls.ShouldBeNull(); } }