using Xunit; namespace ZB.MOM.WW.LmxProxy.Client.Tests; public class LmxProxyClientBuilderTests { [Fact] public void Build_ThrowsWhenHostNotSet() { var builder = new LmxProxyClientBuilder(); Assert.Throws(() => builder.Build()); } [Fact] public void Build_DefaultPort_Is50051() { var client = new LmxProxyClientBuilder() .WithHost("localhost") .Build(); Assert.NotNull(client); } [Fact] public void WithPort_ThrowsOnZero() { Assert.Throws(() => new LmxProxyClientBuilder().WithPort(0)); } [Fact] public void WithPort_ThrowsOn65536() { Assert.Throws(() => new LmxProxyClientBuilder().WithPort(65536)); } [Fact] public void WithTimeout_ThrowsOnNegative() { Assert.Throws(() => new LmxProxyClientBuilder().WithTimeout(TimeSpan.FromSeconds(-1))); } [Fact] public void WithTimeout_ThrowsOver10Minutes() { Assert.Throws(() => new LmxProxyClientBuilder().WithTimeout(TimeSpan.FromMinutes(11))); } [Fact] public void WithRetryPolicy_ThrowsOnZeroAttempts() { Assert.Throws(() => new LmxProxyClientBuilder().WithRetryPolicy(0, TimeSpan.FromSeconds(1))); } [Fact] public void WithRetryPolicy_ThrowsOnZeroDelay() { Assert.Throws(() => new LmxProxyClientBuilder().WithRetryPolicy(3, TimeSpan.Zero)); } [Fact] public void Build_WithAllOptions_Succeeds() { var client = new LmxProxyClientBuilder() .WithHost("10.100.0.48") .WithPort(50051) .WithApiKey("test-key") .WithTimeout(TimeSpan.FromSeconds(15)) .WithRetryPolicy(5, TimeSpan.FromSeconds(2)) .WithMetrics() .WithCorrelationIdHeader("X-Correlation-ID") .Build(); Assert.NotNull(client); } [Fact] public void Build_WithTls_ValidatesCertificatePaths() { var builder = new LmxProxyClientBuilder() .WithHost("localhost") .WithTlsConfiguration(new ClientTlsConfiguration { UseTls = true, ServerCaCertificatePath = "/nonexistent/cert.pem" }); Assert.Throws(() => builder.Build()); } [Fact] public void WithHost_ThrowsOnNull() { Assert.Throws(() => new LmxProxyClientBuilder().WithHost(null!)); } [Fact] public void WithHost_ThrowsOnEmpty() { Assert.Throws(() => new LmxProxyClientBuilder().WithHost("")); } }