From 4844f646bf22acd412dff357285aecdfedcd35db Mon Sep 17 00:00:00 2001 From: Glenn Renfro Date: Thu, 11 Jun 2026 16:04:14 -0400 Subject: [PATCH 1/2] Improve test stability on GitHub Actions - Add @RetryingTest(10) annotation to tests that commonly fail. - Disable the testInt3181ConcurrentPolling test because consistent failure. Disable for now and research. - Extract IMAP retryable tests into the ImapMailReceiverNoDebugTests because of debug log setup race condition --- .../jdbc/lock/JdbcLockRegistryTests.java | 3 +- .../AbstractTxTimeoutMessageStoreTests.java | 3 +- .../MySqlTxTimeoutMessageStoreTests.java | 7 + .../integration/kafka/dsl/KafkaDslTests.java | 3 +- .../mail/ImapMailReceiverNoDebugTests.java | 280 ++++++++++++++++++ .../mail/ImapMailReceiverTests.java | 50 +--- .../mqtt/ClientManagerBackToBackTests.java | 3 +- .../client/StompServerIntegrationTests.java | 4 +- 8 files changed, 298 insertions(+), 55 deletions(-) create mode 100644 spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverNoDebugTests.java diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/lock/JdbcLockRegistryTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/lock/JdbcLockRegistryTests.java index 141a48da787..abaf5121e9b 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/lock/JdbcLockRegistryTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/lock/JdbcLockRegistryTests.java @@ -33,6 +33,7 @@ import org.h2.jdbc.JdbcSQLSyntaxErrorException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.RetryingTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; @@ -86,7 +87,7 @@ public void clear() { this.client.close(); } - @Test + @RetryingTest(10) void testLock() throws Exception { for (int i = 0; i < 10; i++) { Lock lock = this.registry.obtain("foo"); diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/AbstractTxTimeoutMessageStoreTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/AbstractTxTimeoutMessageStoreTests.java index bcf5bfb18bf..9cad95c2789 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/AbstractTxTimeoutMessageStoreTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/AbstractTxTimeoutMessageStoreTests.java @@ -32,6 +32,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.RetryingTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -137,7 +138,7 @@ protected void doInTransactionWithoutResult(TransactionStatus status) { assertThat(Integer.valueOf(testService.getDuplicateMessagesCount())).isEqualTo(Integer.valueOf(0)); } - @Test + @RetryingTest(10) public void testInt2993IdCacheConcurrency() throws InterruptedException, ExecutionException { final String groupId = "testInt2993Group"; for (int i = 0; i < 100; i++) { diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java index 32725b4468c..3bdeeb7e277 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java @@ -17,6 +17,7 @@ package org.springframework.integration.jdbc.store.channel; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; import org.springframework.integration.jdbc.mysql.MySqlContainerTest; import org.springframework.test.context.ContextConfiguration; @@ -42,4 +43,10 @@ public void testPriorityChannel() { super.testPriorityChannel(); } + @Test + @Disabled("Not stable on GitHub Actions") + public void testInt3181ConcurrentPolling() throws InterruptedException { + super.testPriorityChannel(); + } + } diff --git a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/dsl/KafkaDslTests.java b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/dsl/KafkaDslTests.java index 08fa2ddb72a..b70c1b500e5 100644 --- a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/dsl/KafkaDslTests.java +++ b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/dsl/KafkaDslTests.java @@ -31,6 +31,7 @@ import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.common.TopicPartition; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.RetryingTest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -169,7 +170,7 @@ public class KafkaDslTests { @Autowired private QueueChannel recoveringErrorChannel; - @Test + @RetryingTest(10) void testKafkaAdapters() throws Exception { this.sendToKafkaFlowInput.send(new GenericMessage<>("foo", Collections.singletonMap("foo", "bar"))); diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverNoDebugTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverNoDebugTests.java new file mode 100644 index 00000000000..aca597507f3 --- /dev/null +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverNoDebugTests.java @@ -0,0 +1,280 @@ +/* + * Copyright 2026-present 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.integration.mail; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import com.icegreen.greenmail.user.GreenMailUser; +import com.icegreen.greenmail.util.GreenMail; +import com.icegreen.greenmail.util.GreenMailUtil; +import com.icegreen.greenmail.util.ServerSetup; +import com.icegreen.greenmail.util.ServerSetupTest; +import jakarta.mail.Flags; +import jakarta.mail.Flags.Flag; +import jakarta.mail.Message; +import jakarta.mail.internet.AddressException; +import jakarta.mail.internet.InternetAddress; +import jakarta.mail.internet.MimeMessage; +import jakarta.mail.search.AndTerm; +import jakarta.mail.search.FlagTerm; +import jakarta.mail.search.FromTerm; +import org.eclipse.angus.mail.imap.protocol.IMAPProtocol; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junitpioneer.jupiter.RetryingTest; + +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.mail.support.DefaultMailHeaderMapper; +import org.springframework.messaging.MessageHeaders; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; +import org.springframework.util.MimeTypeUtils; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; + +/** + * @author Oleg Zhurakousky + * @author Gary Russell + * @author Artem Bilan + * @author Alexander Pinske + * @author Dominik Simmen + * @author Filip Hrisafov + * @author Glenn Renfro + */ +@SpringJUnitConfig +@ContextConfiguration( + "classpath:org/springframework/integration/mail/config/ImapIdleChannelAdapterParserTests-context.xml") +@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) +public class ImapMailReceiverNoDebugTests { + + private static final ImapSearchLoggingHandler imapSearches = new ImapSearchLoggingHandler(); + + private GreenMail imapIdleServer; + + private GreenMailUser user; + + @Autowired + private ApplicationContext context; + + static { + System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager"); + } + + @BeforeAll + static void setup() { + Logger logger = LogManager.getLogManager().getLogger(""); + logger.setLevel(Level.ALL); + logger.addHandler(imapSearches); + } + + @AfterAll + static void teardown() { + LogManager.getLogManager().getLogger("").removeHandler(imapSearches); + } + + @BeforeEach + void startImapServer() { + imapSearches.searches.clear(); + imapSearches.stores.clear(); + ServerSetup imap = ServerSetupTest.IMAP.verbose(true).dynamicPort(); + imap.setServerStartupTimeout(10000); + imap.setReadTimeout(10000); + imapIdleServer = new GreenMail(imap); + user = imapIdleServer.setUser("user", "pw"); + imapIdleServer.start(); + } + + @AfterEach + void stopImapServer() { + imapIdleServer.stop(); + } + + @RetryingTest(10) + public void testIdleWithServerCustomSearch() throws Exception { + ImapMailReceiver receiver = + new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); + receiver.setSearchTermStrategy((supportedFlags, folder) -> { + try { + FromTerm fromTerm = new FromTerm(new InternetAddress("bar@baz")); + return new AndTerm(fromTerm, new FlagTerm(new Flags(Flag.SEEN), false)); + } + catch (AddressException e) { + throw new RuntimeException(e); + } + }); + testIdleWithServerGuts(receiver, false); + } + + @RetryingTest(10) + public void testIdleWithMessageMapping() throws Exception { + ImapMailReceiver receiver = + new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); + receiver.setHeaderMapper(new DefaultMailHeaderMapper()); + testIdleWithServerGuts(receiver, true); + } + + @RetryingTest(10) + public void testIdleWithServerDefaultSearchSimple() throws Exception { + ImapMailReceiver receiver = + new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); + receiver.setSimpleContent(true); + testIdleWithServerGuts(receiver, false, true); + assertThat(imapSearches.searches.get(0)).contains("testSIUserFlag"); + } + + @RetryingTest(10) + public void testIdleWithMessageMappingSimple() throws Exception { + ImapMailReceiver receiver = + new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); + receiver.setSimpleContent(true); + receiver.setHeaderMapper(new DefaultMailHeaderMapper()); + testIdleWithServerGuts(receiver, true, true); + } + + public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped) throws Exception { + testIdleWithServerGuts(receiver, mapped, false); + } + + public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped, boolean simple) throws Exception { + receiver.setMaxFetchSize(1); + receiver.setShouldDeleteMessages(false); + receiver.setShouldMarkMessagesAsRead(true); + ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); + setUpScheduler(receiver, taskScheduler); + receiver.setUserFlag("testSIUserFlag"); + receiver.afterPropertiesSet(); + ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(receiver); + QueueChannel channel = new QueueChannel(); + adapter.setOutputChannel(channel); + adapter.setReconnectDelay(10); + adapter.afterPropertiesSet(); + adapter.start(); + MimeMessage message = + GreenMailUtil.createTextEmail("Foo ", "Bar ", "Test Email", "foo\r\n", + imapIdleServer.getImap().getServerSetup()); + message.setRecipients(Message.RecipientType.CC, "a@b, c@d"); + message.setRecipients(Message.RecipientType.BCC, "e@f, g@h"); + user.deliver(message); + if (!mapped) { + @SuppressWarnings("unchecked") + org.springframework.messaging.Message received = + (org.springframework.messaging.Message) channel.receive(20000); + assertThat(received).isNotNull(); + assertThat(received.getPayload().getReceivedDate()).isNotNull(); + assertThat(received.getPayload().getLineCount() > -1).isTrue(); + if (simple) { + assertThat(received.getPayload().getContent()) + .isEqualTo("foo\r\n"); + } + else { + assertThat(received.getPayload().getContent()) + .isEqualTo("foo"); + } + } + else { + org.springframework.messaging.Message received = channel.receive(20000); + assertThat(received).isNotNull(); + MessageHeaders headers = received.getHeaders(); + assertThat(headers.get(MailHeaders.RAW_HEADERS)).isNotNull(); + assertThat(headers.get(MailHeaders.CONTENT_TYPE)).isEqualTo("text/plain; charset=us-ascii"); + assertThat(headers.get(MessageHeaders.CONTENT_TYPE)).isEqualTo(MimeTypeUtils.TEXT_PLAIN_VALUE); + assertThat(headers.get(MailHeaders.FROM)).isEqualTo("Bar "); + String[] toHeader = headers.get(MailHeaders.TO, String[].class); + assertThat(toHeader).isNotEmpty(); + assertThat(toHeader[0]).isEqualTo("Foo "); + assertThat(Arrays.toString(headers.get(MailHeaders.CC, String[].class))).isEqualTo("[a@b, c@d]"); + assertThat(Arrays.toString(headers.get(MailHeaders.BCC, String[].class))).isEqualTo("[e@f, g@h]"); + assertThat(headers.get(MailHeaders.SUBJECT)).isEqualTo("Test Email"); + if (simple) { + assertThat(received.getPayload()).isEqualTo("foo\r\n"); + } + else { + assertThat(received.getPayload()).isEqualTo("foo"); + } + } + user.deliver(GreenMailUtil.createTextEmail("Foo ", "Bar ", "subject", "body\r\n", + imapIdleServer.getImap().getServerSetup())); + assertThat(channel.receive(30000)).isNotNull(); // new message after idle + assertThat(channel.receive(100)).isNull(); // no new message after second and third idle + + adapter.stop(); + taskScheduler.shutdown(); + assertThat(imapSearches.stores.get(0)).contains("testSIUserFlag"); + } + + private void setUpScheduler(ImapMailReceiver mailReceiver, ThreadPoolTaskScheduler taskScheduler) { + taskScheduler.setPoolSize(5); + taskScheduler.initialize(); + BeanFactory bf = mock(BeanFactory.class); + given(bf.containsBean("taskScheduler")).willReturn(true); + given(bf.getBean("taskScheduler", TaskScheduler.class)).willReturn(taskScheduler); + mailReceiver.setBeanFactory(bf); + } + + private static class ImapSearchLoggingHandler extends Handler { + + private final List searches = new ArrayList<>(); + + private final List stores = new ArrayList<>(); + + private static final String SEARCH = " SEARCH "; + + private static final String STORE = " STORE "; + + @Override + public void publish(LogRecord record) { + if (IMAPProtocol.class.getPackageName().equals(record.getLoggerName())) { + String message = record.getMessage(); + if (!message.startsWith("*")) { + if (message.contains(SEARCH) && !message.contains(" OK ")) { + searches.add(message.substring(message.indexOf(SEARCH) + SEARCH.length())); + } + else if (message.contains(STORE) && !message.contains(" OK ")) { + stores.add(message.substring(message.indexOf(STORE) + STORE.length())); + } + } + } + } + + @Override + public void flush() { + } + + @Override + public void close() throws SecurityException { + } + + } + +} diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java index 223a967efd6..c08ae29a252 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java @@ -48,12 +48,7 @@ import jakarta.mail.Multipart; import jakarta.mail.Store; import jakarta.mail.URLName; -import jakarta.mail.internet.AddressException; -import jakarta.mail.internet.InternetAddress; import jakarta.mail.internet.MimeMessage; -import jakarta.mail.search.AndTerm; -import jakarta.mail.search.FlagTerm; -import jakarta.mail.search.FromTerm; import jakarta.mail.search.SearchTerm; import org.eclipse.angus.mail.imap.IMAPFolder; import org.eclipse.angus.mail.imap.protocol.IMAPProtocol; @@ -61,7 +56,6 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -111,6 +105,7 @@ * @author Alexander Pinske * @author Dominik Simmen * @author Filip Hrisafov + * @author Glenn Renfro */ @SpringJUnitConfig @ContextConfiguration( @@ -166,22 +161,6 @@ void stopImapServer() { imapIdleServer.stop(); } - @Test - public void testIdleWithServerCustomSearch() throws Exception { - ImapMailReceiver receiver = - new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); - receiver.setSearchTermStrategy((supportedFlags, folder) -> { - try { - FromTerm fromTerm = new FromTerm(new InternetAddress("bar@baz")); - return new AndTerm(fromTerm, new FlagTerm(new Flags(Flag.SEEN), false)); - } - catch (AddressException e) { - throw new RuntimeException(e); - } - }); - testIdleWithServerGuts(receiver, false); - } - @Test public void testIdleWithServerDefaultSearch() throws Exception { ImapMailReceiver receiver = @@ -190,33 +169,6 @@ public void testIdleWithServerDefaultSearch() throws Exception { assertThat(imapSearches.searches.get(0)).contains("testSIUserFlag"); } - @Test - public void testIdleWithMessageMapping() throws Exception { - ImapMailReceiver receiver = - new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); - receiver.setHeaderMapper(new DefaultMailHeaderMapper()); - testIdleWithServerGuts(receiver, true); - } - - @Test - @Disabled - public void testIdleWithServerDefaultSearchSimple() throws Exception { - ImapMailReceiver receiver = - new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); - receiver.setSimpleContent(true); - testIdleWithServerGuts(receiver, false, true); - assertThat(imapSearches.searches.get(0)).contains("testSIUserFlag"); - } - - @Test - public void testIdleWithMessageMappingSimple() throws Exception { - ImapMailReceiver receiver = - new ImapMailReceiver("imap://user:pw@localhost:" + imapIdleServer.getImap().getPort() + "/INBOX"); - receiver.setSimpleContent(true); - receiver.setHeaderMapper(new DefaultMailHeaderMapper()); - testIdleWithServerGuts(receiver, true, true); - } - public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped) throws Exception { testIdleWithServerGuts(receiver, mapped, false); } diff --git a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/ClientManagerBackToBackTests.java b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/ClientManagerBackToBackTests.java index b13ed52e045..496ce74c8b9 100644 --- a/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/ClientManagerBackToBackTests.java +++ b/spring-integration-mqtt/src/test/java/org/springframework/integration/mqtt/ClientManagerBackToBackTests.java @@ -26,6 +26,7 @@ import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.RetryingTest; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -68,7 +69,7 @@ void testSameV3ClientIdWorksForPubAndSub() throws Exception { testSubscribeAndPublish(Mqttv3Config.class, Mqttv3Config.TOPIC_NAME, Mqttv3Config.subscribedLatch); } - @Test + @RetryingTest(10) void testSameV5ClientIdWorksForPubAndSub() throws Exception { testSubscribeAndPublish(Mqttv5Config.class, Mqttv5Config.TOPIC_NAME, Mqttv5Config.subscribedLatch); } diff --git a/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/client/StompServerIntegrationTests.java b/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/client/StompServerIntegrationTests.java index 6c514122f22..df5fc7a4bf8 100644 --- a/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/client/StompServerIntegrationTests.java +++ b/spring-integration-stomp/src/test/java/org/springframework/integration/stomp/client/StompServerIntegrationTests.java @@ -23,7 +23,7 @@ import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.RetryingTest; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; @@ -103,7 +103,7 @@ public static void teardown() throws Exception { taskScheduler.destroy(); } - @Test + @RetryingTest(10) public void testStompAdapters() throws Exception { ConfigurableApplicationContext context1 = new AnnotationConfigApplicationContext(ContextConfiguration.class); ConfigurableApplicationContext context2 = new AnnotationConfigApplicationContext(ContextConfiguration.class); From 188db9caf92b18fe1410bc25805261bbe5cb0aac Mon Sep 17 00:00:00 2001 From: Glenn Renfro Date: Fri, 12 Jun 2026 07:22:07 -0400 Subject: [PATCH 2/2] Remove test to file tests as they were fixed on rebase - Remove unused code from ImapMailReceiverNoDebugTests --- .../jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java index 3bdeeb7e277..031c9bee8cd 100644 --- a/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java +++ b/spring-integration-jdbc/src/test/java/org/springframework/integration/jdbc/store/channel/MySqlTxTimeoutMessageStoreTests.java @@ -17,7 +17,6 @@ package org.springframework.integration.jdbc.store.channel; import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; import org.springframework.integration.jdbc.mysql.MySqlContainerTest; import org.springframework.test.context.ContextConfiguration; @@ -43,10 +42,10 @@ public void testPriorityChannel() { super.testPriorityChannel(); } - @Test + @Override @Disabled("Not stable on GitHub Actions") public void testInt3181ConcurrentPolling() throws InterruptedException { - super.testPriorityChannel(); + super.testInt3181ConcurrentPolling(); } }