完成单机TEST统一入口与可靠投递回归收尾

This commit is contained in:
2026-09-29 19:48:34 +08:00
parent 64a70c9f28
commit 6c0a026cc4
89 changed files with 968 additions and 983 deletions
@@ -3,11 +3,22 @@ package com.baiyue.gateway.config;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.cloud.gateway.config.GatewayProperties;
import static org.assertj.core.api.Assertions.assertThat;
@ContextConfiguration(initializers = OfflineGatewayConfigurationInitializer.class)
@SpringBootTest(properties = {
"spring.config.location=classpath:/gateway-offline-test.properties",
"spring.data.redis.host=127.0.0.1",
"spring.data.redis.port=1",
"spring.cloud.nacos.server-addr=127.0.0.1:1",
"spring.cloud.nacos.username=offline-test",
"spring.cloud.nacos.password=offline-test",
"spring.cloud.nacos.discovery.namespace=offline-test",
"spring.cloud.nacos.config.namespace=offline-test",
"baiyue.security.internal-service-token=offline-test-service-token-32-bytes",
"spring.cloud.nacos.discovery.enabled=false",
"spring.cloud.nacos.discovery.register-enabled=false",
"spring.cloud.nacos.config.enabled=false",
@@ -15,10 +15,9 @@ class DeploymentHeaderSizeContractTest {
"SERVER_MAX_HTTP_REQUEST_HEADER_SIZE: ${SERVER_MAX_HTTP_REQUEST_HEADER_SIZE:-32KB}";
@Test
void allowsAuthorizationTokensAndTrustedIdentityHeadersAcrossAllServices() throws Exception {
void allowsUnifiedAuthorizationHeadersAcrossAllServices() throws Exception {
assertThat(readRepositoryFile("deploy", "docker-compose.yml")).contains(ENVIRONMENT);
assertThat(readRepositoryFile("config", "nacos", "cn", "baiyue-common.yml")).contains(PROPERTY);
assertThat(readRepositoryFile("config", "nacos", "local", "baiyue-common.yml")).contains(PROPERTY);
assertThat(readRepositoryFile("config", "nacos", "test", "baiyue-common.yml")).contains(PROPERTY);
}
private static String readRepositoryFile(String first, String... more) throws Exception {
@@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.test.web.reactive.server.WebTestClient;
@@ -13,7 +14,17 @@ import java.util.List;
import static org.junit.jupiter.api.Assertions.assertThrows;
@ContextConfiguration(initializers = OfflineGatewayConfigurationInitializer.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = {
"spring.config.location=classpath:/gateway-offline-test.properties",
"spring.data.redis.host=127.0.0.1",
"spring.data.redis.port=1",
"spring.cloud.nacos.server-addr=127.0.0.1:1",
"spring.cloud.nacos.username=offline-test",
"spring.cloud.nacos.password=offline-test",
"spring.cloud.nacos.discovery.namespace=offline-test",
"spring.cloud.nacos.config.namespace=offline-test",
"baiyue.security.internal-service-token=offline-test-service-token-32-bytes",
"spring.cloud.nacos.discovery.enabled=false",
"spring.cloud.nacos.discovery.register-enabled=false",
"spring.cloud.nacos.config.enabled=false",
@@ -3,13 +3,24 @@ package com.baiyue.gateway.config;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.http.server.PathContainer;
import org.springframework.web.util.pattern.PathPatternParser;
import static org.assertj.core.api.Assertions.assertThat;
@ContextConfiguration(initializers = OfflineGatewayConfigurationInitializer.class)
@SpringBootTest(properties = {
"spring.config.location=classpath:/gateway-offline-test.properties",
"spring.data.redis.host=127.0.0.1",
"spring.data.redis.port=1",
"spring.cloud.nacos.server-addr=127.0.0.1:1",
"spring.cloud.nacos.username=offline-test",
"spring.cloud.nacos.password=offline-test",
"spring.cloud.nacos.discovery.namespace=offline-test",
"spring.cloud.nacos.config.namespace=offline-test",
"baiyue.security.internal-service-token=offline-test-service-token-32-bytes",
"spring.cloud.nacos.discovery.enabled=false",
"spring.cloud.nacos.discovery.register-enabled=false",
"spring.cloud.nacos.config.enabled=false",
@@ -0,0 +1,43 @@
package com.baiyue.gateway.config;
import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.EnumerablePropertySource;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.io.FileSystemResource;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.LinkedHashMap;
/** Uses actual production routes without invoking production config-data imports. */
public final class OfflineGatewayConfigurationInitializer
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext context) {
Path production = Path.of("src", "main", "resources", "application.yml");
if (!Files.isRegularFile(production)) {
production = Path.of("gateway", "src", "main", "resources", "application.yml");
}
try {
var sources = new YamlPropertySourceLoader().load("gateway-production",
new FileSystemResource(production));
// Later YAML documents take precedence; test properties remain above all of them.
for (int i = sources.size() - 1; i >= 0; i--) {
var source = (EnumerablePropertySource<?>) sources.get(i);
var properties = new LinkedHashMap<String, Object>();
for (String key : source.getPropertyNames()) {
if (!key.equals("spring.config.import") && !key.startsWith("spring.config.import[")) {
properties.put(key, source.getProperty(key));
}
}
context.getEnvironment().getPropertySources().addLast(
new MapPropertySource("offline-" + source.getName(), properties));
}
} catch (IOException failure) {
throw new IllegalStateException("Cannot load production Gateway configuration for offline tests", failure);
}
}
}
@@ -0,0 +1,2 @@
# Offline bootstrap only. OfflineGatewayConfigurationInitializer loads the production
# application.yml after config-data processing, excluding only Nacos import keys.