From 9078a74a19ea0dd7beba93ee7e71f1776093bf8a Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Wed, 30 Nov 2016 14:03:09 -0500 Subject: [PATCH] INT-4176: Fix Gemfire tests JIRA: https://jira.spring.io/browse/INT-4176 The `DelayerHandlerRescheduleIntegrationTests` doesn't close `context` in the end of test. That causes clashes for `beanFactoryResolver` in other tests. When those tests are fail, we come into condition when new processes can't be started/stopped because of effect of non-stopped context * Fix all the `DelayerHandlerRescheduleIntegrationTests` to stop `context` in the end of test * Remove unused files in the `gemfire/store` test package * Add current date value to the `CacheServerProcess` name to avoid clashes with other ran on the same host * Add NPE check for `region` in the `GemfireMetadataStoreTests` * Extract `@BeforeClass/@AfterClass` for the `CacheWritingMessageHandlerTests` to start only one Gemfire cache per class **Cherry-pick to 4.3.x & 4.2.x** --- .../gemfire/fork/CacheServerProcess.java | 5 +- .../metadata/GemfireMetadataStoreTests.java | 23 ++++--- .../CacheWritingMessageHandlerTests.java | 61 +++++++++++-------- ...ayerHandlerRescheduleIntegrationTests.java | 4 +- .../store/GemfireMessageStore-context.xml | 36 ----------- .../gemfire/store/common.properties | 5 -- .../gemfire/store/gfe-cache.properties | 3 - ...ayerHandlerRescheduleIntegrationTests.java | 2 +- ...ayerHandlerRescheduleIntegrationTests.java | 12 ++-- ...ayerHandlerRescheduleIntegrationTests.java | 5 +- 10 files changed, 64 insertions(+), 92 deletions(-) delete mode 100644 spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/GemfireMessageStore-context.xml delete mode 100644 spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/common.properties delete mode 100644 spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/gfe-cache.properties diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/fork/CacheServerProcess.java b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/fork/CacheServerProcess.java index c746c23e6a..a869146638 100644 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/fork/CacheServerProcess.java +++ b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/fork/CacheServerProcess.java @@ -18,6 +18,7 @@ package org.springframework.integration.gemfire.fork; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.util.Date; import java.util.Properties; import org.apache.commons.logging.Log; @@ -51,7 +52,7 @@ public class CacheServerProcess { public static void main(String[] args) throws Exception { Properties props = new Properties(); - props.setProperty("name", "CacheServer"); + props.setProperty("name", "CacheServer at " + new Date()); props.setProperty("log-level", "info"); logger.info("Connecting to the distributed system and creating the cache."); @@ -75,6 +76,6 @@ public class CacheServerProcess { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); bufferedReader.readLine(); - } + } diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/metadata/GemfireMetadataStoreTests.java b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/metadata/GemfireMetadataStoreTests.java index 369b5432e4..5f325ba9d8 100644 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/metadata/GemfireMetadataStoreTests.java +++ b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/metadata/GemfireMetadataStoreTests.java @@ -41,19 +41,24 @@ import com.gemstone.gemfire.cache.Region; */ public class GemfireMetadataStoreTests { - public static Cache cache; + private static Cache cache; - public static ConcurrentMetadataStore metadataStore; + private static ConcurrentMetadataStore metadataStore; + + private static Region region; @BeforeClass public static void startUp() throws Exception { cache = new CacheFactory().create(); metadataStore = new GemfireMetadataStore(cache); + region = cache.getRegion(GemfireMetadataStore.KEY); } @AfterClass public static void cleanUp() { - getRegion().close(); + if (region != null) { + region.close(); + } if (cache != null) { cache.close(); Assert.isTrue(cache.isClosed(), "Cache did not close after close() call"); @@ -63,7 +68,9 @@ public class GemfireMetadataStoreTests { @Before @After public void setup() { - getRegion().clear(); + if (region != null) { + region.clear(); + } } @Test @@ -76,7 +83,7 @@ public class GemfireMetadataStoreTests { public void testPersistKeyValue() { metadataStore.put("GemfireMetadataStoreTests-Spring", "Integration"); - GemfireTemplate gemfireTemplate = new GemfireTemplate(getRegion()); + GemfireTemplate gemfireTemplate = new GemfireTemplate(region); assertEquals("Integration", gemfireTemplate.get("GemfireMetadataStoreTests-Spring")); } @@ -156,13 +163,9 @@ public class GemfireMetadataStoreTests { public void testPersistKeyValueIfAbsent() { metadataStore.putIfAbsent("GemfireMetadataStoreTests-Spring", "Integration"); - GemfireTemplate gemfireTemplate = new GemfireTemplate(getRegion()); + GemfireTemplate gemfireTemplate = new GemfireTemplate(region); assertEquals("Integration", gemfireTemplate.get("GemfireMetadataStoreTests-Spring")); } - private static Region getRegion() { - return cache.getRegion(GemfireMetadataStore.KEY); - } - } diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/outbound/CacheWritingMessageHandlerTests.java b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/outbound/CacheWritingMessageHandlerTests.java index 3d2a66a688..a372e5a56c 100644 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/outbound/CacheWritingMessageHandlerTests.java +++ b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/outbound/CacheWritingMessageHandlerTests.java @@ -23,11 +23,12 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; - import org.springframework.beans.factory.BeanFactory; import org.springframework.data.gemfire.CacheFactoryBean; -import org.springframework.data.gemfire.RegionFactoryBean; import org.springframework.expression.Expression; import org.springframework.expression.common.LiteralExpression; import org.springframework.integration.expression.ValueExpression; @@ -37,6 +38,7 @@ import org.springframework.messaging.support.GenericMessage; import com.gemstone.gemfire.cache.Cache; import com.gemstone.gemfire.cache.Region; +import com.gemstone.gemfire.cache.Scope; /** * @author Mark Fisher @@ -48,17 +50,38 @@ import com.gemstone.gemfire.cache.Region; */ public class CacheWritingMessageHandlerTests { + private static CacheFactoryBean cacheFactoryBean; + + private static Region region; + + @BeforeClass + public static void startUp() throws Exception { + cacheFactoryBean = new CacheFactoryBean(); + cacheFactoryBean.afterPropertiesSet(); + Cache cache = cacheFactoryBean.getObject(); + region = cache.createRegionFactory().setScope(Scope.LOCAL).create("sig-tests"); + } + + @AfterClass + public static void cleanUp() throws Exception { + if (region != null) { + region.close(); + } + if (cacheFactoryBean != null) { + cacheFactoryBean.destroy(); + } + } + + @Before + public void prepare() { + if (region != null) { + region.clear(); + } + } + + @Test public void mapPayloadWritesToCache() throws Exception { - CacheFactoryBean cacheFactoryBean = new CacheFactoryBean(); - Cache cache = cacheFactoryBean.getObject(); - - RegionFactoryBean regionFactoryBean = new RegionFactoryBean() { }; - regionFactoryBean.setName("test.mapPayloadWritesToCache"); - regionFactoryBean.setCache(cache); - regionFactoryBean.afterPropertiesSet(); - Region region = regionFactoryBean.getObject(); - assertEquals(0, region.size()); CacheWritingMessageHandler handler = new CacheWritingMessageHandler(region); @@ -71,23 +94,10 @@ public class CacheWritingMessageHandlerTests { handler.handleMessage(message); assertEquals(1, region.size()); assertEquals("bar", region.get("foo")); - - regionFactoryBean.destroy(); - cacheFactoryBean.destroy(); } @Test - @SuppressWarnings("unchecked") public void ExpressionsWriteToCache() throws Exception { - CacheFactoryBean cacheFactoryBean = new CacheFactoryBean(); - Cache cache = cacheFactoryBean.getObject(); - - RegionFactoryBean regionFactoryBean = new RegionFactoryBean() { }; - regionFactoryBean.setName("test.expressionsWriteToCache"); - regionFactoryBean.setCache(cache); - regionFactoryBean.afterPropertiesSet(); - Region region = regionFactoryBean.getObject(); - assertEquals(0, region.size()); CacheWritingMessageHandler handler = new CacheWritingMessageHandler(region); @@ -113,9 +123,6 @@ public class CacheWritingMessageHandlerTests { handler.handleMessage(new GenericMessage("test")); assertEquals(3, region.size()); assertEquals(10L, region.get("baz")); - - regionFactoryBean.destroy(); - cacheFactoryBean.destroy(); } } diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/DelayerHandlerRescheduleIntegrationTests.java b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/DelayerHandlerRescheduleIntegrationTests.java index e32dce6158..56e045d8d6 100644 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/DelayerHandlerRescheduleIntegrationTests.java +++ b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/DelayerHandlerRescheduleIntegrationTests.java @@ -97,7 +97,8 @@ public class DelayerHandlerRescheduleIntegrationTests { // Emulate restart and check Cache state before next start // Interrupt taskScheduler as quickly as possible - ThreadPoolTaskScheduler taskScheduler = (ThreadPoolTaskScheduler) IntegrationContextUtils.getTaskScheduler(context); + ThreadPoolTaskScheduler taskScheduler = + (ThreadPoolTaskScheduler) IntegrationContextUtils.getTaskScheduler(context); taskScheduler.shutdown(); taskScheduler.getScheduledExecutor().awaitTermination(10, TimeUnit.SECONDS); context.destroy(); @@ -144,6 +145,7 @@ public class DelayerHandlerRescheduleIntegrationTests { } assertEquals(0, messageStore.messageGroupSize(delayerMessageGroupId)); + context.destroy(); } } diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/GemfireMessageStore-context.xml b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/GemfireMessageStore-context.xml deleted file mode 100644 index b001013a95..0000000000 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/GemfireMessageStore-context.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/common.properties b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/common.properties deleted file mode 100644 index ec18459e23..0000000000 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/common.properties +++ /dev/null @@ -1,5 +0,0 @@ -host=127.0.0.1 -port=55221 -region-name=people -region-query=select * from /people -correlation-header=time diff --git a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/gfe-cache.properties b/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/gfe-cache.properties deleted file mode 100644 index 04392af0d1..0000000000 --- a/spring-integration-gemfire/src/test/java/org/springframework/integration/gemfire/store/gfe-cache.properties +++ /dev/null @@ -1,3 +0,0 @@ -log-level=warning -name=Spring Integration GemFire World -bind-address=127.0.0.1 diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/DelayerHandlerRescheduleIntegrationTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/DelayerHandlerRescheduleIntegrationTests.java index fb8f93fde9..9685c6919f 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/DelayerHandlerRescheduleIntegrationTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/DelayerHandlerRescheduleIntegrationTests.java @@ -142,7 +142,7 @@ public class DelayerHandlerRescheduleIntegrationTests { assertEquals(1, messageStore.getMessageGroupCount()); assertEquals(0, messageStore.messageGroupSize(delayerMessageGroupId)); - + context.destroy(); } @Test //INT-2649 diff --git a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/DelayerHandlerRescheduleIntegrationTests.java b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/DelayerHandlerRescheduleIntegrationTests.java index 6be369242a..579033c72e 100644 --- a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/DelayerHandlerRescheduleIntegrationTests.java +++ b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/DelayerHandlerRescheduleIntegrationTests.java @@ -59,13 +59,13 @@ public class DelayerHandlerRescheduleIntegrationTests extends MongoDbAvailableTe @Test @MongoDbAvailable public void testWithMongoDbMessageStore() throws Exception { - this.testDelayerHandlerRescheduleWithMongoDbMessageStore("DelayerHandlerRescheduleIntegrationTests-context.xml"); + testDelayerHandlerRescheduleWithMongoDbMessageStore("DelayerHandlerRescheduleIntegrationTests-context.xml"); } @Test @MongoDbAvailable public void testWithConfigurableMongoDbMessageStore() throws Exception { - this.testDelayerHandlerRescheduleWithMongoDbMessageStore("DelayerHandlerRescheduleIntegrationConfigurableTests-context.xml"); + testDelayerHandlerRescheduleWithMongoDbMessageStore("DelayerHandlerRescheduleIntegrationConfigurableTests-context.xml"); } @SuppressWarnings("unchecked") @@ -84,7 +84,8 @@ public class DelayerHandlerRescheduleIntegrationTests extends MongoDbAvailableTe // Emulate restart and check DB state before next start // Interrupt taskScheduler as quickly as possible - ThreadPoolTaskScheduler taskScheduler = (ThreadPoolTaskScheduler) IntegrationContextUtils.getTaskScheduler(context); + ThreadPoolTaskScheduler taskScheduler = + (ThreadPoolTaskScheduler) IntegrationContextUtils.getTaskScheduler(context); taskScheduler.shutdown(); taskScheduler.getScheduledExecutor().awaitTermination(10, TimeUnit.SECONDS); context.destroy(); @@ -110,7 +111,8 @@ public class DelayerHandlerRescheduleIntegrationTests extends MongoDbAvailableTe Message original1 = (Message) ((DelayHandler.DelayedMessageWrapper) payload).getOriginal(); messageInStore = iterator.next(); - Message original2 = (Message) ((DelayHandler.DelayedMessageWrapper) messageInStore.getPayload()).getOriginal(); + Message original2 = (Message) ((DelayHandler.DelayedMessageWrapper) messageInStore.getPayload()) + .getOriginal(); assertThat(message1, Matchers.anyOf(Matchers.is(original1), Matchers.is(original2))); context.refresh(); @@ -128,7 +130,7 @@ public class DelayerHandlerRescheduleIntegrationTests extends MongoDbAvailableTe assertNotSame(payload1, payload2); assertEquals(0, messageStore.messageGroupSize(delayerMessageGroupId)); - + context.destroy(); } } diff --git a/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/DelayerHandlerRescheduleIntegrationTests.java b/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/DelayerHandlerRescheduleIntegrationTests.java index 3655c82976..8fd6dda7fe 100644 --- a/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/DelayerHandlerRescheduleIntegrationTests.java +++ b/spring-integration-redis/src/test/java/org/springframework/integration/redis/store/DelayerHandlerRescheduleIntegrationTests.java @@ -73,7 +73,8 @@ public class DelayerHandlerRescheduleIntegrationTests extends RedisAvailableTest // Emulate restart and check DB state before next start // Interrupt taskScheduler as quickly as possible - ThreadPoolTaskScheduler taskScheduler = (ThreadPoolTaskScheduler) IntegrationContextUtils.getTaskScheduler(context); + ThreadPoolTaskScheduler taskScheduler = + (ThreadPoolTaskScheduler) IntegrationContextUtils.getTaskScheduler(context); taskScheduler.shutdown(); taskScheduler.getScheduledExecutor().awaitTermination(10, TimeUnit.SECONDS); context.destroy(); @@ -121,7 +122,7 @@ public class DelayerHandlerRescheduleIntegrationTests extends RedisAvailableTest assertEquals(0, messageStore.messageGroupSize(delayerMessageGroupId)); messageStore.removeMessageGroup(delayerMessageGroupId); - + context.destroy(); } }