完成单机TEST统一入口与可靠投递回归收尾
This commit is contained in:
+11
@@ -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",
|
||||
|
||||
+2
-3
@@ -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",
|
||||
|
||||
+11
@@ -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",
|
||||
|
||||
+43
@@ -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.
|
||||
Reference in New Issue
Block a user