add ribbon testcase

pull/373/head
wulingxiao 3 years ago
parent 5cc9a5cf5d
commit f3ec666c72

@ -31,7 +31,6 @@ import org.springframework.context.annotation.Configuration;
*
* @author Haotian Zhang, Andrew Shan, Jie Cheng
*/
@Configuration
public class PolarisRibbonServerListConfiguration {
@Bean

@ -55,6 +55,11 @@
<artifactId>mockito-inline</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>polaris-discovery-client</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

@ -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<Server> serverList,
ConsumerAPI consumerAPI, PolarisLoadBalancerProperties polarisLoadBalancerProperties) {
ConsumerAPI consumerapi, PolarisLoadBalancerProperties polarisLoadBalancerProperties) {
return new PolarisLoadBalancer(iClientConfig, iRule, iPing, serverList,
consumerAPI, polarisLoadBalancerProperties);
consumerapi, polarisLoadBalancerProperties);
}
}

@ -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<Server> serverList() {
return new StaticServerList<>();
}
@Bean
public ConsumerAPI consumerAPI() {
return new DefaultConsumerAPI(sdkContext);
}
}
}

@ -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 {
}
}
Loading…
Cancel
Save