From 39d81d339a42fddd178005334ad09aae6948fc66 Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 15 Apr 2020 22:14:21 -0700 Subject: [PATCH] Remove conditional on missing GemFireCache bean annotation declaration. This is necessary to apply Geode Properties declared in Spring Boot application.properties to Spring Boot, Apache Geode, Peer Cache applications. Resolves gh-79. --- ...cedGemFirePropertiesAutoConfiguration.java | 7 +- ...oPeerCacheApplicationIntegrationTests.java | 98 +++++++++++++++++++ 2 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests.java diff --git a/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/EnvironmentSourcedGemFirePropertiesAutoConfiguration.java b/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/EnvironmentSourcedGemFirePropertiesAutoConfiguration.java index 29005417..2fabfb36 100644 --- a/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/EnvironmentSourcedGemFirePropertiesAutoConfiguration.java +++ b/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/EnvironmentSourcedGemFirePropertiesAutoConfiguration.java @@ -25,7 +25,6 @@ import org.apache.geode.cache.GemFireCache; import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; @@ -47,7 +46,7 @@ import org.slf4j.LoggerFactory; /** * Spring Boot {@link EnableAutoConfiguration auto-configuration} enabling the processing of - * {@literal gemfire.properties} declared in Spring Boot {@literal application.properties}. + * {@literal gemfire.properties}, or Geode {@link Properties} declared in Spring Boot {@literal application.properties}. * * @author John Blum * @see java.util.Properties @@ -55,6 +54,8 @@ import org.slf4j.LoggerFactory; * @see org.springframework.boot.autoconfigure.EnableAutoConfiguration * @see org.springframework.context.annotation.Bean * @see org.springframework.context.annotation.Configuration + * @see org.springframework.core.Ordered + * @see org.springframework.core.annotation.Order * @see org.springframework.core.env.ConfigurableEnvironment * @see org.springframework.core.env.EnumerablePropertySource * @see org.springframework.core.env.MutablePropertySources @@ -62,12 +63,12 @@ import org.slf4j.LoggerFactory; * @see org.springframework.data.gemfire.GemFireProperties * @see org.springframework.data.gemfire.config.annotation.ClientCacheConfigurer * @see org.springframework.data.gemfire.config.annotation.PeerCacheConfigurer + * @see Geode Properties * @since 1.3.0 */ @Configuration @ConditionalOnClass({ GemFireCache.class, CacheFactoryBean.class }) @AutoConfigureBefore({ ClientCacheAutoConfiguration.class }) -@ConditionalOnMissingBean(GemFireCache.class) @SuppressWarnings("unused") public class EnvironmentSourcedGemFirePropertiesAutoConfiguration { diff --git a/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests.java b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests.java new file mode 100644 index 00000000..46fcf418 --- /dev/null +++ b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests.java @@ -0,0 +1,98 @@ +/* + * Copyright 2020 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.geode.boot.autoconfigure.configuration; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Properties; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.apache.geode.cache.Cache; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.gemfire.config.annotation.PeerCacheApplication; +import org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport; +import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Integration Tests asserting and testing that Geode {@link Properties} declared in Spring Boot + * {@literal application.properties} apply equally to Spring Boot configured and bootstrapped Apache Geode + * {@literal peer} {@link Cache} applications. + * + * @author John Blum + * @see org.junit.Test + * @see java.util.Properties + * @see org.apache.geode.cache.Cache + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.data.gemfire.config.annotation.PeerCacheApplication + * @see org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport + * @see org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects + * @see org.springframework.test.context.junit4.SpringRunner + * @since 1.3.0 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(properties = { + "spring.application.name=GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests", + "gemfire.conserve-sockets=false", + "gemfire.distributed-system-id=123", + "gemfire.enable-network-partition-detection=false", + "gemfire.enable-time-statistics=true", + "gemfire.enforce-unique-host=true", + "gemfire.groups=TestGroup", + "gemfire.member-timeout=30000" +}) +@SuppressWarnings("unused") +public class GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests + extends IntegrationTestsSupport { + + @Autowired + private Cache peerCache; + + @Test + public void peerCacheConfigurationIsCorrect() { + + assertThat(this.peerCache).isNotNull(); + assertThat(this.peerCache.getName()) + .isEqualTo(GemFirePropertiesFromEnvironmentApplyToPeerCacheApplicationIntegrationTests.class.getSimpleName()); + assertThat(this.peerCache.getDistributedSystem()).isNotNull(); + + Properties gemfireProperties = this.peerCache.getDistributedSystem().getProperties(); + + assertThat(gemfireProperties).isNotNull(); + assertThat(gemfireProperties).containsKeys("conserve-sockets", "distributed-system-id", + "enable-network-partition-detection", "enable-time-statistics", "enforce-unique-host", + "groups", "member-timeout"); + assertThat(gemfireProperties.getProperty("conserve-sockets")).isEqualTo("false"); + assertThat(gemfireProperties.getProperty("distributed-system-id")).isEqualTo("123"); + assertThat(gemfireProperties.getProperty("enable-network-partition-detection")).isEqualTo("false"); + assertThat(gemfireProperties.getProperty("enable-time-statistics")).isEqualTo("true"); + assertThat(gemfireProperties.getProperty("enforce-unique-host")).isEqualTo("true"); + assertThat(gemfireProperties.getProperty("groups")).isEqualTo("TestGroup"); + assertThat(gemfireProperties.getProperty("member-timeout")).isEqualTo("30000"); + } + + @SpringBootApplication + @EnableGemFireMockObjects + @PeerCacheApplication + static class TestGeodeConfiguration { } + +}