86 lines
3.2 KiB
Java
86 lines
3.2 KiB
Java
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-167:aiimage.http-client.* 配置命名空间契约(plan 10)。
|
||
* 默认值与现状一致;非法值钳制;配置类绑定字段齐全。
|
||
*/
|
||
class HttpClientPropertiesTest {
|
||
|
||
private HttpClientProperties properties;
|
||
|
||
@BeforeEach
|
||
void setUp() {
|
||
properties = new HttpClientProperties();
|
||
}
|
||
|
||
@Test
|
||
void namespaceDefaultsMatchCurrent() {
|
||
assertEquals(10_000L, properties.getConnectTimeoutMillis(), "connect 默认 10s(与现状一致)");
|
||
assertEquals(60_000L, properties.getReadTimeoutMillis(), "read 默认 60s");
|
||
assertEquals(90_000L, properties.getCallTimeoutMillis(), "call 默认 90s");
|
||
assertEquals(3, properties.getMaxRetries(), "重试默认 3");
|
||
assertEquals(500L, properties.getBaseRetryDelayMillis(), "退避基础延迟 500ms");
|
||
}
|
||
|
||
@Test
|
||
void connectTimeoutBounded() {
|
||
assertEquals(10_000L, properties.effectiveConnectTimeoutMillis());
|
||
properties.setConnectTimeoutMillis(1_000);
|
||
assertEquals(1_000L, properties.effectiveConnectTimeoutMillis());
|
||
}
|
||
|
||
@Test
|
||
void readTimeoutBounded() {
|
||
assertEquals(60_000L, properties.effectiveReadTimeoutMillis());
|
||
properties.setReadTimeoutMillis(3_600_000);
|
||
assertEquals(3_600_000L, properties.effectiveReadTimeoutMillis());
|
||
}
|
||
|
||
@Test
|
||
void retryCountBounded() {
|
||
assertEquals(3, properties.effectiveMaxRetries());
|
||
properties.setMaxRetries(0);
|
||
assertEquals(0, properties.effectiveMaxRetries());
|
||
}
|
||
|
||
@Test
|
||
void invalidValuesClamped() {
|
||
properties.setConnectTimeoutMillis(-5);
|
||
assertEquals(1_000L, properties.effectiveConnectTimeoutMillis(), "负数钳制到下限");
|
||
properties.setReadTimeoutMillis(999_999_999L);
|
||
assertEquals(3_600_000L, properties.effectiveReadTimeoutMillis(), "超上限钳制");
|
||
properties.setMaxRetries(99);
|
||
assertEquals(10, properties.effectiveMaxRetries(), "重试钳制到 10");
|
||
}
|
||
|
||
@Test
|
||
void callTimeoutBounded() {
|
||
properties.setCallTimeoutMillis(7_200_000);
|
||
assertEquals(7_200_000L, properties.effectiveCallTimeoutMillis());
|
||
properties.setCallTimeoutMillis(0);
|
||
assertEquals(1_000L, properties.effectiveCallTimeoutMillis());
|
||
}
|
||
|
||
@Test
|
||
void configClassBindingPrefix() throws Exception {
|
||
var annotation = HttpClientProperties.class
|
||
.getAnnotation(org.springframework.boot.context.properties.ConfigurationProperties.class);
|
||
assertEquals("aiimage.http-client", annotation.prefix(), "绑定 aiimage.http-client 前缀");
|
||
assertTrue(HttpClientProperties.class.isAnnotationPresent(
|
||
org.springframework.stereotype.Component.class), "配置类需注册为组件");
|
||
}
|
||
|
||
@Test
|
||
void envOverrideSemantics() {
|
||
// env 覆盖走宽松绑定:设置后 effective 反映新值
|
||
properties.setConnectTimeoutMillis(30_000);
|
||
assertEquals(30_000L, properties.effectiveConnectTimeoutMillis());
|
||
}
|
||
}
|