|
|
@ -17,13 +17,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
package com.tencent.cloud.polaris.loadbalancer.config;
|
|
|
|
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.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 com.tencent.polaris.router.api.core.RouterAPI;
|
|
|
|
import org.junit.Test;
|
|
|
|
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.AutoConfigurations;
|
|
|
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
|
|
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
|
|
|
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
|
|
|
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 org.springframework.context.annotation.Configuration;
|
|
|
|
|
|
|
|
|
|
|
|
import static com.tencent.polaris.test.common.Consts.PORT;
|
|
|
|
import static com.tencent.polaris.test.common.Consts.PORT;
|
|
|
@ -37,10 +56,11 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public class PolarisLoadBalancerAutoConfigurationTest {
|
|
|
|
public class PolarisLoadBalancerAutoConfigurationTest {
|
|
|
|
|
|
|
|
|
|
|
|
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
|
|
|
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
|
|
|
.withConfiguration(AutoConfigurations.of(PolarisRibbonTest.class,
|
|
|
|
.withConfiguration(AutoConfigurations.of(PolarisRibbonTest.class,
|
|
|
|
PolarisLoadBalancerAutoConfiguration.class,
|
|
|
|
PolarisLoadBalancerAutoConfiguration.class,
|
|
|
|
PolarisContextAutoConfiguration.class))
|
|
|
|
PolarisContextAutoConfiguration.class,
|
|
|
|
|
|
|
|
RibbonAutoConfiguration.class))
|
|
|
|
.withPropertyValues("spring.application.name=" + SERVICE_PROVIDER)
|
|
|
|
.withPropertyValues("spring.application.name=" + SERVICE_PROVIDER)
|
|
|
|
.withPropertyValues("server.port=" + PORT)
|
|
|
|
.withPropertyValues("server.port=" + PORT)
|
|
|
|
.withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081");
|
|
|
|
.withPropertyValues("spring.cloud.polaris.address=grpc://127.0.0.1:10081");
|
|
|
@ -50,13 +70,50 @@ public class PolarisLoadBalancerAutoConfigurationTest {
|
|
|
|
this.contextRunner.run(context -> {
|
|
|
|
this.contextRunner.run(context -> {
|
|
|
|
assertThat(context).hasSingleBean(RouterAPI.class);
|
|
|
|
assertThat(context).hasSingleBean(RouterAPI.class);
|
|
|
|
assertThat(context).hasSingleBean(PolarisLoadBalancerProperties.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
|
|
|
|
@Configuration
|
|
|
|
@EnableAutoConfiguration
|
|
|
|
@EnableAutoConfiguration
|
|
|
|
static class PolarisRibbonTest {
|
|
|
|
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);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|