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]

Reply via email to