Repository: qpid-jms Updated Branches: refs/heads/master 748bcdadf -> 205c976ce
QPIDJMS-75: update frame validation to log and store assertion errors, make peer close throw the first. Enables tests to fail fast and provide error info in many more situations Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/5694dae8 Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/5694dae8 Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/5694dae8 Branch: refs/heads/master Commit: 5694dae8addf230f6dbc7aefd07852b49cee89af Parents: 748bcda Author: Robert Gemmell <[email protected]> Authored: Mon Jun 22 12:59:39 2015 +0100 Committer: Robert Gemmell <[email protected]> Committed: Mon Jun 22 17:27:36 2015 +0100 ---------------------------------------------------------------------- .../AbstractFieldAndDescriptorMatcher.java | 2 +- ...ractFrameFieldAndPayloadMatchingHandler.java | 37 +++++++++++++------- .../FrameWithNoPayloadMatchingHandler.java | 4 +-- .../FrameWithPayloadMatchingHandler.java | 2 +- .../jms/test/testpeer/HeaderHandlerImpl.java | 2 +- .../qpid/jms/test/testpeer/TestAmqpPeer.java | 20 +++++++++++ 6 files changed, 49 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5694dae8/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java index c981d97..79cc4f6 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java @@ -84,7 +84,7 @@ public abstract class AbstractFieldAndDescriptorMatcher { * @param described the list of fields from the described type. * @throws AssertionError if a registered matcher assertion is not met. */ - public void verifyFields(List<Object> described) throws AssertionError { + public final void verifyFields(List<Object> described) throws AssertionError { int fieldNumber = 0; HashMap<Enum<?>, Object> valueMap = new LinkedHashMap<>(); for (Object value : described) { http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5694dae8/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java index e1b1615..e3aeeb1 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFrameFieldAndPayloadMatchingHandler.java @@ -54,21 +54,11 @@ public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends Abstra _onSuccessAction = onSuccessAction; } - /** - * Handle the supplied frame and its payload, e.g. by checking that it matches what we expect - * @throws RuntimeException or a subclass thereof if the frame does not match what we expect - */ - protected void verifyFrame(List<Object> described, Binary payload) - { - verifyFields(described); - verifyPayload(payload); - } - - protected abstract void verifyPayload(Binary payload); + protected abstract void verifyPayload(Binary payload) throws AssertionError; @SuppressWarnings("unchecked") @Override - public void frame(int type, int ch, DescribedType dt, Binary payload, TestAmqpPeer peer) + public final void frame(int type, int ch, DescribedType dt, Binary payload, TestAmqpPeer peer) { if(type == _frameType.ordinal() && (_expectedChannel == ANY_CHANNEL || _expectedChannel == ch) @@ -76,7 +66,28 @@ public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends Abstra && (dt.getDescribed() instanceof List)) { _actualChannel = ch; - verifyFrame((List<Object>)dt.getDescribed(),payload); + + try + { + verifyFields((List<Object>)dt.getDescribed()); + } + catch(AssertionError ae) + { + LOGGER.error("Failure when verifying frame fields", ae); + peer.assertionFailed(ae); + } + + try + { + verifyPayload(payload); + } + catch(AssertionError ae) + { + LOGGER.error("Failure when verifying frame payload", ae); + peer.assertionFailed(ae); + } + + //TODO: rename 'completed' succeeded(); } else http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5694dae8/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithNoPayloadMatchingHandler.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithNoPayloadMatchingHandler.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithNoPayloadMatchingHandler.java index 1db1774..63cc2dd 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithNoPayloadMatchingHandler.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithNoPayloadMatchingHandler.java @@ -35,12 +35,12 @@ public class FrameWithNoPayloadMatchingHandler extends AbstractFrameFieldAndPayl } @Override - protected void verifyPayload(Binary payload) + protected final void verifyPayload(Binary payload) { _logger.debug("About to check that there is no payload"); if(payload != null && payload.getLength() > 0) { - throw new IllegalArgumentException("Expected no payload but received payload of length: " + payload.getLength()); + throw new AssertionError("Expected no payload but received payload of length: " + payload.getLength()); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5694dae8/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithPayloadMatchingHandler.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithPayloadMatchingHandler.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithPayloadMatchingHandler.java index b2e3afd..0369aec 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithPayloadMatchingHandler.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameWithPayloadMatchingHandler.java @@ -45,7 +45,7 @@ public class FrameWithPayloadMatchingHandler extends AbstractFrameFieldAndPayloa } @Override - protected void verifyPayload(Binary payload) + protected final void verifyPayload(Binary payload) throws AssertionError { _logger.debug("About to check the payload" + "\n Received: {}", payload); if(_payloadMatcher != null) http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5694dae8/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/HeaderHandlerImpl.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/HeaderHandlerImpl.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/HeaderHandlerImpl.java index 847904d..86661c7 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/HeaderHandlerImpl.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/HeaderHandlerImpl.java @@ -53,7 +53,7 @@ class HeaderHandlerImpl implements HeaderHandler } @Override - public void header(byte[] header, TestAmqpPeer peer) + public void header(byte[] header, TestAmqpPeer peer) throws AssertionError { LOGGER.debug("About to check received header {}", new Binary(header)); http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/5694dae8/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java ---------------------------------------------------------------------- diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java index 88a59a5..b274880 100644 --- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java +++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java @@ -104,6 +104,7 @@ public class TestAmqpPeer implements AutoCloseable private static final UnsignedByte SASL_FAIL_AUTH = UnsignedByte.valueOf((byte)1); private static final int CONNECTION_CHANNEL = 0; + private volatile AssertionError _firstAssertionError = null; private final TestAmqpPeerRunner _driverRunnable; private final Thread _driverThread; @@ -156,6 +157,18 @@ public class TestAmqpPeer implements AutoCloseable } finally { + AssertionError ae = _firstAssertionError; + if(ae != null) + { + String message = "Assertion failure during test run"; + if(ae.getMessage() != null) + { + message += ": " + ae.getMessage(); + } + + throw new AssertionError(message, _firstAssertionError); + } + Throwable throwable = getThrowable(); if(throwable == null) { @@ -1518,4 +1531,11 @@ public class TestAmqpPeer implements AutoCloseable comp.add(action); } } + + void assertionFailed(AssertionError ae) { + if(_firstAssertionError == null) + { + _firstAssertionError = ae; + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
