From 6f9190164d046fbc0441965834e7cffba6b6483b Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 28 Jul 2020 13:56:01 -0500 Subject: [PATCH 1/8] disable and enable k8s configuration feature with a relevant property fixes gh-585 --- .gitignore | 1 + .../reload/ConfigReloadAutoConfiguration.java | 6 +- .../KubernetesConfigConfigurationTest.java | 81 +++++++--------- .../config/KubernetesConfigTestBase.java | 69 +++++++++++++ .../ConfigReloadAutoConfigurationTest.java | 97 +++++++++++++++++++ 5 files changed, 206 insertions(+), 48 deletions(-) create mode 100644 spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java create mode 100644 spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java diff --git a/.gitignore b/.gitignore index 6ac078fa..d621e19f 100644 --- a/.gitignore +++ b/.gitignore @@ -63,6 +63,7 @@ hs_err_pid* # IntelliJ /out/ +.DS_Store # mpeltonen/sbt-idea plugin .idea_modules/ diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java index 8b0d33e6..3141c161 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java @@ -48,7 +48,8 @@ import org.springframework.util.Assert; * @author Nicolla Ferraro */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty(value = "spring.cloud.kubernetes.enabled", matchIfMissing = true) +@ConditionalOnProperty(name = "spring.cloud.kubernetes.config.enabled", + havingValue = "true") @ConditionalOnClass(EndpointAutoConfiguration.class) @AutoConfigureAfter({ InfoEndpointAutoConfiguration.class, RefreshEndpointAutoConfiguration.class, RefreshAutoConfiguration.class }) @@ -59,7 +60,8 @@ public class ConfigReloadAutoConfiguration { /** * Configuration reload must be enabled explicitly. */ - @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") + @ConditionalOnProperty(name = "spring.cloud.kubernetes.reload.enabled", + havingValue = "true") @ConditionalOnClass({ RestartEndpoint.class, ContextRefresher.class }) @EnableScheduling @EnableAsync diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java index c3c36f36..867c2575 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java @@ -16,71 +16,60 @@ package org.springframework.cloud.kubernetes.config; -import io.fabric8.kubernetes.client.KubernetesClient; -import org.junit.After; import org.junit.Test; -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; /** * @author Ryan Dawson */ -public class KubernetesConfigConfigurationTest { +public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase { - private ConfigurableApplicationContext context; - - @After - public void close() { - if (this.context != null) { - this.context.close(); - } + @Test + public void kubernetesDefaultEnabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); } @Test public void kubernetesWhenKubernetesDisabled() throws Exception { setup("spring.cloud.kubernetes.enabled=false"); - assertThat(this.context.containsBean("configMapPropertySourceLocator")).isFalse(); - assertThat(this.context.containsBean("secretsPropertySourceLocator")).isFalse(); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + } + + @Test + public void kubernetesConfigDefaultEnabled() throws Exception { + setup("spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + } + + @Test + public void kubernetesConfigwhenKubenretesEnabledAndKubernetsConfigDisabled() + throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=false"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); } @Test public void kubernetesWhenKubernetesConfigDisabled() throws Exception { setup("spring.cloud.kubernetes.config.enabled=false", "spring.cloud.kubernetes.secrets.enabled=false"); - assertThat(this.context.containsBean("configMapPropertySourceLocator")).isFalse(); - assertThat(this.context.containsBean("secretsPropertySourceLocator")).isFalse(); - } - - @Test - public void kubernetesDefaultEnabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true"); - assertThat(this.context.containsBean("configMapPropertySourceLocator")).isTrue(); - assertThat(this.context.containsBean("secretsPropertySourceLocator")).isTrue(); - } - - private void setup(String... env) { - this.context = new SpringApplicationBuilder( - PropertyPlaceholderAutoConfiguration.class, - KubernetesClientTestConfiguration.class, BootstrapConfiguration.class) - .web(org.springframework.boot.WebApplicationType.NONE) - .properties(env).run(); - } - - @Configuration(proxyBeanMethods = false) - static class KubernetesClientTestConfiguration { - - @Bean - KubernetesClient kubernetesClient() { - return mock(KubernetesClient.class); - } - + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); } } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java new file mode 100644 index 00000000..69283191 --- /dev/null +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -0,0 +1,69 @@ +/* + * Copyright 2012-2019 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.config; + +import io.fabric8.kubernetes.client.KubernetesClient; +import io.fabric8.kubernetes.client.server.mock.KubernetesServer; +import org.junit.After; +import org.junit.ClassRule; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @author Haytham Mohamed + **/ +public class KubernetesConfigTestBase { + + private static ConfigurableApplicationContext context; + + @ClassRule + public static KubernetesServer server = new KubernetesServer(); + + protected static ConfigurableApplicationContext getContext() { + return context; + } + + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + + protected static void setup(String... env) { + context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class, + KubernetesClientTestConfiguration.class, BootstrapConfiguration.class) + .web(org.springframework.boot.WebApplicationType.NONE) + .properties(env).run(); + } + + @Configuration(proxyBeanMethods = false) + private static class KubernetesClientTestConfiguration { + + @ConditionalOnMissingBean(KubernetesClient.class) + @Bean + KubernetesClient kubernetesClient() { + return server.getClient(); + } + + } + +} diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java new file mode 100644 index 00000000..b40a7f10 --- /dev/null +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -0,0 +1,97 @@ +/* + * Copyright 2012-2019 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.config.reload; + +import java.util.HashMap; + +import io.fabric8.kubernetes.api.model.ConfigMapBuilder; +import io.fabric8.kubernetes.client.Config; +import io.fabric8.kubernetes.client.KubernetesClient; +import org.junit.BeforeClass; +import org.junit.Test; + +import org.springframework.cloud.kubernetes.config.KubernetesConfigTestBase; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Haytham Mohamed + * + * To test if either kubernetes, kubernetes.configmap, or reload is disabled, then the + * detector and update strategy beans won't be available. + **/ + +public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase { + + private static final String APPLICATION_NAME = "application"; + + @Test + public void kubernetesConfigReloadDisabled() throws Exception { + setup("spring.cloud.kubernetes.reload.enabled=false"); + assertThat(this.getContext().containsBean("configurationChangeDetector")) + .isFalse(); + assertThat(this.getContext().containsBean("configurationUpdateStrategy")) + .isFalse(); + } + + @Test + public void kubernetesConfigReloadWhenKubernetesConfigDisabled() throws Exception { + setup("spring.cloud.kubernetes.config.enabled=false"); + assertThat(this.getContext().containsBean("configurationChangeDetector")) + .isFalse(); + assertThat(this.getContext().containsBean("configurationUpdateStrategy")) + .isFalse(); + } + + @Test + public void kubernetesConfigReloadWhenKubernetesDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=false"); + assertThat(this.getContext().containsBean("configurationChangeDetector")) + .isFalse(); + assertThat(this.getContext().containsBean("configurationUpdateStrategy")) + .isFalse(); + } + + @BeforeClass + public static void setUpBeforeClass() { + + setup(); + KubernetesClient mockClient = getContext().getBean(KubernetesClient.class); + + // Configure the kubernetes master url to point to the mock server + System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, + mockClient.getConfiguration().getMasterUrl()); + System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); + System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, + "false"); + System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); + System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); + + HashMap data = new HashMap<>(); + data.put("bean.greeting", "Hello ConfigMap, %s!"); + server.expect().withPath("/api/v1/namespaces/test/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + server.expect() + .withPath("/api/v1/namespaces/spring/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + } + +} From 4985ab54509b43fb4dde23e50d09ae4cc69af23d Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Wed, 29 Jul 2020 21:14:38 -0500 Subject: [PATCH 2/8] adjust conditionalOnProperty annotation values --- .../reload/ConfigReloadAutoConfiguration.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java index 3141c161..62cb04c8 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java @@ -48,8 +48,10 @@ import org.springframework.util.Assert; * @author Nicolla Ferraro */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty(name = "spring.cloud.kubernetes.config.enabled", - havingValue = "true") +@ConditionalOnProperty( + value = { "spring.cloud.kubernetes.config.enabled", + "spring.cloud.kubernetes.enabled" }, + matchIfMissing = true, havingValue = "true") @ConditionalOnClass(EndpointAutoConfiguration.class) @AutoConfigureAfter({ InfoEndpointAutoConfiguration.class, RefreshEndpointAutoConfiguration.class, RefreshAutoConfiguration.class }) @@ -60,8 +62,11 @@ public class ConfigReloadAutoConfiguration { /** * Configuration reload must be enabled explicitly. */ - @ConditionalOnProperty(name = "spring.cloud.kubernetes.reload.enabled", - havingValue = "true") + @ConditionalOnProperty( + value = { "spring.cloud.kubernetes.config.enabled", + "spring.cloud.kubernetes.reload.enabled" }, + matchIfMissing = true, havingValue = "true") + // @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") @ConditionalOnClass({ RestartEndpoint.class, ContextRefresher.class }) @EnableScheduling @EnableAsync From 68da02e3a099a11fc51e89c416bc79d75fcd7e1c Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Wed, 29 Jul 2020 21:14:53 -0500 Subject: [PATCH 3/8] adjust conditionalOnProperty annotation values --- .../config/reload/ConfigReloadAutoConfiguration.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java index 62cb04c8..a676dae8 100644 --- a/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java +++ b/spring-cloud-kubernetes-config/src/main/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfiguration.java @@ -48,10 +48,8 @@ import org.springframework.util.Assert; * @author Nicolla Ferraro */ @Configuration(proxyBeanMethods = false) -@ConditionalOnProperty( - value = { "spring.cloud.kubernetes.config.enabled", - "spring.cloud.kubernetes.enabled" }, - matchIfMissing = true, havingValue = "true") +@ConditionalOnProperty(value = { "spring.cloud.kubernetes.config.enabled", + "spring.cloud.kubernetes.enabled" }, matchIfMissing = true) @ConditionalOnClass(EndpointAutoConfiguration.class) @AutoConfigureAfter({ InfoEndpointAutoConfiguration.class, RefreshEndpointAutoConfiguration.class, RefreshAutoConfiguration.class }) @@ -62,11 +60,7 @@ public class ConfigReloadAutoConfiguration { /** * Configuration reload must be enabled explicitly. */ - @ConditionalOnProperty( - value = { "spring.cloud.kubernetes.config.enabled", - "spring.cloud.kubernetes.reload.enabled" }, - matchIfMissing = true, havingValue = "true") - // @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") + @ConditionalOnProperty("spring.cloud.kubernetes.reload.enabled") @ConditionalOnClass({ RestartEndpoint.class, ContextRefresher.class }) @EnableScheduling @EnableAsync From 030bbf475dc09ab94d98de333356173416a3d185 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Thu, 30 Jul 2020 08:36:57 -0500 Subject: [PATCH 4/8] fix existing java doc --- .../java/org/springframework/cloud/kubernetes/PodUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java b/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java index a349932b..b3a6aed7 100644 --- a/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java +++ b/spring-cloud-kubernetes-core/src/main/java/org/springframework/cloud/kubernetes/PodUtils.java @@ -29,7 +29,7 @@ public interface PodUtils { /** * @return A supplier of the currentPod {@link Pod}. The supplier will hold the - * currentPod {@Pod} if inside Kubernetes or false, otherwise. + * currentPod {@link Pod} if inside Kubernetes or false, otherwise. */ Supplier currentPod(); From 7e7669c8e04aba4e2e1e5e37be803e731130f42d Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Thu, 30 Jul 2020 09:39:53 -0500 Subject: [PATCH 5/8] fix build check style --- .../cloud/kubernetes/config/KubernetesConfigTestBase.java | 1 + .../config/reload/ConfigReloadAutoConfigurationTest.java | 3 ++- .../cloud/kubernetes/ribbon/RibbonFallbackTest.java | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java index 69283191..ab3d552d 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.cloud.kubernetes.config; import io.fabric8.kubernetes.client.KubernetesClient; diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java index b40a7f10..3c32445f 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2013-2019 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. @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.cloud.kubernetes.config.reload; import java.util.HashMap; diff --git a/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java b/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java index bb14424b..e71cdaf7 100644 --- a/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java +++ b/spring-cloud-kubernetes-ribbon/src/test/java/org/springframework/cloud/kubernetes/ribbon/RibbonFallbackTest.java @@ -100,7 +100,7 @@ public class RibbonFallbackTest { .addNewAddress() .withIp(mockServer.getHostName()) .endAddress() - .addNewPort("http", "http_tcp",mockServer.getPort(), "http") + .addNewPort("http", "http_tcp", mockServer.getPort(), "http") .endSubset() .build(); // @formatter:on From 81e9b90848d4cc69f520fa5454adc2cb1b157573 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 1 Dec 2020 12:14:30 -0600 Subject: [PATCH 6/8] resolve conflict --- .../KubernetesConfigConfigurationTest.java | 84 ++++++++++++++++--- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java index 867c2575..54b8e23a 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java @@ -26,7 +26,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase { @Test - public void kubernetesDefaultEnabled() throws Exception { + public void kubernetesWhenKubernetesDefaultEnabled() throws Exception { setup("spring.cloud.kubernetes.enabled=true"); assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) .isTrue(); @@ -44,7 +44,77 @@ public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase } @Test - public void kubernetesConfigDefaultEnabled() throws Exception { + public void kubernetesWhenKubernetesConfigAndSecretDisabled() throws Exception { + setup("spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=false"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + } + + @Test + public void kubernetesWhenKubernetesConfigEnabledButSecretDisabled() + throws Exception { + setup("spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=false"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + } + + @Test + public void kubernetesWhenKubernetesConfigDisabledButSecretEnabled() + throws Exception { + setup("spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + } + + @Test + public void kubernetesReloadEnabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretAndConfigDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); + } + + @Test + public void kubernetesConfigwhenKubenretesEnabledAndKubernetsConfigEnabled() + throws Exception { setup("spring.cloud.kubernetes.config.enabled=true", "spring.cloud.kubernetes.secrets.enabled=true"); assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) @@ -62,14 +132,4 @@ public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase .isFalse(); } - @Test - public void kubernetesWhenKubernetesConfigDisabled() throws Exception { - setup("spring.cloud.kubernetes.config.enabled=false", - "spring.cloud.kubernetes.secrets.enabled=false"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isFalse(); - } - } From 6572142a2176fe81f678af18c9ce9073b4451d29 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 1 Dec 2020 14:03:59 -0600 Subject: [PATCH 7/8] fix merged tests --- .../KubernetesConfigConfigurationTest.java | 37 --------------- .../config/KubernetesConfigTestBase.java | 6 ++- .../ConfigReloadAutoConfigurationTest.java | 46 +++++++++++++++++-- 3 files changed, 46 insertions(+), 43 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java index 54b8e23a..e9aa60e0 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigConfigurationTest.java @@ -75,43 +75,6 @@ public class KubernetesConfigConfigurationTest extends KubernetesConfigTestBase .isTrue(); } - @Test - public void kubernetesReloadEnabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true", - "spring.cloud.kubernetes.reload.enabled=true"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isTrue(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isTrue(); - assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); - } - - @Test - public void kubernetesReloadEnabledButSecretDisabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true", - "spring.cloud.kubernetes.config.enabled=true", - "spring.cloud.kubernetes.secrets.enabled=false", - "spring.cloud.kubernetes.reload.enabled=true"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isTrue(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); - } - - @Test - public void kubernetesReloadEnabledButSecretAndConfigDisabled() throws Exception { - setup("spring.cloud.kubernetes.enabled=true", - "spring.cloud.kubernetes.config.enabled=false", - "spring.cloud.kubernetes.secrets.enabled=false", - "spring.cloud.kubernetes.reload.enabled=true"); - assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) - .isFalse(); - assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); - } - @Test public void kubernetesConfigwhenKubenretesEnabledAndKubernetsConfigEnabled() throws Exception { diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java index ab3d552d..c2ecce96 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -20,10 +20,11 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; import org.junit.After; import org.junit.ClassRule; - import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; +import org.springframework.cloud.kubernetes.config.reload.ConfigReloadAutoConfiguration; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -51,7 +52,8 @@ public class KubernetesConfigTestBase { protected static void setup(String... env) { context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class, - KubernetesClientTestConfiguration.class, BootstrapConfiguration.class) + KubernetesClientTestConfiguration.class, BootstrapConfiguration.class, + ConfigReloadAutoConfiguration.class, RefreshAutoConfiguration.class) .web(org.springframework.boot.WebApplicationType.NONE) .properties(env).run(); } diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java index 3c32445f..d44e63cf 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -16,17 +16,16 @@ package org.springframework.cloud.kubernetes.config.reload; -import java.util.HashMap; - import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import org.junit.BeforeClass; import org.junit.Test; - import org.springframework.cloud.kubernetes.config.KubernetesConfigTestBase; -import static org.assertj.core.api.Assertions.assertThat; +import java.util.HashMap; + +import static org.assertj.core.api.Assertions.*; /** * @author Haytham Mohamed @@ -66,6 +65,45 @@ public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase .isFalse(); } + @Test + public void kubernetesReloadEnabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=true", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=true", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isTrue(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isTrue(); + } + + @Test + public void kubernetesReloadEnabledButSecretAndConfigDisabled() throws Exception { + setup("spring.cloud.kubernetes.enabled=true", + "spring.cloud.kubernetes.config.enabled=false", + "spring.cloud.kubernetes.secrets.enabled=false", + "spring.cloud.kubernetes.reload.enabled=true"); + assertThat(this.getContext().containsBean("configMapPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("secretsPropertySourceLocator")) + .isFalse(); + assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); + } + @BeforeClass public static void setUpBeforeClass() { From 65d5e96da9f46b42958f424d9c842f2eacf05920 Mon Sep 17 00:00:00 2001 From: Haytham Mohamed Date: Tue, 1 Dec 2020 15:51:47 -0600 Subject: [PATCH 8/8] style checked for config module --- .../config/KubernetesConfigTestBase.java | 19 +++--- .../ConfigReloadAutoConfigurationTest.java | 65 ++++++++++--------- 2 files changed, 43 insertions(+), 41 deletions(-) diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java index c2ecce96..f37b6d00 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/KubernetesConfigTestBase.java @@ -20,6 +20,7 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.fabric8.kubernetes.client.server.mock.KubernetesServer; import org.junit.After; import org.junit.ClassRule; + import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -34,22 +35,15 @@ import org.springframework.context.annotation.Configuration; **/ public class KubernetesConfigTestBase { - private static ConfigurableApplicationContext context; - @ClassRule public static KubernetesServer server = new KubernetesServer(); + private static ConfigurableApplicationContext context; + protected static ConfigurableApplicationContext getContext() { return context; } - @After - public void close() { - if (this.context != null) { - this.context.close(); - } - } - protected static void setup(String... env) { context = new SpringApplicationBuilder(PropertyPlaceholderAutoConfiguration.class, KubernetesClientTestConfiguration.class, BootstrapConfiguration.class, @@ -58,6 +52,13 @@ public class KubernetesConfigTestBase { .properties(env).run(); } + @After + public void close() { + if (this.context != null) { + this.context.close(); + } + } + @Configuration(proxyBeanMethods = false) private static class KubernetesClientTestConfiguration { diff --git a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java index d44e63cf..53d26bd6 100644 --- a/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java +++ b/spring-cloud-kubernetes-config/src/test/java/org/springframework/cloud/kubernetes/config/reload/ConfigReloadAutoConfigurationTest.java @@ -16,16 +16,17 @@ package org.springframework.cloud.kubernetes.config.reload; +import java.util.HashMap; + import io.fabric8.kubernetes.api.model.ConfigMapBuilder; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.KubernetesClient; import org.junit.BeforeClass; import org.junit.Test; + import org.springframework.cloud.kubernetes.config.KubernetesConfigTestBase; -import java.util.HashMap; - -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; /** * @author Haytham Mohamed @@ -38,6 +39,35 @@ public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase private static final String APPLICATION_NAME = "application"; + @BeforeClass + public static void setUpBeforeClass() { + + setup(); + KubernetesClient mockClient = getContext().getBean(KubernetesClient.class); + + // Configure the kubernetes master url to point to the mock server + System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, + mockClient.getConfiguration().getMasterUrl()); + System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); + System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); + System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, + "false"); + System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); + System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); + + HashMap data = new HashMap<>(); + data.put("bean.greeting", "Hello ConfigMap, %s!"); + server.expect().withPath("/api/v1/namespaces/test/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + server.expect() + .withPath("/api/v1/namespaces/spring/configmaps/" + APPLICATION_NAME) + .andReturn(200, new ConfigMapBuilder().withNewMetadata() + .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) + .always(); + } + @Test public void kubernetesConfigReloadDisabled() throws Exception { setup("spring.cloud.kubernetes.reload.enabled=false"); @@ -104,33 +134,4 @@ public class ConfigReloadAutoConfigurationTest extends KubernetesConfigTestBase assertThat(this.getContext().containsBean("propertyChangeWatcher")).isFalse(); } - @BeforeClass - public static void setUpBeforeClass() { - - setup(); - KubernetesClient mockClient = getContext().getBean(KubernetesClient.class); - - // Configure the kubernetes master url to point to the mock server - System.setProperty(Config.KUBERNETES_MASTER_SYSTEM_PROPERTY, - mockClient.getConfiguration().getMasterUrl()); - System.setProperty(Config.KUBERNETES_TRUST_CERT_SYSTEM_PROPERTY, "true"); - System.setProperty(Config.KUBERNETES_AUTH_TRYKUBECONFIG_SYSTEM_PROPERTY, "false"); - System.setProperty(Config.KUBERNETES_AUTH_TRYSERVICEACCOUNT_SYSTEM_PROPERTY, - "false"); - System.setProperty(Config.KUBERNETES_NAMESPACE_SYSTEM_PROPERTY, "test"); - System.setProperty(Config.KUBERNETES_HTTP2_DISABLE, "true"); - - HashMap data = new HashMap<>(); - data.put("bean.greeting", "Hello ConfigMap, %s!"); - server.expect().withPath("/api/v1/namespaces/test/configmaps/" + APPLICATION_NAME) - .andReturn(200, new ConfigMapBuilder().withNewMetadata() - .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) - .always(); - server.expect() - .withPath("/api/v1/namespaces/spring/configmaps/" + APPLICATION_NAME) - .andReturn(200, new ConfigMapBuilder().withNewMetadata() - .withName(APPLICATION_NAME).endMetadata().addToData(data).build()) - .always(); - } - }