Repository: activemq-artemis Updated Branches: refs/heads/master 9d62e1d85 -> 32ec602ea
NO-JIRA Fixing test race on ClientCrashTest Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/32ec602e Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/32ec602e Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/32ec602e Branch: refs/heads/master Commit: 32ec602eaf936158817c161b8ef2246d7652b938 Parents: 9d62e1d Author: Clebert Suconic <[email protected]> Authored: Thu May 10 12:18:08 2018 -0400 Committer: Clebert Suconic <[email protected]> Committed: Thu May 10 12:19:18 2018 -0400 ---------------------------------------------------------------------- .../org/apache/activemq/artemis/junit/Wait.java | 13 +++++++++++-- .../clientcrash/ClientCrashTest.java | 20 ++++++++++++-------- .../integration/clientcrash/ClientTestBase.java | 14 +++----------- .../integration/clientcrash/CrashClient.java | 7 +++++-- .../integration/clientcrash/CrashClient2.java | 4 +++- 5 files changed, 34 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ec602e/artemis-junit/src/main/java/org/apache/activemq/artemis/junit/Wait.java ---------------------------------------------------------------------- diff --git a/artemis-junit/src/main/java/org/apache/activemq/artemis/junit/Wait.java b/artemis-junit/src/main/java/org/apache/activemq/artemis/junit/Wait.java index 8deca21..679b112 100644 --- a/artemis-junit/src/main/java/org/apache/activemq/artemis/junit/Wait.java +++ b/artemis-junit/src/main/java/org/apache/activemq/artemis/junit/Wait.java @@ -46,8 +46,13 @@ public class Wait { return waitFor(condition, MAX_WAIT_MILLIS); } + public static void assertEquals(long size, LongCondition condition) throws Exception { - boolean result = waitFor(() -> condition.getCount() == size); + assertEquals(size, condition, MAX_WAIT_MILLIS); + } + + public static void assertEquals(long size, LongCondition condition, long timeout) throws Exception { + boolean result = waitFor(() -> condition.getCount() == size, timeout); if (!result) { Assert.fail(size + " != " + condition.getCount()); @@ -56,7 +61,11 @@ public class Wait { public static void assertEquals(int size, IntCondition condition) throws Exception { - boolean result = waitFor(() -> condition.getCount() == size); + assertEquals(size, condition, MAX_WAIT_MILLIS); + } + + public static void assertEquals(int size, IntCondition condition, long timeout) throws Exception { + boolean result = waitFor(() -> condition.getCount() == size, timeout); if (!result) { Assert.fail(size + " != " + condition.getCount()); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ec602e/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientCrashTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientCrashTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientCrashTest.java index a4d2f80..7ce8834 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientCrashTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientCrashTest.java @@ -16,6 +16,8 @@ */ package org.apache.activemq.artemis.tests.integration.clientcrash; +import java.util.concurrent.TimeUnit; + import org.apache.activemq.artemis.api.core.Message; import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.client.ClientConsumer; @@ -29,6 +31,7 @@ import org.apache.activemq.artemis.jms.client.ActiveMQTextMessage; import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger; import org.apache.activemq.artemis.tests.util.SpawnedVMSupport; import org.junit.After; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -93,6 +96,10 @@ public class ClientCrashTest extends ClientTestBase { // if the client is too fast you race the send before the queue was created, missing a message p = SpawnedVMSupport.spawnVM(CrashClient.class.getName()); + Assert.assertTrue(p.waitFor(1, TimeUnit.MINUTES)); + + Assert.assertEquals(CrashClient.OK, p.exitValue()); + ClientConsumer consumer = session.createConsumer(ClientCrashTest.QUEUE); ClientProducer producer = session.createProducer(ClientCrashTest.QUEUE); @@ -103,16 +110,13 @@ public class ClientCrashTest extends ClientTestBase { assertNotNull("no message received", messageFromClient); assertEquals(ClientCrashTest.MESSAGE_TEXT_FROM_CLIENT, messageFromClient.getBodyBuffer().readString()); - assertActiveConnections(1 + 1); // One local and one from the other vm - assertActiveSession(1 + 1); + assertActiveConnections( 1); // One local and one from the other vm + assertActiveSession(1); ClientMessage message = session.createMessage(ActiveMQTextMessage.TYPE, false, 0, System.currentTimeMillis(), (byte) 1); message.getBodyBuffer().writeString(ClientCrashTest.MESSAGE_TEXT_FROM_SERVER); producer.send(message); - ClientCrashTest.log.debug("waiting for the client VM to crash ..."); - p.waitFor(); - assertEquals(9, p.exitValue()); System.out.println("VM Exited"); @@ -145,16 +149,16 @@ public class ClientCrashTest extends ClientTestBase { p = SpawnedVMSupport.spawnVM(CrashClient2.class.getName()); ClientCrashTest.log.debug("waiting for the client VM to crash ..."); - p.waitFor(); + Assert.assertTrue(p.waitFor(1, TimeUnit.MINUTES)); - assertEquals(9, p.exitValue()); + assertEquals(CrashClient2.OK, p.exitValue()); System.out.println("VM Exited"); long timeout = ClientCrashTest.CONNECTION_TTL + ClientCrashTest.PING_PERIOD + 10000; assertActiveConnections(1, timeout); - assertActiveSession(1, timeout); + assertActiveSession(2, timeout); ClientConsumer consumer = session.createConsumer(ClientCrashTest.QUEUE2); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ec602e/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientTestBase.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientTestBase.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientTestBase.java index 8ea6f07..50c34b8 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientTestBase.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/ClientTestBase.java @@ -18,8 +18,8 @@ package org.apache.activemq.artemis.tests.integration.clientcrash; import org.apache.activemq.artemis.core.config.Configuration; import org.apache.activemq.artemis.core.server.ActiveMQServer; +import org.apache.activemq.artemis.junit.Wait; import org.apache.activemq.artemis.tests.util.SpawnedTestBase; -import org.junit.Assert; import org.junit.Before; public abstract class ClientTestBase extends SpawnedTestBase { @@ -41,11 +41,7 @@ public abstract class ClientTestBase extends SpawnedTestBase { } protected void assertActiveConnections(final int expectedActiveConnections, long timeout) throws Exception { - timeout += System.currentTimeMillis(); - while (timeout > System.currentTimeMillis() && server.getActiveMQServerControl().getConnectionCount() != expectedActiveConnections) { - Thread.sleep(100); - } - Assert.assertEquals(expectedActiveConnections, server.getActiveMQServerControl().getConnectionCount()); + Wait.assertEquals(expectedActiveConnections, server.getActiveMQServerControl()::getConnectionCount, timeout); } protected void assertActiveSession(final int expectedActiveSession) throws Exception { @@ -53,11 +49,7 @@ public abstract class ClientTestBase extends SpawnedTestBase { } protected void assertActiveSession(final int expectedActiveSession, long timeout) throws Exception { - timeout += System.currentTimeMillis(); - while (timeout > System.currentTimeMillis() && server.getSessions().size() != expectedActiveSession) { - Thread.sleep(100); - } - Assert.assertEquals(expectedActiveSession, server.getSessions().size()); + Wait.assertEquals(expectedActiveSession, server.getSessions()::size, timeout); } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ec602e/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient.java index 6f5d1c6..4bc6010 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient.java @@ -33,6 +33,9 @@ import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger; * Code to be run in an external VM, via main() */ public class CrashClient { + + public static int OK = 9; + public static int NOT_OK = 1; // Constants ------------------------------------------------------------------------------------ private static final IntegrationTestLogger log = IntegrationTestLogger.LOGGER; @@ -58,10 +61,10 @@ public class CrashClient { producer.send(message); // exit without closing the session properly - System.exit(9); + System.exit(OK); } catch (Throwable t) { CrashClient.log.error(t.getMessage(), t); - System.exit(1); + System.exit(NOT_OK); } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/32ec602e/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient2.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient2.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient2.java index bd5a0d4..40367f5 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient2.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/clientcrash/CrashClient2.java @@ -33,6 +33,8 @@ import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger; * Code to be run in an external VM, via main() */ public class CrashClient2 { + + public static final int OK = 9; // Constants ------------------------------------------------------------------------------------ private static final IntegrationTestLogger log = IntegrationTestLogger.LOGGER; @@ -72,7 +74,7 @@ public class CrashClient2 { } // exit without closing the session properly - System.exit(9); + System.exit(OK); } catch (Throwable t) { log.error(t.getMessage(), t); System.exit(1);
