This is an automated email from the ASF dual-hosted git repository. cshannon pushed a commit to branch activemq-5.17.x in repository https://gitbox.apache.org/repos/asf/activemq.git
The following commit(s) were added to refs/heads/activemq-5.17.x by this push: new 5e12551a4 AMQ-9193 - Improve broker shutdown in unit tests 5e12551a4 is described below commit 5e12551a4abbb02ac9c07deab258042ef1202042 Author: Christopher L. Shannon (cshannon) <christopher.l.shan...@gmail.com> AuthorDate: Wed Jan 11 06:21:21 2023 -0500 AMQ-9193 - Improve broker shutdown in unit tests This should improve test reliability for the unit tests so brokers don't hang around after the end of a test on error. Also increase the surefire re-run count to 3 times before failing. (cherry picked from commit a083ff4d23e9ea0997efa5aa596ed5f1c3c6ee24) --- Jenkinsfile | 2 +- .../test/java/org/apache/activemq/ra/MDBTest.java | 166 +++++++++++---------- .../activemq/ExpiredAckAsyncConsumerTest.java | 8 +- .../broker/virtual/VirtualTopicWildcardTest.java | 6 +- .../java/org/apache/activemq/bugs/AMQ2801Test.java | 8 +- .../java/org/apache/activemq/bugs/AMQ3145Test.java | 14 +- .../java/org/apache/activemq/bugs/AMQ3732Test.java | 6 +- .../java/org/apache/activemq/bugs/AMQ6815Test.java | 4 +- .../apache/activemq/bugs/OutOfOrderTestCase.java | 8 +- .../apache/activemq/proxy/ProxyTestSupport.java | 6 +- .../JMXRemoveQueueThenSendIgnoredTest.java | 6 +- .../TopicSubscriptionZeroPrefetchTest.java | 12 +- 12 files changed, 148 insertions(+), 98 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c0b33212b..c1662bb69 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -75,7 +75,7 @@ pipeline { echo 'Running tests' // all tests is very very long (10 hours on Apache Jenkins) // sh 'mvn -B -e test -pl activemq-unit-tests -Dactivemq.tests=all' - sh 'mvn -B -e -fae test -Dsurefire.rerunFailingTestsCount=2' + sh 'mvn -B -e -fae test -Dsurefire.rerunFailingTestsCount=3' } post { always { diff --git a/activemq-ra/src/test/java/org/apache/activemq/ra/MDBTest.java b/activemq-ra/src/test/java/org/apache/activemq/ra/MDBTest.java index a01079ce3..4ece0eb61 100644 --- a/activemq-ra/src/test/java/org/apache/activemq/ra/MDBTest.java +++ b/activemq-ra/src/test/java/org/apache/activemq/ra/MDBTest.java @@ -467,102 +467,114 @@ public class MDBTest { public void testErrorOnNoMessageDeliveryBrokerZeroPrefetchConfig() throws Exception { final BrokerService brokerService = new BrokerService(); - final String brokerUrl = "vm://zeroPrefetch?create=false"; - brokerService.setBrokerName("zeroPrefetch"); - brokerService.setPersistent(false); - PolicyMap policyMap = new PolicyMap(); - PolicyEntry zeroPrefetchPolicy = new PolicyEntry(); - zeroPrefetchPolicy.setQueuePrefetch(0); - policyMap.setDefaultEntry(zeroPrefetchPolicy); - brokerService.setDestinationPolicy(policyMap); - brokerService.start(); - - final AtomicReference<String> errorMessage = new AtomicReference<String>(); - final var appender = new AbstractAppender("test", new AbstractFilter() {}, new MessageLayout(), false, new Property[0]) { - @Override - public void append(LogEvent event) { - if (event.getLevel().isMoreSpecificThan(Level.ERROR)) { - System.err.println("Event :" + event.getMessage().getFormattedMessage()); - errorMessage.set(event.getMessage().getFormattedMessage()); + + try { + final String brokerUrl = "vm://zeroPrefetch?create=false"; + brokerService.setBrokerName("zeroPrefetch"); + brokerService.setPersistent(false); + PolicyMap policyMap = new PolicyMap(); + PolicyEntry zeroPrefetchPolicy = new PolicyEntry(); + zeroPrefetchPolicy.setQueuePrefetch(0); + policyMap.setDefaultEntry(zeroPrefetchPolicy); + brokerService.setDestinationPolicy(policyMap); + brokerService.start(); + + final AtomicReference<String> errorMessage = new AtomicReference<String>(); + final var appender = new AbstractAppender("test", new AbstractFilter() { + }, new MessageLayout(), false, new Property[0]) { + @Override + public void append(LogEvent event) { + if (event.getLevel().isMoreSpecificThan(Level.ERROR)) { + System.err.println("Event :" + event.getMessage().getFormattedMessage()); + errorMessage.set(event.getMessage().getFormattedMessage()); + } } - } - }; - appender.start(); + }; + appender.start(); - final var logger = org.apache.logging.log4j.core.Logger.class.cast(LogManager.getRootLogger()); - logger.addAppender(appender); - logger.get().addAppender(appender, Level.INFO, new AbstractFilter() {}); + final var logger = org.apache.logging.log4j.core.Logger.class.cast( + LogManager.getRootLogger()); + logger.addAppender(appender); + logger.get().addAppender(appender, Level.INFO, new AbstractFilter() { + }); - ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl); - Connection connection = factory.createConnection(); - connection.start(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(brokerUrl); + Connection connection = factory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageConsumer advisory = session.createConsumer(AdvisorySupport.getConsumerAdvisoryTopic(new ActiveMQQueue("TEST"))); + MessageConsumer advisory = session.createConsumer( + AdvisorySupport.getConsumerAdvisoryTopic(new ActiveMQQueue("TEST"))); - ActiveMQResourceAdapter adapter = new ActiveMQResourceAdapter(); - adapter.setServerUrl(brokerUrl); - adapter.start(new StubBootstrapContext()); + ActiveMQResourceAdapter adapter = new ActiveMQResourceAdapter(); + adapter.setServerUrl(brokerUrl); + adapter.start(new StubBootstrapContext()); - final CountDownLatch messageDelivered = new CountDownLatch(1); + final CountDownLatch messageDelivered = new CountDownLatch(1); - final StubMessageEndpoint endpoint = new StubMessageEndpoint() { - @Override - public void onMessage(Message message) { - super.onMessage(message); - messageDelivered.countDown(); - }; - }; + final StubMessageEndpoint endpoint = new StubMessageEndpoint() { + @Override + public void onMessage(Message message) { + super.onMessage(message); + messageDelivered.countDown(); + } - ActiveMQActivationSpec activationSpec = new ActiveMQActivationSpec(); - activationSpec.setDestinationType(Queue.class.getName()); - activationSpec.setDestination("TEST"); - activationSpec.setResourceAdapter(adapter); - activationSpec.validate(); + ; + }; - MessageEndpointFactory messageEndpointFactory = new MessageEndpointFactory() { - @Override - public MessageEndpoint createEndpoint(XAResource resource) throws UnavailableException { - endpoint.xaresource = resource; - return endpoint; - } + ActiveMQActivationSpec activationSpec = new ActiveMQActivationSpec(); + activationSpec.setDestinationType(Queue.class.getName()); + activationSpec.setDestination("TEST"); + activationSpec.setResourceAdapter(adapter); + activationSpec.validate(); - @Override - public boolean isDeliveryTransacted(Method method) throws NoSuchMethodException { - return true; - } - }; + MessageEndpointFactory messageEndpointFactory = new MessageEndpointFactory() { + @Override + public MessageEndpoint createEndpoint(XAResource resource) + throws UnavailableException { + endpoint.xaresource = resource; + return endpoint; + } - // Activate an Endpoint - adapter.endpointActivation(messageEndpointFactory, activationSpec); + @Override + public boolean isDeliveryTransacted(Method method) throws NoSuchMethodException { + return true; + } + }; - ActiveMQMessage msg = (ActiveMQMessage)advisory.receive(4000); - if (msg != null) { - assertEquals("Prefetch size hasn't been set", 0, ((ConsumerInfo)msg.getDataStructure()).getPrefetchSize()); - } else { - fail("Consumer hasn't been created"); - } + // Activate an Endpoint + adapter.endpointActivation(messageEndpointFactory, activationSpec); - // Send the broker a message to that endpoint - MessageProducer producer = session.createProducer(new ActiveMQQueue("TEST")); - producer.send(session.createTextMessage("Hello!")); + ActiveMQMessage msg = (ActiveMQMessage) advisory.receive(4000); + if (msg != null) { + assertEquals("Prefetch size hasn't been set", 0, + ((ConsumerInfo) msg.getDataStructure()).getPrefetchSize()); + } else { + fail("Consumer hasn't been created"); + } - connection.close(); + // Send the broker a message to that endpoint + MessageProducer producer = session.createProducer(new ActiveMQQueue("TEST")); + producer.send(session.createTextMessage("Hello!")); - // Wait for the message to be delivered. - assertFalse(messageDelivered.await(5000, TimeUnit.MILLISECONDS)); + connection.close(); - // Shut the Endpoint down. - adapter.endpointDeactivation(messageEndpointFactory, activationSpec); - adapter.stop(); + // Wait for the message to be delivered. + assertFalse(messageDelivered.await(5000, TimeUnit.MILLISECONDS)); - assertNotNull("We got an error message", errorMessage.get()); - assertTrue("correct message: " + errorMessage.get(), errorMessage.get().contains("zero")); + // Shut the Endpoint down. + adapter.endpointDeactivation(messageEndpointFactory, activationSpec); + adapter.stop(); - logger.removeAppender(appender); - logger.get().removeAppender("test"); + assertNotNull("We got an error message", errorMessage.get()); + assertTrue("correct message: " + errorMessage.get(), + errorMessage.get().contains("zero")); - brokerService.stop(); + logger.removeAppender(appender); + logger.get().removeAppender("test"); + } finally { + brokerService.stop(); + } } @Test diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/ExpiredAckAsyncConsumerTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/ExpiredAckAsyncConsumerTest.java index c3aeef632..2a3c08d90 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/ExpiredAckAsyncConsumerTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/ExpiredAckAsyncConsumerTest.java @@ -99,8 +99,12 @@ public class ExpiredAckAsyncConsumerTest { @After public void tearDown() throws Exception { - connectionConsumer.close(); - connection.close(); + try { + connectionConsumer.close(); + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } broker.stop(); broker.waitUntilStopped(); } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/virtual/VirtualTopicWildcardTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/virtual/VirtualTopicWildcardTest.java index c3978b73e..53ebac456 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/broker/virtual/VirtualTopicWildcardTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/broker/virtual/VirtualTopicWildcardTest.java @@ -63,7 +63,11 @@ public class VirtualTopicWildcardTest { @After public void afer() throws Exception { - connection.close(); + try { + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } brokerService.stop(); } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ2801Test.java b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ2801Test.java index a1d0bc1cd..ccc2571aa 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ2801Test.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ2801Test.java @@ -105,8 +105,12 @@ public class AMQ2801Test @After public void tearDown() throws Exception { - conn1.close(); - conn2.close(); + try { + conn1.close(); + conn2.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } if (broker != null) { broker.stop(); } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3145Test.java b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3145Test.java index 81128bdac..a5804dd7c 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3145Test.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3145Test.java @@ -72,12 +72,16 @@ public class AMQ3145Test { @After public void tearDown() throws Exception { - if (consumer != null) { - consumer.close(); + try { + if (consumer != null) { + consumer.close(); + } + session.close(); + connection.stop(); + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped } - session.close(); - connection.stop(); - connection.close(); broker.stop(); } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3732Test.java b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3732Test.java index 601901be8..1c620910f 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3732Test.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ3732Test.java @@ -71,7 +71,11 @@ public class AMQ3732Test { @After public void stopBroker() throws Exception { - connection.close(); + try { + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } broker.stop(); broker.waitUntilStopped(); diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ6815Test.java b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ6815Test.java index ad278be0b..a98c62a2f 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ6815Test.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/AMQ6815Test.java @@ -65,8 +65,10 @@ public class AMQ6815Test { @After public void tearDown() throws Exception { - if (connection != null) { + try { connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped } brokerService.stop(); } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/OutOfOrderTestCase.java b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/OutOfOrderTestCase.java index 34e386674..3aa3b1f5b 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/OutOfOrderTestCase.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/bugs/OutOfOrderTestCase.java @@ -68,8 +68,12 @@ public class OutOfOrderTestCase extends TestCase { } protected void tearDown() throws Exception { - session.close(); - connection.close(); + try { + session.close(); + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } brokerService.stop(); } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/proxy/ProxyTestSupport.java b/activemq-unit-tests/src/test/java/org/apache/activemq/proxy/ProxyTestSupport.java index 2c884ec7c..9cfd3e666 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/proxy/ProxyTestSupport.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/proxy/ProxyTestSupport.java @@ -83,7 +83,11 @@ public class ProxyTestSupport extends BrokerTestSupport { protected void tearDown() throws Exception { for (Iterator<StubConnection> iter = connections.iterator(); iter.hasNext();) { StubConnection connection = iter.next(); - connection.stop(); + try { + connection.stop(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } iter.remove(); } remoteBroker.stop(); diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/JMXRemoveQueueThenSendIgnoredTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/JMXRemoveQueueThenSendIgnoredTest.java index 7c301f535..88a4363cd 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/JMXRemoveQueueThenSendIgnoredTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/JMXRemoveQueueThenSendIgnoredTest.java @@ -149,7 +149,11 @@ public class JMXRemoveQueueThenSendIgnoredTest { @After public void tearDown() throws Exception { - connection.close(); + try { + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } brokerService.stop(); } } diff --git a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TopicSubscriptionZeroPrefetchTest.java b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TopicSubscriptionZeroPrefetchTest.java index 7f6a8b5d1..ba074f1dc 100644 --- a/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TopicSubscriptionZeroPrefetchTest.java +++ b/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/TopicSubscriptionZeroPrefetchTest.java @@ -285,10 +285,14 @@ public class TopicSubscriptionZeroPrefetchTest { @After public void tearDown() throws Exception { - consumer.close(); - producer.close(); - session.close(); - connection.close(); + try { + consumer.close(); + producer.close(); + session.close(); + connection.close(); + } catch (Exception e) { + //swallow any error so broker can still be stopped + } brokerService.stop(); }