test(deploy): verify unified TEST and gray environment contracts

This commit is contained in:
2026-10-07 11:17:28 +08:00
parent ec0c06ff88
commit 7ff6512864
4 changed files with 18 additions and 8 deletions
@@ -16,12 +16,13 @@ class ExportInfrastructureContractTest {
assertTrue(compose.contains("FILE_EXPORT_PUBLISHER_ENABLED: ${FILE_EXPORT_PUBLISHER_ENABLED:-false}")); assertTrue(compose.contains("FILE_EXPORT_PUBLISHER_ENABLED: ${FILE_EXPORT_PUBLISHER_ENABLED:-false}"));
assertTrue(compose.contains("FILE_EXPORT_RECONCILER_ENABLED: ${FILE_EXPORT_RECONCILER_ENABLED:-false}")); assertTrue(compose.contains("FILE_EXPORT_RECONCILER_ENABLED: ${FILE_EXPORT_RECONCILER_ENABLED:-false}"));
assertTrue(compose.contains("-Xms1g -Xmx2g")); assertTrue(compose.contains("-Xms1g -Xmx2g"));
assertTrue(compose.contains("MQ_TOPIC_PREFIX: test-")); assertTrue(compose.contains("MQ_TOPIC_PREFIX: ${MQ_TOPIC_PREFIX:-test-}"));
assertTrue(compose.contains("ROCKETMQ_NAME_SERVER: ${ROCKETMQ_NAME_SERVER}")); assertTrue(compose.contains("ROCKETMQ_NAME_SERVER: ${ROCKETMQ_NAME_SERVER}"));
String entry=read("..","deploy","scripts","deploy-services.sh"); String entry=read("..","deploy","scripts","deploy-services.sh");
assertTrue(entry.contains("sh deploy/scripts/deploy-built-service.sh")); assertTrue(entry.contains("sh deploy/scripts/deploy-built-service.sh"));
String deployScript=read("..","deploy","scripts","deploy-built-service.sh"); String deployScript=read("..","deploy","scripts","deploy-built-service.sh");
assertTrue(deployScript.contains("MQ_TOPIC_PREFIX must be test-")); assertTrue(deployScript.contains("MQ_TOPIC_PREFIX must be $DEPLOY_ENV-"));
assertTrue(deployScript.contains("[ \"$(env_file_value MQ_TOPIC_PREFIX)\" = \"$DEPLOY_ENV-\" ]"));
assertTrue(deployScript.contains("ROCKETMQ_NAME_SERVER")); assertTrue(deployScript.contains("ROCKETMQ_NAME_SERVER"));
assertTrue(deployScript.contains("env_file_value")); assertTrue(deployScript.contains("env_file_value"));
} }
@@ -1,10 +1,12 @@
package com.baiyue.firstleg.client; package com.baiyue.firstleg.client;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.util.PropertyPlaceholderHelper;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -23,11 +25,18 @@ class EventBridgeClientDeploymentContractTest {
} }
@Test @Test
void testComposeUsesDirectBusinessServiceDns() throws Exception { void composeUsesDirectBusinessServiceDnsForTestAndGray() throws Exception {
String compose = Files.readString(REPOSITORY_ROOT.resolve("deploy/docker-compose.yml")); String compose = Files.readString(REPOSITORY_ROOT.resolve("deploy/docker-compose.yml"));
assertTrue(compose.contains("LASTLEG_SERVICE_URL: http://lastleg-service:9303")); assertTrue(compose.contains("LASTLEG_SERVICE_URL: http://lastleg-service:9303"));
assertTrue(compose.contains("firstleg-test-network")); String networkName = compose.lines().map(String::strip)
.filter(line -> line.startsWith("name: firstleg-") && line.endsWith("-network"))
.findFirst().orElseThrow().substring("name: ".length());
assertEquals("firstleg-${DEPLOY_ENV:-test}-network", networkName);
var placeholders = new PropertyPlaceholderHelper("${", "}", ":-", false);
assertEquals("firstleg-test-network", placeholders.replacePlaceholders(networkName, key -> null));
assertEquals("firstleg-production-network", placeholders.replacePlaceholders(networkName,
key -> "DEPLOY_ENV".equals(key) ? "production" : null));
assertFalse(compose.contains("event-bridge")); assertFalse(compose.contains("event-bridge"));
} }
} }
@@ -74,7 +74,7 @@ class Phase4BrowserApiBoundaryTest {
} }
@Test @Test
void lastlegReachesPrintThroughTheUnifiedTestNetwork() throws Exception { void lastlegReachesPrintThroughTheUnifiedEnvironmentNetwork() throws Exception {
Path composePath = Path.of("deploy/docker-compose.yml"); Path composePath = Path.of("deploy/docker-compose.yml");
if (!Files.exists(composePath)) composePath = Path.of("..").resolve(composePath); if (!Files.exists(composePath)) composePath = Path.of("..").resolve(composePath);
String compose = Files.readString(composePath); String compose = Files.readString(composePath);
@@ -83,7 +83,7 @@ class Phase4BrowserApiBoundaryTest {
assertTrue(lastleg.contains("<<: *common-environment")); assertTrue(lastleg.contains("<<: *common-environment"));
assertTrue(lastleg.contains("PRINT_SERVICE_URL: ${PRINT_SERVICE_URL:-http://print:9207}")); assertTrue(lastleg.contains("PRINT_SERVICE_URL: ${PRINT_SERVICE_URL:-http://print:9207}"));
assertTrue(compose.contains("networks: [firstleg-network, infra-network]")); assertTrue(compose.contains("networks: [firstleg-network, infra-network]"));
assertTrue(compose.contains("name: firstleg-test-network")); assertTrue(compose.contains("name: firstleg-${DEPLOY_ENV:-test}-network"));
assertFalse(lastleg.contains("ports:")); assertFalse(lastleg.contains("ports:"));
assertFalse(compose.contains("gateway-overseas")); assertFalse(compose.contains("gateway-overseas"));
} }
@@ -49,12 +49,12 @@ class DomesticPartnerWarehouseClientContractTest {
.doesNotContain("ports:"); .doesNotContain("ports:");
assertThat(compose).contains("INTERNAL_SERVICE_TOKEN: ${INTERNAL_SERVICE_TOKEN}") assertThat(compose).contains("INTERNAL_SERVICE_TOKEN: ${INTERNAL_SERVICE_TOKEN}")
.contains("NACOS_USERNAME: ${NACOS_USERNAME}") .contains("NACOS_USERNAME: ${NACOS_USERNAME}")
.contains("NACOS_NAMESPACE: ${NACOS_NAMESPACE:?actual TEST namespace ID required}") .contains("NACOS_NAMESPACE: ${NACOS_NAMESPACE:?actual environment namespace ID required}")
.contains("JWT_JWKS_URI: http://auth:9100/api/auth/.well-known/jwks.json") .contains("JWT_JWKS_URI: http://auth:9100/api/auth/.well-known/jwks.json")
.doesNotContain("OVERSEAS_NACOS_NAMESPACE", "OVERSEAS_NACOS_USERNAME", "FIRSTLEG_EVENT_BRIDGE_URL"); .doesNotContain("OVERSEAS_NACOS_NAMESPACE", "OVERSEAS_NACOS_USERNAME", "FIRSTLEG_EVENT_BRIDGE_URL");
assertThat(common).contains("session-mode: redis") assertThat(common).contains("session-mode: redis")
.contains("jwk-set-uri: ${JWT_JWKS_URI:http://auth:9100/api/auth/.well-known/jwks.json}"); .contains("jwk-set-uri: ${JWT_JWKS_URI:http://auth:9100/api/auth/.well-known/jwks.json}");
assertThat(deploy).contains("Only test is supported") assertThat(deploy).contains("Only test and production are supported")
.contains("NACOS_SERVER_ADDR NACOS_NAMESPACE NACOS_USERNAME NACOS_PASSWORD") .contains("NACOS_SERVER_ADDR NACOS_NAMESPACE NACOS_USERNAME NACOS_PASSWORD")
.contains("REDIS_TOKEN_KEY_PREFIX INTERNAL_SERVICE_TOKEN") .contains("REDIS_TOKEN_KEY_PREFIX INTERNAL_SERVICE_TOKEN")
.contains("lastleg-service) db_prefix=LASTLEG"); .contains("lastleg-service) db_prefix=LASTLEG");