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 {
+
+ }
+
+}