You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cs...@apache.org on 2023/01/11 11:22:52 UTC

[activemq] branch main updated: AMQ-9193 - Improve broker shutdown in unit tests

This is an automated email from the ASF dual-hosted git repository.

cshannon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/main by this push:
     new a083ff4d2 AMQ-9193 - Improve broker shutdown in unit tests
a083ff4d2 is described below

commit a083ff4d23e9ea0997efa5aa596ed5f1c3c6ee24
Author: Christopher L. Shannon (cshannon) <ch...@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.
---
 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 9183c4304..04c0e06df 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -99,7 +99,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();
     }