diff --git a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfiguration.java b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfiguration.java
index 150c247c..07ddaf05 100644
--- a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfiguration.java
+++ b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfiguration.java
@@ -41,6 +41,7 @@ import org.springframework.cloud.kubernetes.commons.PodUtils;
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnKubernetesDiscoveryEnabled;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfiguration.java b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfiguration.java
index 1e4e6152..c1b1e8cd 100644
--- a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfiguration.java
+++ b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfiguration.java
@@ -25,10 +25,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.cloud.CloudPlatform;
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration;
-import org.springframework.cloud.kubernetes.client.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnKubernetesCatalogEnabled;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
diff --git a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfiguration.java b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfiguration.java
index 9f8d03c8..b4a2272b 100644
--- a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfiguration.java
+++ b/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfiguration.java
@@ -40,11 +40,11 @@ import org.springframework.cloud.client.discovery.health.reactive.ReactiveDiscov
import org.springframework.cloud.client.discovery.simple.reactive.SimpleReactiveDiscoveryClientAutoConfiguration;
import org.springframework.cloud.kubernetes.client.KubernetesClientPodUtils;
import org.springframework.cloud.kubernetes.client.discovery.CatalogSharedInformerFactory;
-import org.springframework.cloud.kubernetes.client.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.client.discovery.SpringCloudKubernetesInformerFactoryProcessor;
import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnKubernetesDiscoveryEnabled;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
diff --git a/spring-cloud-kubernetes-client-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-cloud-kubernetes-client-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index f058c16f..c8ccc5e7 100644
--- a/spring-cloud-kubernetes-client-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/spring-cloud-kubernetes-client-discovery/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,4 +1,3 @@
org.springframework.cloud.kubernetes.client.discovery.catalog.KubernetesCatalogWatchAutoConfiguration
org.springframework.cloud.kubernetes.client.discovery.KubernetesInformerDiscoveryClientAutoConfiguration
-org.springframework.cloud.kubernetes.client.discovery.KubernetesDiscoveryPropertiesAutoConfiguration
org.springframework.cloud.kubernetes.client.discovery.reactive.KubernetesInformerReactiveDiscoveryClientAutoConfiguration
diff --git a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfigurationApplicationContextTests.java
index 7aca7cf9..f5411232 100644
--- a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfigurationApplicationContextTests.java
+++ b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesInformerDiscoveryClientAutoConfigurationApplicationContextTests.java
@@ -30,6 +30,7 @@ import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.integration.tests.commons.Commons;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java
index 8f9af495..d90e0751 100644
--- a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java
+++ b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/catalog/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java
@@ -21,9 +21,9 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration;
-import org.springframework.cloud.kubernetes.client.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.client.discovery.KubernetesInformerDiscoveryClient;
import org.springframework.cloud.kubernetes.client.discovery.reactive.KubernetesInformerReactiveDiscoveryClient;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
@@ -87,8 +87,8 @@ class KubernetesCatalogWatchAutoConfigurationApplicationContextTests {
}
/**
- * both blocking and reactive configs are disabled, should not influence catalog
- * watcher in any way.
+ * spring.cloud.kubernetes.discovery.enabled is false, but does not influence catalog
+ * watcher.
*/
@Test
void disableKubernetesDiscovery() {
diff --git a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
index 08105ecc..a985c495 100644
--- a/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
+++ b/spring-cloud-kubernetes-client-discovery/src/test/java/org/springframework/cloud/kubernetes/client/discovery/reactive/KubernetesInformerReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
@@ -26,8 +26,8 @@ import org.springframework.cloud.client.discovery.simple.reactive.SimpleReactive
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
import org.springframework.cloud.kubernetes.client.KubernetesClientAutoConfiguration;
import org.springframework.cloud.kubernetes.client.discovery.CatalogSharedInformerFactory;
-import org.springframework.cloud.kubernetes.client.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.client.discovery.SpringCloudKubernetesInformerFactoryProcessor;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesDiscoveryPropertiesAutoConfiguration.java b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesAutoConfiguration.java
similarity index 84%
rename from spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesDiscoveryPropertiesAutoConfiguration.java
rename to spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesAutoConfiguration.java
index 3c9f6f85..a3f8fa1d 100644
--- a/spring-cloud-kubernetes-client-discovery/src/main/java/org/springframework/cloud/kubernetes/client/discovery/KubernetesDiscoveryPropertiesAutoConfiguration.java
+++ b/spring-cloud-kubernetes-commons/src/main/java/org/springframework/cloud/kubernetes/commons/discovery/KubernetesDiscoveryPropertiesAutoConfiguration.java
@@ -14,10 +14,9 @@
* limitations under the License.
*/
-package org.springframework.cloud.kubernetes.client.discovery;
+package org.springframework.cloud.kubernetes.commons.discovery;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
/**
* @author wind57
diff --git a/spring-cloud-kubernetes-commons/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-cloud-kubernetes-commons/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index 142075c3..6708f3f4 100644
--- a/spring-cloud-kubernetes-commons/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/spring-cloud-kubernetes-commons/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -1,3 +1,4 @@
org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration
org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadAutoConfiguration
org.springframework.cloud.kubernetes.commons.config.reload.ConfigReloadPropertiesAutoConfiguration
+org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration
diff --git a/spring-cloud-kubernetes-fabric8-discovery/pom.xml b/spring-cloud-kubernetes-fabric8-discovery/pom.xml
index 95032292..6cedd1cb 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/pom.xml
+++ b/spring-cloud-kubernetes-fabric8-discovery/pom.xml
@@ -110,6 +110,11 @@
reactor-test
test
+
+ org.junit.platform
+ junit-platform-launcher
+ test
+
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfiguration.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfiguration.java
index 58334dea..2d7b940b 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfiguration.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfiguration.java
@@ -26,6 +26,7 @@ import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnKubernetesCatalogEnabled;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -40,7 +41,7 @@ import org.springframework.core.env.Environment;
@ConditionalOnDiscoveryEnabled
@ConditionalOnKubernetesCatalogEnabled
@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES)
-@AutoConfigureAfter({ Fabric8AutoConfiguration.class })
+@AutoConfigureAfter({ Fabric8AutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class })
public class KubernetesCatalogWatchAutoConfiguration {
@Bean
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesClientServicesFunctionProvider.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesClientServicesFunctionProvider.java
new file mode 100644
index 00000000..583db5e9
--- /dev/null
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesClientServicesFunctionProvider.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2013-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.springframework.cloud.kubernetes.fabric8.discovery;
+
+import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.fabric8.Fabric8Utils;
+import org.springframework.core.env.Environment;
+
+/**
+ * @author wind57
+ */
+public final class KubernetesClientServicesFunctionProvider {
+
+ private KubernetesClientServicesFunctionProvider() {
+ }
+
+ public static KubernetesClientServicesFunction servicesFunction(KubernetesDiscoveryProperties properties,
+ Environment environment) {
+
+ if (properties.allNamespaces()) {
+ return (client) -> client.services().inAnyNamespace().withLabels(properties.serviceLabels());
+ }
+
+ return client -> {
+ String namespace = Fabric8Utils.getApplicationNamespace(client, null, "discovery-service",
+ new KubernetesNamespaceProvider(environment));
+ return client.services().inNamespace(namespace).withLabels(properties.serviceLabels());
+ };
+
+ }
+
+}
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java
index f2c5c124..d834a1ea 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfiguration.java
@@ -25,19 +25,17 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnCloudPlatform;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.cloud.CloudPlatform;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.CommonsClientAutoConfiguration;
import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled;
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
import org.springframework.cloud.client.ConditionalOnDiscoveryHealthIndicatorEnabled;
import org.springframework.cloud.client.discovery.simple.SimpleDiscoveryClientAutoConfiguration;
-import org.springframework.cloud.kubernetes.commons.KubernetesNamespaceProvider;
import org.springframework.cloud.kubernetes.commons.PodUtils;
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnKubernetesDiscoveryEnabled;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
-import org.springframework.cloud.kubernetes.fabric8.Fabric8Utils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -51,55 +49,35 @@ import org.springframework.core.env.Environment;
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnDiscoveryEnabled
+@ConditionalOnKubernetesDiscoveryEnabled
+@ConditionalOnBlockingDiscoveryEnabled
@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES)
@AutoConfigureBefore({ SimpleDiscoveryClientAutoConfiguration.class, CommonsClientAutoConfiguration.class })
-@AutoConfigureAfter({ Fabric8AutoConfiguration.class })
-@EnableConfigurationProperties(KubernetesDiscoveryProperties.class)
+@AutoConfigureAfter({ Fabric8AutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class })
public class KubernetesDiscoveryClientAutoConfiguration {
@Bean
+ @ConditionalOnMissingBean
public KubernetesClientServicesFunction servicesFunction(KubernetesDiscoveryProperties properties,
Environment environment) {
-
- if (properties.allNamespaces()) {
- return (client) -> client.services().inAnyNamespace().withLabels(properties.serviceLabels());
- }
-
- return client -> {
- String namespace = Fabric8Utils.getApplicationNamespace(client, null, "discovery-service",
- new KubernetesNamespaceProvider(environment));
- return client.services().inNamespace(namespace).withLabels(properties.serviceLabels());
- };
+ return KubernetesClientServicesFunctionProvider.servicesFunction(properties, environment);
}
+ @Bean
+ @ConditionalOnMissingBean
+ public KubernetesDiscoveryClient kubernetesDiscoveryClient(KubernetesClient client,
+ KubernetesDiscoveryProperties properties,
+ KubernetesClientServicesFunction kubernetesClientServicesFunction) {
+ return new KubernetesDiscoveryClient(client, properties, kubernetesClientServicesFunction, null,
+ new ServicePortSecureResolver(properties));
+ }
+
+ @Bean
@ConditionalOnClass({ HealthIndicator.class })
- @ConditionalOnDiscoveryEnabled
@ConditionalOnDiscoveryHealthIndicatorEnabled
- @Configuration
- public static class KubernetesDiscoveryClientHealthIndicatorConfiguration {
-
- @Bean
- public KubernetesDiscoveryClientHealthIndicatorInitializer indicatorInitializer(
- ApplicationEventPublisher applicationEventPublisher, PodUtils> podUtils) {
- return new KubernetesDiscoveryClientHealthIndicatorInitializer(podUtils, applicationEventPublisher);
- }
-
- }
-
- @Configuration(proxyBeanMethods = false)
- @ConditionalOnBlockingDiscoveryEnabled
- @ConditionalOnKubernetesDiscoveryEnabled
- public static class KubernetesDiscoveryClientConfiguration {
-
- @Bean
- @ConditionalOnMissingBean
- public KubernetesDiscoveryClient kubernetesDiscoveryClient(KubernetesClient client,
- KubernetesDiscoveryProperties properties,
- KubernetesClientServicesFunction kubernetesClientServicesFunction) {
- return new KubernetesDiscoveryClient(client, properties, kubernetesClientServicesFunction, null,
- new ServicePortSecureResolver(properties));
- }
-
+ public KubernetesDiscoveryClientHealthIndicatorInitializer indicatorInitializer(
+ ApplicationEventPublisher applicationEventPublisher, PodUtils> podUtils) {
+ return new KubernetesDiscoveryClientHealthIndicatorInitializer(podUtils, applicationEventPublisher);
}
}
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfiguration.java b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfiguration.java
index d08fcdaf..73b8c292 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfiguration.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/main/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfiguration.java
@@ -34,10 +34,13 @@ import org.springframework.cloud.client.discovery.health.reactive.ReactiveDiscov
import org.springframework.cloud.client.discovery.simple.reactive.SimpleReactiveDiscoveryClientAutoConfiguration;
import org.springframework.cloud.kubernetes.commons.discovery.ConditionalOnKubernetesDiscoveryEnabled;
import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryProperties;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesClientServicesFunction;
+import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesClientServicesFunctionProvider;
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesDiscoveryClientAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
/**
* Auto configuration for reactive discovery client.
@@ -46,15 +49,22 @@ import org.springframework.context.annotation.Configuration;
*/
@Configuration(proxyBeanMethods = false)
@ConditionalOnDiscoveryEnabled
+@ConditionalOnKubernetesDiscoveryEnabled
@ConditionalOnReactiveDiscoveryEnabled
@ConditionalOnCloudPlatform(CloudPlatform.KUBERNETES)
-@ConditionalOnKubernetesDiscoveryEnabled
@AutoConfigureBefore({ SimpleReactiveDiscoveryClientAutoConfiguration.class,
ReactiveCommonsClientAutoConfiguration.class })
@AutoConfigureAfter({ ReactiveCompositeDiscoveryClientAutoConfiguration.class,
- KubernetesDiscoveryClientAutoConfiguration.class })
+ KubernetesDiscoveryClientAutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class })
public class KubernetesReactiveDiscoveryClientAutoConfiguration {
+ @Bean
+ @ConditionalOnMissingBean
+ public KubernetesClientServicesFunction servicesFunction(KubernetesDiscoveryProperties properties,
+ Environment environment) {
+ return KubernetesClientServicesFunctionProvider.servicesFunction(properties, environment);
+ }
+
@Bean
@ConditionalOnMissingBean
public KubernetesReactiveDiscoveryClient kubernetesReactiveDiscoveryClient(KubernetesClient client,
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogServicesWatchConfigurationTest.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogServicesWatchConfigurationTest.java
index 14090fd5..7e7d4526 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogServicesWatchConfigurationTest.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogServicesWatchConfigurationTest.java
@@ -29,6 +29,7 @@ import org.springframework.boot.WebApplicationType;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.kubernetes.commons.PodUtils;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -81,8 +82,8 @@ public class KubernetesCatalogServicesWatchConfigurationTest {
envList.add("spring.cloud.config.enabled=false");
this.context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class,
KubernetesClientTestConfiguration.class, KubernetesCatalogWatchAutoConfiguration.class,
- KubernetesDiscoveryClientAutoConfiguration.class).web(WebApplicationType.NONE)
- .properties(envList.toArray(new String[0])).run();
+ KubernetesDiscoveryClientAutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class)
+ .web(WebApplicationType.NONE).properties(envList.toArray(new String[0])).run();
}
@Configuration(proxyBeanMethods = false)
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java
new file mode 100644
index 00000000..fb13b9fd
--- /dev/null
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesCatalogWatchAutoConfigurationApplicationContextTests.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright 2013-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.springframework.cloud.kubernetes.fabric8.discovery;
+
+import org.junit.jupiter.api.Test;
+
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
+import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
+import org.springframework.cloud.kubernetes.fabric8.discovery.reactive.KubernetesReactiveDiscoveryClient;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author wind57
+ */
+class KubernetesCatalogWatchAutoConfigurationApplicationContextTests {
+
+ private ApplicationContextRunner applicationContextRunner;
+
+ @Test
+ void discoveryEnabledDefault() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false");
+ applicationContextRunner.run(context -> assertThat(context).hasSingleBean(KubernetesCatalogWatch.class));
+ }
+
+ @Test
+ void discoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.enabled=true");
+ applicationContextRunner.run(context -> assertThat(context).hasSingleBean(KubernetesCatalogWatch.class));
+ }
+
+ @Test
+ void discoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.enabled=false");
+ applicationContextRunner.run(context -> assertThat(context).doesNotHaveBean(KubernetesCatalogWatch.class));
+ }
+
+ @Test
+ void kubernetesDiscoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=true");
+ applicationContextRunner.run(context -> assertThat(context).hasSingleBean(KubernetesCatalogWatch.class));
+ }
+
+ // disabling discovery has no impact on the catalog watch.
+ @Test
+ void kubernetesDiscoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=false");
+ applicationContextRunner.run(context -> assertThat(context).hasSingleBean(KubernetesCatalogWatch.class));
+ }
+
+ /**
+ * both blocking and reactive configs are disabled, should not influence catalog
+ * watcher in any way.
+ */
+ @Test
+ void disableBlockingAndReactive() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.blocking.enabled=false", "spring.cloud.discovery.reactive.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesCatalogWatch.class);
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesReactiveDiscoveryClient.class);
+ });
+ }
+
+ /**
+ * spring.cloud.kubernetes.discovery.enabled is false, but does not influence catalog
+ * watcher.
+ */
+ @Test
+ void disableKubernetesDiscovery() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesCatalogWatch.class);
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesReactiveDiscoveryClient.class);
+ });
+ }
+
+ private void setup(String... properties) {
+ applicationContextRunner = new ApplicationContextRunner().withConfiguration(
+ AutoConfigurations.of(KubernetesCatalogWatchAutoConfiguration.class, Fabric8AutoConfiguration.class,
+ KubernetesCommonsAutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class))
+ .withPropertyValues(properties);
+ }
+
+}
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationApplicationContextTests.java
new file mode 100644
index 00000000..9f144d84
--- /dev/null
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationApplicationContextTests.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2013-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.springframework.cloud.kubernetes.fabric8.discovery;
+
+import org.junit.jupiter.api.Test;
+
+import org.springframework.boot.actuate.health.HealthIndicator;
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.FilteredClassLoader;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryClientHealthIndicatorInitializer;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
+import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Test various conditionals for {@link KubernetesDiscoveryClientAutoConfiguration}
+ *
+ * @author wind57
+ */
+class KubernetesDiscoveryClientAutoConfigurationApplicationContextTests {
+
+ private ApplicationContextRunner applicationContextRunner;
+
+ @Test
+ void discoveryEnabledDefault() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void discoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void discoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryBlockingEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.blocking.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryBlockingDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.blocking.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryHealthIndicatorEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.client.health-indicator.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryHealthIndicatorDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.client.health-indicator.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryHealthIndicatorEnabledHealthIndicatorMissing() {
+ setupWithFilteredClassLoader(HealthIndicator.class, "spring.main.cloud-platform=KUBERNETES",
+ "spring.cloud.config.enabled=false", "spring.cloud.discovery.client.health-indicator.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ /**
+ * reactive is disabled and should not impact blocking in any way
+ */
+ @Test
+ void reactiveDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.reactive.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClient.class);
+ assertThat(context).hasSingleBean(KubernetesDiscoveryClientHealthIndicatorInitializer.class);
+ });
+ }
+
+ private void setup(String... properties) {
+ applicationContextRunner = new ApplicationContextRunner().withConfiguration(
+ AutoConfigurations.of(KubernetesDiscoveryClientAutoConfiguration.class, Fabric8AutoConfiguration.class,
+ KubernetesCommonsAutoConfiguration.class, KubernetesDiscoveryPropertiesAutoConfiguration.class))
+ .withPropertyValues(properties);
+ }
+
+ private void setupWithFilteredClassLoader(Class> cls, String... properties) {
+ applicationContextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(KubernetesDiscoveryClientAutoConfiguration.class,
+ Fabric8AutoConfiguration.class, KubernetesCommonsAutoConfiguration.class,
+ KubernetesDiscoveryPropertiesAutoConfiguration.class))
+ .withClassLoader(new FilteredClassLoader(cls)).withPropertyValues(properties);
+ }
+
+}
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationPropertiesTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationPropertiesTests.java
index f6668668..7b0e27ea 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationPropertiesTests.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/KubernetesDiscoveryClientAutoConfigurationPropertiesTests.java
@@ -28,6 +28,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.kubernetes.commons.PodUtils;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -40,7 +41,7 @@ import static org.mockito.Mockito.when;
* @author Ryan Dawson
* @author Tim Ysewyn
*/
-public class KubernetesDiscoveryClientAutoConfigurationPropertiesTests {
+class KubernetesDiscoveryClientAutoConfigurationPropertiesTests {
private ConfigurableApplicationContext context;
@@ -80,7 +81,8 @@ public class KubernetesDiscoveryClientAutoConfigurationPropertiesTests {
List envList = new ArrayList<>(Arrays.asList(env));
envList.add("spring.cloud.config.enabled=false");
this.context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class,
- KubernetesClientTestConfiguration.class, KubernetesDiscoveryClientAutoConfiguration.class)
+ KubernetesClientTestConfiguration.class, KubernetesDiscoveryClientAutoConfiguration.class,
+ KubernetesDiscoveryPropertiesAutoConfiguration.class)
.web(org.springframework.boot.WebApplicationType.NONE)
.properties(envList.toArray(new String[0])).run();
}
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
new file mode 100644
index 00000000..a0e156b9
--- /dev/null
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2013-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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 org.springframework.cloud.kubernetes.fabric8.discovery.reactive;
+
+import org.junit.jupiter.api.Test;
+
+import org.springframework.boot.autoconfigure.AutoConfigurations;
+import org.springframework.boot.test.context.FilteredClassLoader;
+import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration;
+import org.springframework.cloud.client.discovery.health.reactive.ReactiveDiscoveryClientHealthIndicator;
+import org.springframework.cloud.commons.util.UtilAutoConfiguration;
+import org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
+import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
+import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesClientServicesFunction;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Test various conditionals for
+ * {@link KubernetesReactiveDiscoveryClientAutoConfiguration}
+ *
+ * @author wind57
+ */
+class KubernetesReactiveDiscoveryClientAutoConfigurationApplicationContextTests {
+
+ private ApplicationContextRunner applicationContextRunner;
+
+ @Test
+ void discoveryEnabledDefault() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).hasSingleBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void discoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).hasSingleBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void discoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).doesNotHaveBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).hasSingleBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void kubernetesDiscoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.kubernetes.discovery.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).doesNotHaveBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void kubernetesReactiveDiscoveryEnabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.reactive.enabled=true");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).hasSingleBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void kubernetesReactiveDiscoveryDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.reactive.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).doesNotHaveBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).doesNotHaveBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ /**
+ * blocking is disabled, and it should not impact reactive in any way.
+ */
+ @Test
+ void blockingDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.blocking.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).hasSingleBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void healthDisabled() {
+ setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.client.health-indicator.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ @Test
+ void healthEnabledClassNotPresent() {
+ setupWithFilteredClassLoader("org.springframework.boot.actuate.health.ReactiveHealthIndicator",
+ "spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+ "spring.cloud.discovery.client.health-indicator.enabled=false");
+ applicationContextRunner.run(context -> {
+ assertThat(context).hasSingleBean(KubernetesReactiveDiscoveryClient.class);
+ assertThat(context).doesNotHaveBean(ReactiveDiscoveryClientHealthIndicator.class);
+ assertThat(context).hasSingleBean(KubernetesClientServicesFunction.class);
+ });
+ }
+
+ private void setup(String... properties) {
+ applicationContextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
+ ReactiveCommonsClientAutoConfiguration.class, KubernetesCommonsAutoConfiguration.class,
+ Fabric8AutoConfiguration.class, KubernetesReactiveDiscoveryClientAutoConfiguration.class,
+ KubernetesDiscoveryPropertiesAutoConfiguration.class))
+ .withPropertyValues(properties);
+ }
+
+ private void setupWithFilteredClassLoader(String name, String... properties) {
+ applicationContextRunner = new ApplicationContextRunner()
+ .withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
+ ReactiveCommonsClientAutoConfiguration.class, KubernetesCommonsAutoConfiguration.class,
+ Fabric8AutoConfiguration.class, KubernetesReactiveDiscoveryClientAutoConfiguration.class,
+ KubernetesDiscoveryPropertiesAutoConfiguration.class))
+ .withClassLoader(new FilteredClassLoader(name)).withPropertyValues(properties);
+ }
+
+}
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationTests.java
index f2353443..bc272683 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationTests.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/reactive/KubernetesReactiveDiscoveryClientAutoConfigurationTests.java
@@ -26,6 +26,7 @@ import org.springframework.cloud.client.discovery.ReactiveDiscoveryClient;
import org.springframework.cloud.client.discovery.health.reactive.ReactiveDiscoveryClientHealthIndicator;
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
import org.springframework.cloud.kubernetes.commons.KubernetesCommonsAutoConfiguration;
+import org.springframework.cloud.kubernetes.commons.discovery.KubernetesDiscoveryPropertiesAutoConfiguration;
import org.springframework.cloud.kubernetes.fabric8.Fabric8AutoConfiguration;
import org.springframework.cloud.kubernetes.fabric8.discovery.KubernetesDiscoveryClientAutoConfiguration;
@@ -40,7 +41,8 @@ class KubernetesReactiveDiscoveryClientAutoConfigurationTests {
.withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
ReactiveCommonsClientAutoConfiguration.class, KubernetesCommonsAutoConfiguration.class,
Fabric8AutoConfiguration.class, KubernetesDiscoveryClientAutoConfiguration.class,
- KubernetesReactiveDiscoveryClientAutoConfiguration.class));
+ KubernetesReactiveDiscoveryClientAutoConfiguration.class,
+ KubernetesDiscoveryPropertiesAutoConfiguration.class));
@Test
void shouldWorkWithDefaults() {
diff --git a/spring-cloud-kubernetes-fabric8-istio/pom.xml b/spring-cloud-kubernetes-fabric8-istio/pom.xml
index 061fee0e..f2847598 100644
--- a/spring-cloud-kubernetes-fabric8-istio/pom.xml
+++ b/spring-cloud-kubernetes-fabric8-istio/pom.xml
@@ -46,5 +46,11 @@
test
+
+ org.junit.platform
+ junit-platform-launcher
+ test
+
+
diff --git a/spring-cloud-kubernetes-fabric8-leader/pom.xml b/spring-cloud-kubernetes-fabric8-leader/pom.xml
index 69bdd8ae..677b70b2 100644
--- a/spring-cloud-kubernetes-fabric8-leader/pom.xml
+++ b/spring-cloud-kubernetes-fabric8-leader/pom.xml
@@ -68,6 +68,11 @@
+
+ org.junit.platform
+ junit-platform-launcher
+ test
+