From e4e4ee092d4eca4b4036aa7b7ab2df6b44f2e047 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Fri, 20 Apr 2018 09:40:25 -0400 Subject: [PATCH] Fix JdbcMessageStoreChannelTests race condition The message in the `QueueChannel` appears for consuming a bit earlier than TX is committed * Introduce `afterCommitLatch` into the test verify the state when TX is really committed and data is removed from DB **Cherry-pick to 5.0.x and 4.3.x** --- .../JdbcMessageStoreChannelTests-context.xml | 39 +++++++++---------- .../store/JdbcMessageStoreChannelTests.java | 11 ++++-- 2 files changed, 26 insertions(+), 24 deletions(-) diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests-context.xml b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests-context.xml index 64bbb09f39..dd8308c9d4 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests-context.xml +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests-context.xml @@ -5,45 +5,42 @@ xmlns:int="http://www.springframework.org/schema/integration" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:int-jdbc="http://www.springframework.org/schema/integration/jdbc" - xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd - http://www.springframework.org/schema/integration/jdbc http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsd - http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> + http://www.springframework.org/schema/integration/jdbc http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsd"> - + - + - - - - - - - + + + - + - - - - + + + + - + + + + + + + diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests.java index 0a6d383b35..c82863c842 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/JdbcMessageStoreChannelTests.java @@ -17,6 +17,7 @@ package org.springframework.integration.jdbc.store; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; @@ -58,6 +59,9 @@ public class JdbcMessageStoreChannelTests { @Autowired private MessageChannel input; + @Autowired + private CountDownLatch afterCommitLatch; + @Autowired private JdbcMessageStore messageStore; @@ -65,6 +69,7 @@ public class JdbcMessageStoreChannelTests { @Qualifier("service-activator") private AbstractEndpoint serviceActivator; + @Before public void init() { Service.reset(1); @@ -84,9 +89,9 @@ public class JdbcMessageStoreChannelTests { } @Test - public void testSendAndActivate() throws Exception { - input.send(new GenericMessage<>("foo")); - Service.await(10000); + public void testSendAndActivate() throws InterruptedException { + this.input.send(new GenericMessage<>("foo")); + assertTrue(this.afterCommitLatch.await(10, TimeUnit.SECONDS)); assertEquals(1, Service.messages.size()); assertEquals(0, messageStore.getMessageGroup("JdbcMessageStoreChannelTests").size()); }