Skip to content

Commit

Permalink
Upgrade spring cloud dependencies (#1645)
Browse files Browse the repository at this point in the history
* Use '2020.0.1' instead of '2020.0.0-M3'
* Allow handle of fabric8 kubernetes client

Close #1644
  • Loading branch information
antechrestos committed Mar 9, 2021
1 parent 94d9d89 commit 35211dd
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 50 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@

<!-- used dependencies versions -->
<spring-boot.version>2.4.3</spring-boot.version>
<spring-cloud.version>2020.0.0-M3</spring-cloud.version>
<spring-cloud.version>2020.0.1</spring-cloud.version>
<wiremock.version>2.27.2</wiremock.version>
<hazelcast-tests.version>4.0.3</hazelcast-tests.version>
<findbugs-jsr305.version>3.0.2</findbugs-jsr305.version>
Expand Down
16 changes: 14 additions & 2 deletions spring-boot-admin-server-cloud/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -61,10 +61,22 @@
</exclusion>
</exclusions>
</dependency>
<!-- Optional Kuberneteds Discovery Client -->
<!-- Optional Kubernetes Discovery using Official Kubernetes Client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes</artifactId>
<artifactId>spring-cloud-starter-kubernetes-client</artifactId>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Optional Kubernetes Discovery using Fabric 8 Kubernetes Java Client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-kubernetes-fabric8</artifactId>
<optional>true</optional>
<exclusions>
<exclusion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,17 @@

import com.netflix.discovery.EurekaClient;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient;
import org.springframework.cloud.kubernetes.client.discovery.KubernetesInformerDiscoveryClient;
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

import de.codecentric.boot.admin.server.cloud.discovery.DefaultServiceInstanceConverter;
Expand Down Expand Up @@ -79,7 +82,7 @@ public EurekaServiceInstanceConverter serviceInstanceConverter() {

@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean({ ServiceInstanceConverter.class })
@ConditionalOnBean(KubernetesDiscoveryClient.class)
@Conditional(KubernetesDiscoveryClientCondition.class)
public static class KubernetesConverterConfiguration {

@Bean
Expand All @@ -90,4 +93,22 @@ public KubernetesServiceInstanceConverter serviceInstanceConverter() {

}

private static class KubernetesDiscoveryClientCondition extends AnyNestedCondition {

KubernetesDiscoveryClientCondition() {
super(ConfigurationPhase.REGISTER_BEAN);
}

@ConditionalOnBean(KubernetesInformerDiscoveryClient.class)
static class OfficialKubernetesCondition {

}

@ConditionalOnBean(KubernetesDiscoveryClient.class)
static class Fabric8KubernetesCondition {

}

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryProperties;
import org.springframework.context.ConfigurableApplicationContext;
Expand Down Expand Up @@ -66,7 +67,7 @@ public void setUp() {
this.instance = new SpringApplicationBuilder().sources(TestAdminApplication.class)
.web(WebApplicationType.REACTIVE).run("--server.port=0", "--management.endpoints.web.base-path=/mgmt",
"--endpoints.health.enabled=true", "--info.test=foobar", "--eureka.client.enabled=false",
"--spring.cloud.kubernetes.discovery.enabled=false");
"--spring.cloud.kubernetes.enabled=false", "--spring.cloud.kubernetes.discovery.enabled=false");

this.simpleDiscovery = this.instance.getBean(SimpleDiscoveryProperties.class);

Expand Down Expand Up @@ -96,7 +97,7 @@ private URI registerInstance() {
// We register the instance by setting static values for the SimpleDiscoveryClient
// and issuing a
// InstanceRegisteredEvent that makes sure the instance gets registered.
SimpleDiscoveryProperties.SimpleServiceInstance serviceInstance = new SimpleDiscoveryProperties.SimpleServiceInstance();
DefaultServiceInstance serviceInstance = new DefaultServiceInstance();
serviceInstance.setServiceId("Test-Instance");
serviceInstance.setUri(URI.create("http://localhost:" + this.port));
serviceInstance.getMetadata().put("management.context-path", "/mgmt");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

import com.netflix.discovery.EurekaClient;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.reactive.function.client.ClientHttpConnectorAutoConfiguration;
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
Expand All @@ -27,8 +26,8 @@
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
import org.springframework.cloud.kubernetes.discovery.KubernetesDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.cloud.kubernetes.client.discovery.KubernetesInformerDiscoveryClient;
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesDiscoveryClient;

import de.codecentric.boot.admin.server.cloud.discovery.DefaultServiceInstanceConverter;
import de.codecentric.boot.admin.server.cloud.discovery.EurekaServiceInstanceConverter;
Expand All @@ -39,6 +38,7 @@
import de.codecentric.boot.admin.server.domain.values.Registration;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;

public class AdminServerDiscoveryAutoConfigurationTest {

Expand All @@ -57,32 +57,31 @@ public void defaultServiceInstanceConverter() {

@Test
public void eurekaServiceInstanceConverter() {
this.contextRunner.withUserConfiguration(EurekaClientConfig.class).run((context) -> assertThat(context)
.getBean(ServiceInstanceConverter.class).isInstanceOf(EurekaServiceInstanceConverter.class));
this.contextRunner.withBean(EurekaClient.class, () -> mock(EurekaClient.class))
.withBean(DiscoveryClient.class, () -> mock(DiscoveryClient.class)).run((context) -> assertThat(context)
.getBean(ServiceInstanceConverter.class).isInstanceOf(EurekaServiceInstanceConverter.class));
}

@Test
public void kubernetesServiceInstanceConverter() {
this.contextRunner.withUserConfiguration(KubernetesClientConfig.class).run((context) -> assertThat(context)
.getBean(ServiceInstanceConverter.class).isInstanceOf(KubernetesServiceInstanceConverter.class));
public void officialKubernetesServiceInstanceConverter() {
this.contextRunner
.withBean(KubernetesInformerDiscoveryClient.class, () -> mock(KubernetesInformerDiscoveryClient.class))
.run((context) -> assertThat(context).getBean(ServiceInstanceConverter.class)
.isInstanceOf(KubernetesServiceInstanceConverter.class));
}

@Test
public void customServiceInstanceConverter() {
this.contextRunner
.withUserConfiguration(SimpleDiscoveryClientAutoConfiguration.class,
TestCustomServiceInstanceConverterConfig.class)
public void fabric8KubernetesServiceInstanceConverter() {
this.contextRunner.withBean(KubernetesDiscoveryClient.class, () -> mock(KubernetesDiscoveryClient.class))
.run((context) -> assertThat(context).getBean(ServiceInstanceConverter.class)
.isInstanceOf(CustomServiceInstanceConverter.class));
.isInstanceOf(KubernetesServiceInstanceConverter.class));
}

public static class TestCustomServiceInstanceConverterConfig {

@Bean
public CustomServiceInstanceConverter converter() {
return new CustomServiceInstanceConverter();
}

@Test
public void customServiceInstanceConverter() {
this.contextRunner.withUserConfiguration(SimpleDiscoveryClientAutoConfiguration.class)
.withBean(CustomServiceInstanceConverter.class).run((context) -> assertThat(context)
.getBean(ServiceInstanceConverter.class).isInstanceOf(CustomServiceInstanceConverter.class));
}

public static class CustomServiceInstanceConverter implements ServiceInstanceConverter {
Expand All @@ -94,27 +93,4 @@ public Registration convert(ServiceInstance instance) {

}

public static class EurekaClientConfig {

@Bean
public EurekaClient eurekaClient() {
return Mockito.mock(EurekaClient.class);
}

@Bean
public DiscoveryClient discoveryClient() {
return Mockito.mock(DiscoveryClient.class);
}

}

public static class KubernetesClientConfig {

@Bean
public KubernetesDiscoveryClient eurekaClient() {
return Mockito.mock(KubernetesDiscoveryClient.class);
}

}

}

0 comments on commit 35211dd

Please sign in to comment.