From fc80371cfdae38603b8702846c86affabc861e9e Mon Sep 17 00:00:00 2001 From: John Blum Date: Tue, 19 May 2020 01:08:16 -0700 Subject: [PATCH] Add Integration Tests asserting the configuration of PDX in the context of Spring Boot. Adds 3 test cases covering: * Auto-configuration of SDG's MappingPdxSerializer. * Configuration of a user-defined PdxSerializer applied via auto-configuration. * Manually configured PdxSerializer overriding SBDG PDX auto-configuration. --- ...tionAutoConfigurationIntegrationTests.java | 98 +++++++++++++++++ ...tionAutoConfigurationIntegrationTests.java | 82 ++++++++++++++ ...tionAutoConfigurationIntegrationTests.java | 101 ++++++++++++++++++ 3 files changed, 281 insertions(+) create mode 100644 spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests.java create mode 100644 spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java create mode 100644 spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java diff --git a/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests.java b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests.java new file mode 100644 index 00000000..e6eebe9d --- /dev/null +++ b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests.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.pdx; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.pdx.PdxSerializer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.data.gemfire.config.annotation.EnablePdx; +import org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport; +import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects; +import org.springframework.geode.boot.autoconfigure.PdxSerializationAutoConfiguration; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Unit Tests for {@link PdxSerializationAutoConfiguration} asserting that user-defined PDX configuration + * {@literal overrides} SBDG's PDX {@literal auto-configuration}. + * + * @author John Blum + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.pdx.PdxSerializer + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.context.annotation.Bean + * @see org.springframework.context.annotation.Profile + * @see org.springframework.data.gemfire.config.annotation.EnablePdx + * @see org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects + * @see org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport + * @see org.springframework.geode.boot.autoconfigure.PdxSerializationAutoConfiguration + * @see org.springframework.test.context.ActiveProfiles + * @see org.springframework.test.context.junit4.SpringRunner + * @since 1.3.0 + */ +@ActiveProfiles("MANUALLY_CONFIGURED_PDX_SERIALIZER") +@RunWith(SpringRunner.class) +@SpringBootTest( + properties = { "spring.application.name=ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests" }, + webEnvironment = SpringBootTest.WebEnvironment.NONE +) +@SuppressWarnings("unused") +public class ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests + extends IntegrationTestsSupport { + + @Autowired + private GemFireCache cache; + + @Autowired + @Qualifier("mockPdxSerializer") + private PdxSerializer mockPdxSerializer; + + @Test + public void cacheIsManuallyConfiguredWithPdxSerializer() { + + assertThat(this.cache).isNotNull(); + assertThat(this.cache.getName()) + .isEqualTo(ManuallyConfiguredPdxSerializerWithPdxSerializationAutoConfigurationIntegrationTests.class.getSimpleName()); + assertThat(this.cache.getPdxSerializer()).isEqualTo(this.mockPdxSerializer); + } + + @SpringBootApplication + @EnableGemFireMockObjects + @EnablePdx(serializerBeanName = "mockPdxSerializer") + @Profile("MANUALLY_CONFIGURED_PDX_SERIALIZER") + static class TestGeodeConfiguration { + + @Bean + PdxSerializer mockPdxSerializer() { + return mock(PdxSerializer.class, "MockPdxSerializer"); + } + } +} diff --git a/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java new file mode 100644 index 00000000..4e8c3e69 --- /dev/null +++ b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java @@ -0,0 +1,82 @@ +/* + * 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.pdx; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.pdx.PdxSerializer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Profile; +import org.springframework.data.gemfire.mapping.MappingPdxSerializer; +import org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport; +import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects; +import org.springframework.geode.boot.autoconfigure.PdxSerializationAutoConfiguration; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Unit Tests for {@link PdxSerializationAutoConfiguration} asserting that SDG's {@link MappingPdxSerializer} + * is {@literal auto-configured} on the cache when a custom, user-defined {@link PdxSerializer} is not declared. + * + * @author John Blum + * @see org.junit.Test + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.pdx.PdxSerializer + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.context.annotation.Profile + * @see org.springframework.data.gemfire.mapping.MappingPdxSerializer + * @see org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects + * @see org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport + * @see org.springframework.geode.boot.autoconfigure.PdxSerializationAutoConfiguration + * @see org.springframework.test.context.ActiveProfiles + * @see org.springframework.test.context.junit4.SpringRunner + * @since 1.3.0 + */ +@ActiveProfiles("MAPPING_PDX_SERIALIZER") +@RunWith(SpringRunner.class) +@SpringBootTest( + properties = "spring.application.name=MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests", + webEnvironment = SpringBootTest.WebEnvironment.NONE +) +@SuppressWarnings("unused") +public class MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests extends IntegrationTestsSupport { + + @Autowired + private GemFireCache cache; + + @Test + public void cacheIsAutoConfiguredWithMappingPdxSerializer() { + + assertThat(this.cache).isNotNull(); + assertThat(this.cache.getName()) + .isEqualTo(MappingPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.class.getSimpleName()); + assertThat(this.cache.getPdxSerializer()).isInstanceOf(MappingPdxSerializer.class); + } + + @SpringBootApplication + @EnableGemFireMockObjects + @Profile("MAPPING_PDX_SERIALIZER") + static class TestGeodeConfiguration { } + +} diff --git a/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java new file mode 100644 index 00000000..4d4476f5 --- /dev/null +++ b/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/pdx/UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.java @@ -0,0 +1,101 @@ +/* + * 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.pdx; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.apache.geode.cache.GemFireCache; +import org.apache.geode.pdx.PdxSerializer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Profile; +import org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport; +import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects; +import org.springframework.geode.boot.autoconfigure.PdxSerializationAutoConfiguration; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Unit Tests for {@link PdxSerializationAutoConfiguration} asserting that a custom, user-defined {@link PdxSerializer} + * is configured on the cache when declared, taking precedence over SBDG's PDX Serialization + * {@literal auto-configuration}. + * + * @author John Blum + * @see org.junit.Test + * @see org.mockito.Mockito + * @see org.apache.geode.cache.GemFireCache + * @see org.apache.geode.pdx.PdxSerializer + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.context.annotation.Bean + * @see org.springframework.context.annotation.Profile + * @see org.springframework.geode.boot.autoconfigure.PdxSerializationAutoConfiguration + * @see org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects + * @see org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport + * @see org.springframework.test.annotation.DirtiesContext + * @see org.springframework.test.context.ActiveProfiles + * @see org.springframework.test.context.junit4.SpringRunner + * @since 1.3.0 + */ +@ActiveProfiles("USER_DEFINED_PDX_SERIALIZER") +@DirtiesContext +@RunWith(SpringRunner.class) +@SpringBootTest( + properties = { + "spring.application.name=UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests", + "spring.data.gemfire.pdx.serializer-bean-name=mockPdxSerializer" + }, + webEnvironment = SpringBootTest.WebEnvironment.NONE +) +@SuppressWarnings("unused") +public class UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests extends IntegrationTestsSupport { + + @Autowired + private GemFireCache cache; + + @Autowired + @Qualifier("mockPdxSerializer") + private PdxSerializer mockPdxSerializer; + + @Test + public void cacheIsConfiguredWithUserDefinedPdxSerializer() { + + assertThat(this.cache).isNotNull(); + assertThat(this.cache.getName()) + .isEqualTo(UserDefinedPdxSerializerPdxSerializationAutoConfigurationIntegrationTests.class.getSimpleName()); + assertThat(this.cache.getPdxSerializer()).isEqualTo(this.mockPdxSerializer); + } + + @SpringBootApplication + @EnableGemFireMockObjects + @Profile("USER_DEFINED_PDX_SERIALIZER") + static class TestGeodeConfiguration { + + @Bean + PdxSerializer mockPdxSerializer() { + return mock(PdxSerializer.class, "MockPdxSerializer"); + } + } +}