From 2439ebb0edb05bde5d2a33c01ac2639ca5b56cef Mon Sep 17 00:00:00 2001
From: "lingxiao,wu" <51630311+lingxiao-wu@users.noreply.github.com>
Date: Sat, 2 Jul 2022 18:34:17 +0800
Subject: [PATCH] UT: add Polaris LoadBalancer unit test (#373)
---
CHANGELOG.md | 1 +
.../pom.xml | 7 ++-
...arisLoadBalancerAutoConfigurationTest.java | 61 ++++++++++++++++++-
.../PolarisRibbonClientConfigurationTest.java | 55 +++++++++++++++++
4 files changed, 121 insertions(+), 3 deletions(-)
create mode 100644 spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfigurationTest.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2c0aed5a1..745526838 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -33,5 +33,6 @@
- [docs:update logo in README.](https://github.com/Tencent/spring-cloud-tencent/pull/358)
- [Refator JacksonUtils and JacksonUtilsTest](https://github.com/Tencent/spring-cloud-tencent/pull/365)
- [docs: Fix javadoc
error](https://github.com/Tencent/spring-cloud-tencent/pull/371)
+- [UT: add Polaris LoadBalancer unit test](https://github.com/Tencent/spring-cloud-tencent/pull/373)
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/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 eab96ee76..d1111dd02 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.config.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..d514af6db
--- /dev/null
+++ b/spring-cloud-tencent-polaris-loadbalancer/src/test/java/com/tencent/cloud/polaris/loadbalancer/config/PolarisRibbonClientConfigurationTest.java
@@ -0,0 +1,55 @@
+/*
+ * Tencent is pleased to support the open source community by making Spring Cloud Tencent available.
+ *
+ * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
+ *
+ * Licensed under the BSD 3-Clause License (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://opensource.org/licenses/BSD-3-Clause
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed
+ * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+
+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 {
+ }
+
+}