Files
crawler-plugin/backend-java/src/test/java/com/nanri/aiimage/config/HttpClientPropertiesTest.java
T

86 lines
3.2 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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-167aiimage.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());
}
}