package com.nanri.aiimage.config; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; /** * task-168:LLM 客户端配置接入契约(plan 10)。 * 从 aiimage.http-client.* 读取超时/重试;默认值与现状一致;覆盖生效; * 非法值钳制。 */ class LlmHttpConfigResolverTest { private HttpClientProperties properties; private LlmHttpConfigResolver resolver; @BeforeEach void setUp() { properties = new HttpClientProperties(); resolver = new LlmHttpConfigResolver(properties); } @Test void timeoutFromConfigApplied() { assertEquals(10_000L, resolver.connectTimeoutMillis()); assertEquals(60_000L, resolver.readTimeoutMillis()); assertEquals(90_000L, resolver.callTimeoutMillis()); } @Test void defaultValuesKept() { // 命名空间默认 = 现状基线(connect 10s / read 60s / call 90s / retry 3) assertEquals(10_000L, resolver.connectTimeoutMillis()); assertEquals(60_000L, resolver.readTimeoutMillis()); assertEquals(3, resolver.maxRetries()); assertEquals(500L, resolver.baseRetryDelayMillis()); } @Test void overrideTakesEffect() { properties.setConnectTimeoutMillis(30_000); properties.setReadTimeoutMillis(120_000); properties.setMaxRetries(5); assertEquals(30_000L, resolver.connectTimeoutMillis()); assertEquals(120_000L, resolver.readTimeoutMillis()); assertEquals(5, resolver.maxRetries()); } @Test void callTimeoutReflectsTotal() { properties.setCallTimeoutMillis(180_000); assertEquals(180_000L, resolver.callTimeoutMillis()); } @Test void retryConfigReflected() { properties.setMaxRetries(0); assertEquals(0, resolver.maxRetries()); properties.setMaxRetries(99); assertEquals(10, resolver.maxRetries(), "重试钳制到 10"); } @Test void invalidTimeoutsClamped() { properties.setConnectTimeoutMillis(-1); assertEquals(1_000L, resolver.connectTimeoutMillis()); properties.setReadTimeoutMillis(999_999_999L); assertEquals(3_600_000L, resolver.readTimeoutMillis()); } @Test void resolverBindingWired() { assertTrue(resolver.connectTimeoutMillis() > 0); assertTrue(resolver.maxRetries() >= 0); } @Test void behaviorSameAsCurrentBaseline() { // 与 SimilarAsinProperties.llm 现状对比:connect 一致(10s)、重试一致(3) assertEquals(10_000L, resolver.connectTimeoutMillis()); assertEquals(3, resolver.maxRetries()); } }