From f3ec666c729e65c6b4ef662ecbb35ae48fa0fc18 Mon Sep 17 00:00:00 2001 From: wulingxiao <1251605638@qqcom> Date: Sat, 2 Jul 2022 11:31:27 +0800 Subject: [PATCH] add ribbon testcase --- .../PolarisRibbonServerListConfiguration.java | 1 - .../pom.xml | 7 ++- .../PolarisRibbonClientConfiguration.java | 6 +- ...arisLoadBalancerAutoConfigurationTest.java | 61 ++++++++++++++++++- .../PolarisRibbonClientConfigurationTest.java | 38 ++++++++++++ 5 files changed, 105 insertions(+), 8 deletions(-) create mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfigurationTest.java diff --git a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java index f79bd2dba..6dd063d30 100644 --- a/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java +++ b/spring-cloud-starter-tencent-polaris-discovery/src/main/java/com/tencent/cloud/polaris/ribbon/PolarisRibbonServerListConfiguration.java @@ -31,7 +31,6 @@ import org.springframework.context.annotation.Configuration; * * @author Haotian Zhang, Andrew Shan, Jie Cheng */ -@Configuration public class PolarisRibbonServerListConfiguration { @Bean diff --git a/spring-cloud-tencent-polaris-loadbalancer/pom.xml b/spring-cloud-tencent-polaris-loadbalancer/pom.xml index 7475e83fb..2a26fcd8f 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/pom.xml +++ b/spring-cloud-tencent-polaris-loadbalancer/pom.xml @@ -55,7 +55,12 @@ mockito-inline test + + com.tencent.polaris + polaris-discovery-client + test + - + diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfiguration.java b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfiguration.java index 3fbc2c76d..208a1aaa5 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfiguration.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/main/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfiguration.java @@ -28,22 +28,20 @@ import com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancer; import com.tencent.polaris.api.core.ConsumerAPI; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; /** * Configuration of ribbon client of Polaris. * * @author Haotian Zhang */ -@Configuration public class PolarisRibbonClientConfiguration { @Bean public ILoadBalancer polarisLoadBalancer(IClientConfig iClientConfig, IRule iRule, IPing iPing, ServerList serverList, - ConsumerAPI consumerAPI, PolarisLoadBalancerProperties polarisLoadBalancerProperties) { + ConsumerAPI consumerapi, PolarisLoadBalancerProperties polarisLoadBalancerProperties) { return new PolarisLoadBalancer(iClientConfig, iRule, iPing, serverList, - consumerAPI, polarisLoadBalancerProperties); + consumerapi, polarisLoadBalancerProperties); } } diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java index 1c89de2d6..ec970a172 100644 --- a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java +++ b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisLoadBalancerAutoConfigurationTest.java @@ -17,13 +17,32 @@ package com.tencent.cloud.polaris.loadbalancer.config; +import com.netflix.client.config.DefaultClientConfigImpl; +import com.netflix.client.config.IClientConfig; +import com.netflix.loadbalancer.ILoadBalancer; +import com.netflix.loadbalancer.IPing; +import com.netflix.loadbalancer.IRule; +import com.netflix.loadbalancer.NoOpPing; +import com.netflix.loadbalancer.RandomRule; +import com.netflix.loadbalancer.Server; +import com.netflix.loadbalancer.ServerList; import com.tencent.cloud.polaris.context.PolarisContextAutoConfiguration; +import com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancer; +import com.tencent.polaris.api.core.ConsumerAPI; +import com.tencent.polaris.client.api.SDKContext; +import com.tencent.polaris.discovery.client.api.DefaultConsumerAPI; import com.tencent.polaris.router.api.core.RouterAPI; import org.junit.Test; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; +import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; +import org.springframework.cloud.netflix.ribbon.SpringClientFactory; +import org.springframework.cloud.netflix.ribbon.StaticServerList; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import static com.tencent.polaris.test.common.Consts.PORT; @@ -37,10 +56,11 @@ import static org.assertj.core.api.Assertions.assertThat; */ public class PolarisLoadBalancerAutoConfigurationTest { - private ApplicationContextRunner contextRunner = new ApplicationContextRunner() + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() .withConfiguration(AutoConfigurations.of(PolarisRibbonTest.class, PolarisLoadBalancerAutoConfiguration.class, - PolarisContextAutoConfiguration.class)) + PolarisContextAutoConfiguration.class, + RibbonAutoConfiguration.class)) .withPropertyValues("spring.application.name=" + SERVICE_PROVIDER) .withPropertyValues("server.port=" + PORT) .withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081"); @@ -50,13 +70,50 @@ public class PolarisLoadBalancerAutoConfigurationTest { this.contextRunner.run(context -> { assertThat(context).hasSingleBean(RouterAPI.class); assertThat(context).hasSingleBean(PolarisLoadBalancerProperties.class); + assertThat(hasSinglePolarisLoadBalancer(context)).isTrue(); }); } + private boolean hasSinglePolarisLoadBalancer(BeanFactory beanFactory) { + SpringClientFactory contextBean = beanFactory.getBean(SpringClientFactory.class); + ILoadBalancer loadBalancer = contextBean.getLoadBalancer(SERVICE_PROVIDER); + return loadBalancer instanceof PolarisLoadBalancer; + } + @Configuration @EnableAutoConfiguration static class PolarisRibbonTest { + @Autowired + private SDKContext sdkContext; + + @Bean + public IClientConfig iClientConfig() { + DefaultClientConfigImpl config = new DefaultClientConfigImpl(); + config.setClientName(SERVICE_PROVIDER); + return config; + } + + @Bean + public IRule iRule() { + return new RandomRule(); + } + + @Bean + public IPing iPing() { + return new NoOpPing(); + } + + @Bean + public ServerList serverList() { + return new StaticServerList<>(); + } + + @Bean + public ConsumerAPI consumerAPI() { + return new DefaultConsumerAPI(sdkContext); + } + } } diff --git a/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfigurationTest.java b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfigurationTest.java new file mode 100644 index 000000000..cf7dd06a6 --- /dev/null +++ b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfigurationTest.java @@ -0,0 +1,38 @@ +package com.tencent.cloud.polaris.loadbalancer.config; + +import com.tencent.cloud.polaris.loadbalancer.PolarisLoadBalancer; +import org.junit.Test; +import org.springframework.boot.autoconfigure.AutoConfigurations; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.runner.ApplicationContextRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Test for {@link PolarisRibbonClientConfiguration}. + * + * @author wlx + * @date 2022/7/2 10:36 上午 + */ +public class PolarisRibbonClientConfigurationTest { + + private final ApplicationContextRunner applicationContextRunner = new ApplicationContextRunner(); + + @Test + public void testDefaultInitialization() { + this.applicationContextRunner + .withConfiguration(AutoConfigurations.of( + TestApplication.class, + PolarisRibbonClientConfiguration.class)) + .run(context -> { + assertThat(context).hasSingleBean(PolarisRibbonClientConfiguration.class); + assertThat(context).hasSingleBean(PolarisLoadBalancer.class); + }); + } + + @SpringBootApplication + static class TestApplication { + + } + +}