From 7d350ce271ae224b236284fd25d5163baaafe508 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** (cherry picked from commit e4e4ee0) # Conflicts: # spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests-context.xml # spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests.java --- .../JdbcMessageStoreChannelTests-context.xml | 39 +++++++++---------- .../jdbc/JdbcMessageStoreChannelTests.java | 27 +++++++++++-- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests-context.xml b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests-context.xml index 633c01949c..1625a4e3f6 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests-context.xml +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests-context.xml @@ -5,46 +5,43 @@ 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/JdbcMessageStoreChannelTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests.java index 9832014320..ccc8bd59c5 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/JdbcMessageStoreChannelTests.java @@ -17,6 +17,7 @@ package org.springframework.integration.jdbc; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.List; @@ -45,9 +46,28 @@ public class JdbcMessageStoreChannelTests { @Autowired private MessageChannel input; + @Autowired + private CountDownLatch afterCommitLatch; + @Autowired private JdbcMessageStore messageStore; + @Autowired + @Qualifier("service-activator") + private AbstractEndpoint serviceActivator; + + + @Before + public void init() { + Service.reset(1); + this.serviceActivator.start(); + } + + @After + public void tearDown() { + this.serviceActivator.stop(); + } + @BeforeTransaction public void clear() { for (MessageGroup group : messageStore) { @@ -56,10 +76,9 @@ public class JdbcMessageStoreChannelTests { } @Test - public void testSendAndActivate() throws Exception { - Service.reset(1); - 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()); }