diff --git a/CHANGELOG.md b/CHANGELOG.md index 552023141..72e6d087c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,3 +6,5 @@ - [Optimize: Register the service with the ProviderAPI#registerInstance method.](https://github.com/Tencent/spring-cloud-tencent/pull/686) - [docs:update PR template.](https://github.com/Tencent/spring-cloud-tencent/pull/690) - [Optimize: update spring-cloud-starter-tencent-all pom to jar](https://github.com/Tencent/spring-cloud-tencent/pull/694) +- [Optimize: remote deprecated method](https://github.com/Tencent/spring-cloud-tencent/pull/697) +- [Test:support environment variable metadata test](https://github.com/Tencent/spring-cloud-tencent/pull/698) diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessor.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessor.java index 4828556a9..5a9a7d5ea 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessor.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessor.java @@ -30,7 +30,6 @@ import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.cloud.client.loadbalancer.LoadBalancerProperties; import org.springframework.cloud.gateway.config.GatewayLoadBalancerProperties; import org.springframework.cloud.gateway.filter.ReactiveLoadBalancerClientFilter; import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory; @@ -56,14 +55,13 @@ public class ReactiveLoadBalancerClientFilterBeanPostProcessor implements BeanPo if (bean instanceof ReactiveLoadBalancerClientFilter) { LoadBalancerClientFactory loadBalancerClientFactory = this.factory.getBean(LoadBalancerClientFactory.class); GatewayLoadBalancerProperties gatewayLoadBalancerProperties = this.factory.getBean(GatewayLoadBalancerProperties.class); - LoadBalancerProperties loadBalancerProperties = this.factory.getBean(LoadBalancerProperties.class); List routerLabelResolvers = BeanFactoryUtils.getBeans(factory, SpringWebRouterLabelResolver.class); StaticMetadataManager staticMetadataManager = this.factory.getBean(StaticMetadataManager.class); RouterRuleLabelResolver routerRuleLabelResolver = this.factory.getBean(RouterRuleLabelResolver.class); PolarisContextProperties polarisContextProperties = this.factory.getBean(PolarisContextProperties.class); return new PolarisReactiveLoadBalancerClientFilter( - loadBalancerClientFactory, gatewayLoadBalancerProperties, loadBalancerProperties, + loadBalancerClientFactory, gatewayLoadBalancerProperties, staticMetadataManager, routerRuleLabelResolver, routerLabelResolvers, polarisContextProperties); } return bean; diff --git a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java index 1fd3e2186..7cc6fdeb9 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java +++ b/spring-cloud-starter-tencent-polaris-router/src/main/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilter.java @@ -85,7 +85,6 @@ public class PolarisReactiveLoadBalancerClientFilter extends ReactiveLoadBalance private final LoadBalancerClientFactory clientFactory; private final GatewayLoadBalancerProperties gatewayLoadBalancerProperties; - private final LoadBalancerProperties loadBalancerProperties; private final StaticMetadataManager staticMetadataManager; private final RouterRuleLabelResolver routerRuleLabelResolver; private final List routerLabelResolvers; @@ -93,16 +92,14 @@ public class PolarisReactiveLoadBalancerClientFilter extends ReactiveLoadBalance public PolarisReactiveLoadBalancerClientFilter(LoadBalancerClientFactory clientFactory, GatewayLoadBalancerProperties gatewayLoadBalancerProperties, - LoadBalancerProperties loadBalancerProperties, StaticMetadataManager staticMetadataManager, RouterRuleLabelResolver routerRuleLabelResolver, List routerLabelResolvers, PolarisContextProperties polarisContextProperties) { - super(clientFactory, gatewayLoadBalancerProperties, loadBalancerProperties); + super(clientFactory, gatewayLoadBalancerProperties); this.clientFactory = clientFactory; this.gatewayLoadBalancerProperties = gatewayLoadBalancerProperties; - this.loadBalancerProperties = loadBalancerProperties; this.staticMetadataManager = staticMetadataManager; this.routerRuleLabelResolver = routerRuleLabelResolver; this.routerLabelResolvers = routerLabelResolvers; @@ -139,7 +136,7 @@ public class PolarisReactiveLoadBalancerClientFilter extends ReactiveLoadBalance RequestData requestData = new RequestData(request.getMethod(), request.getURI(), routerHttpHeaders, new HttpHeaders(), new HashMap<>()); DefaultRequest lbRequest = new DefaultRequest<>(new RequestDataContext( - requestData, getHint(serviceId, loadBalancerProperties.getHint()))); + requestData, getHint(serviceId))); return choose(lbRequest, serviceId, supportedLifecycleProcessors).doOnNext(response -> { @@ -200,7 +197,9 @@ public class PolarisReactiveLoadBalancerClientFilter extends ReactiveLoadBalance } // no actual used - private String getHint(String serviceId, Map hints) { + private String getHint(String serviceId) { + LoadBalancerProperties loadBalancerProperties = clientFactory.getProperties(serviceId); + Map hints = loadBalancerProperties.getHint(); String defaultHint = hints.getOrDefault("default", "default"); String hintPropertyValue = hints.get(serviceId); return hintPropertyValue != null ? hintPropertyValue : defaultHint; diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessorTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessorTest.java index 883cb779d..1d5e79def 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessorTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/beanprocessor/ReactiveLoadBalancerClientFilterBeanPostProcessorTest.java @@ -64,7 +64,6 @@ public class ReactiveLoadBalancerClientFilterBeanPostProcessorTest { public void testWrapReactiveLoadBalancerClientFilter() { when(beanFactory.getBean(LoadBalancerClientFactory.class)).thenReturn(loadBalancerClientFactory); when(beanFactory.getBean(GatewayLoadBalancerProperties.class)).thenReturn(gatewayLoadBalancerProperties); - when(beanFactory.getBean(LoadBalancerProperties.class)).thenReturn(loadBalancerProperties); when(beanFactory.getBean(StaticMetadataManager.class)).thenReturn(staticMetadataManager); when(beanFactory.getBean(RouterRuleLabelResolver.class)).thenReturn(routerRuleLabelResolver); diff --git a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java index c872302a1..353c8b82a 100644 --- a/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java +++ b/spring-cloud-starter-tencent-polaris-router/src/test/java/com/tencent/cloud/polaris/router/scg/PolarisReactiveLoadBalancerClientFilterTest.java @@ -112,7 +112,7 @@ public class PolarisReactiveLoadBalancerClientFilterTest { @Test public void testGenRouterHttpHeaders() throws UnsupportedEncodingException { PolarisReactiveLoadBalancerClientFilter filter = new PolarisReactiveLoadBalancerClientFilter(loadBalancerClientFactory, - gatewayLoadBalancerProperties, loadBalancerProperties, staticMetadataManager, routerRuleLabelResolver, + gatewayLoadBalancerProperties, staticMetadataManager, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver), polarisContextProperties); Map localMetadata = new HashMap<>(); diff --git a/spring-cloud-tencent-commons/pom.xml b/spring-cloud-tencent-commons/pom.xml index 6cf993ed3..5e373d142 100644 --- a/spring-cloud-tencent-commons/pom.xml +++ b/spring-cloud-tencent-commons/pom.xml @@ -99,6 +99,11 @@ spring-boot-actuator-autoconfigure true - + + uk.org.webcompere + system-stubs-junit4 + test + + diff --git a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java index 9581d8ca5..63ea080fb 100644 --- a/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java +++ b/spring-cloud-tencent-commons/src/main/java/com/tencent/cloud/common/metadata/StaticMetadataManager.java @@ -107,7 +107,8 @@ public class StaticMetadataManager { String value = entry.getValue(); if (StringUtils.isNotBlank(key) && (key.startsWith(ENV_METADATA_PREFIX) || key.equals(ENV_TRAFFIC_CONTENT_RAW_TRANSHEADERS)) - && !key.equals(ENV_METADATA_CONTENT_TRANSITIVE)) { + && !key.equals(ENV_METADATA_CONTENT_TRANSITIVE) + && !key.equals(ENV_METADATA_CONTENT_DISPOSABLE)) { String sourceKey = ""; if (key.equals(ENV_TRAFFIC_CONTENT_RAW_TRANSHEADERS)) { sourceKey = key; diff --git a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java index 64aa20bcb..4ca51fdc8 100644 --- a/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java +++ b/spring-cloud-tencent-commons/src/test/java/com/tencent/cloud/common/metadata/StaticMetadataManagerTest.java @@ -27,10 +27,12 @@ import java.util.Set; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.cloud.common.spi.InstanceMetadataProvider; import org.junit.Assert; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import uk.org.webcompere.systemstubs.rules.EnvironmentVariablesRule; import org.springframework.util.CollectionUtils; @@ -48,6 +50,12 @@ public class StaticMetadataManagerTest { @Mock private MetadataLocalProperties metadataLocalProperties; + /** + * EnvironmentVariablesRule. + */ + @Rule + public EnvironmentVariablesRule rule = new EnvironmentVariablesRule(); + @Test public void testParseConfigMetadata() { Map content = new HashMap<>(); @@ -134,12 +142,12 @@ public class StaticMetadataManagerTest { Assert.assertEquals("v1", metadata.get("k1")); Assert.assertEquals("v22", metadata.get("k2")); - Assert.assertEquals("zone2", metadataManager.getZone()); - Assert.assertEquals("region1", metadataManager.getRegion()); - Assert.assertTrue(CollectionUtils.isEmpty(metadataManager.getAllEnvMetadata())); Assert.assertTrue(CollectionUtils.isEmpty(metadataManager.getEnvTransitiveMetadata())); + Assert.assertEquals("zone2", metadataManager.getZone()); + Assert.assertEquals("region1", metadataManager.getRegion()); + Map locationInfo = metadataManager.getLocationMetadata(); Assert.assertEquals("zone2", locationInfo.get("zone")); Assert.assertEquals("region1", locationInfo.get("region")); @@ -147,6 +155,32 @@ public class StaticMetadataManagerTest { } + @Test + public void testEnvMetadata() { + // set env + rule.set("SCT_METADATA_CONTENT_TRANSITIVE", "transitiveKey"); + rule.set("SCT_METADATA_CONTENT_DISPOSABLE", "disposableKey"); + rule.set("SCT_METADATA_CONTENT_transitiveKey", "transitiveValue"); + rule.set("SCT_METADATA_CONTENT_disposableKey", "disposableValue"); + rule.set("SCT_TRAFFIC_CONTENT_RAW_TRANSHEADERS", "header1,header2,header3"); + + StaticMetadataManager metadataManager = new StaticMetadataManager(metadataLocalProperties, null); + Map allEnvMetadata = metadataManager.getAllEnvMetadata(); + Assert.assertTrue(allEnvMetadata.containsKey("transitiveKey")); + Assert.assertTrue(allEnvMetadata.containsKey("disposableKey")); + + Map envDisposableMetadata = metadataManager.getEnvDisposableMetadata(); + Assert.assertTrue(envDisposableMetadata.containsKey("disposableKey")); + Assert.assertEquals(envDisposableMetadata.get("disposableKey"), "disposableValue"); + + Map envTransitiveMetadata = metadataManager.getEnvTransitiveMetadata(); + Assert.assertTrue(envTransitiveMetadata.containsKey("transitiveKey")); + Assert.assertEquals(envTransitiveMetadata.get("transitiveKey"), "transitiveValue"); + + String transHeaderFromEnv = metadataManager.getTransHeaderFromEnv(); + Assert.assertEquals(transHeaderFromEnv, "header1,header2,header3"); + } + static class MockedMetadataProvider implements InstanceMetadataProvider { @Override diff --git a/spring-cloud-tencent-dependencies/pom.xml b/spring-cloud-tencent-dependencies/pom.xml index 743cb3cd9..52098b299 100644 --- a/spring-cloud-tencent-dependencies/pom.xml +++ b/spring-cloud-tencent-dependencies/pom.xml @@ -80,6 +80,7 @@ 1.12.10 3.16.1 1.69 + 2.0.1 3.2.0 @@ -247,6 +248,13 @@ ${mocktio.version} test + + + uk.org.webcompere + system-stubs-junit4 + ${system-stubs-junit4.version} + test +