feat(openapi): FlowCenterClient 切 SDK appCode 寻址(显式>legacy>fallback),application.yml 出厂 base-host 默认内部网关
build / build-push (push) Successful in 1m18s

This commit is contained in:
chenxing
2026-10-22 17:14:03 +08:00
parent e51201134a
commit f816fc390e
3 changed files with 67 additions and 21 deletions
@@ -0,0 +1,52 @@
package com.yunhai.svchall.service.impl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yunhai.platform.openapi.core.*;
import org.junit.jupiter.api.Test;
import org.springframework.test.util.ReflectionTestUtils;
import static org.junit.jupiter.api.Assertions.*;
class FlowCenterClientRoutingTest {
private YschOpenCall call(String gateway) {
OpenApiProperties open = new OpenApiProperties();
open.setBaseHost(gateway);
return new YschOpenCall(new YschCallProperties(), open, new ObjectMapper(), null);
}
@Test
void enabledWithoutExplicitTargetUsesSdk() {
YschOpenCall call = call("http://gateway:10013");
assertFalse(call.hasTarget("flow-center"));
FlowCenterClient client = new FlowCenterClient(call, new ObjectMapper(), true, "");
assertTrue(client.enabled());
assertEquals(true, ReflectionTestUtils.getField(client, "directoryResolved"));
assertNull(ReflectionTestUtils.getField(client, "flowSpec"));
assertEquals("http://gateway:10013/form-center", call.resolveTarget("form-center").resolveBaseUrl());
assertDoesNotThrow(() -> new FormCenterCatalogClient(call));
assertDoesNotThrow(() -> new FcSubmissionClient(call));
assertDoesNotThrow(() -> new FormSyncClient(call));
}
@Test
void explicitThenLegacyThenSdkPriority() {
YschCallProperties props = new YschCallProperties();
props.getTargets().put("flow-center", TargetSpec.of("http://explicit", "/flow-center"));
YschOpenCall explicit = new YschOpenCall(props, new ObjectMapper(), null);
FlowCenterClient client = new FlowCenterClient(explicit, new ObjectMapper(), true, "http://legacy/ctx");
assertEquals(true, ReflectionTestUtils.getField(client, "directoryResolved"));
client = new FlowCenterClient(call("http://gateway"), new ObjectMapper(), true, "http://legacy/ctx");
assertEquals(false, ReflectionTestUtils.getField(client, "directoryResolved"));
TargetSpec spec = (TargetSpec) ReflectionTestUtils.getField(client, "flowSpec");
assertEquals("http://legacy/ctx", spec.resolveBaseUrl());
}
@Test
void enabledWithoutResolvableAddressFailsButDisabledDoesNot() {
assertThrows(IllegalStateException.class,
() -> new FlowCenterClient(call(null), new ObjectMapper(), true, ""));
assertThrows(IllegalStateException.class,
() -> new FlowCenterClient(call("http://gateway/open-gateway"), new ObjectMapper(), true, ""));
assertFalse(new FlowCenterClient(call(null), new ObjectMapper(), false, "").enabled());
assertFalse(new FlowCenterClient(call(null), new ObjectMapper(), false, "unused-legacy-value").enabled());
}
}