You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2014/10/24 20:12:15 UTC
[2/4] git commit: extract a common base class for matching of
descriptor and field values
extract a common base class for matching of descriptor and field values
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/8e0e28fe
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/8e0e28fe
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/8e0e28fe
Branch: refs/heads/master
Commit: 8e0e28fe44a292bcbba953aeb58683dec78bda49
Parents: 82a1fbe
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Oct 24 18:04:17 2014 +0100
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Oct 24 18:04:17 2014 +0100
----------------------------------------------------------------------
.../AbstractFieldAndDescriptorMatcher.java | 79 ++++++++++++++++++++
...ractFrameFieldAndPayloadMatchingHandler.java | 60 +--------------
.../jms/test/testpeer/FrameMatchingHandler.java | 19 ++---
3 files changed, 88 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8e0e28fe/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
new file mode 100644
index 0000000..4f9dbb7
--- /dev/null
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/AbstractFieldAndDescriptorMatcher.java
@@ -0,0 +1,79 @@
+package org.apache.qpid.jms.test.testpeer;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.qpid.proton.amqp.Symbol;
+import org.apache.qpid.proton.amqp.UnsignedLong;
+import org.hamcrest.Matcher;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractFieldAndDescriptorMatcher {
+
+ protected final Logger _logger = LoggerFactory.getLogger(getClass());
+
+ private final UnsignedLong numericDescriptor;
+ private final Symbol symbolicDescriptor;
+ protected final Map<Enum<?>, Matcher<?>> fieldMatchers;
+ private Map<Enum<?>, Object> receivedFields;
+
+ public AbstractFieldAndDescriptorMatcher(UnsignedLong numericDescriptor, Symbol symbolicDescriptor, Map<Enum<?>, Matcher<?>> fieldMatchers) {
+ this.numericDescriptor = numericDescriptor;
+ this.symbolicDescriptor = symbolicDescriptor;
+ this.fieldMatchers = fieldMatchers;
+ }
+
+ protected UnsignedLong getNumericDescriptor() {
+ return numericDescriptor;
+ }
+
+ protected Symbol getSymbolicDescriptor() {
+ return symbolicDescriptor;
+ }
+
+ protected boolean descriptorMatches(Object descriptor) {
+ return numericDescriptor.equals(descriptor) || symbolicDescriptor.equals(descriptor);
+ }
+
+ protected Map<Enum<?>, Matcher<?>> getMatchers() {
+ return fieldMatchers;
+ }
+
+ /**
+ * Returns the received values, keyed by enums representing the fields
+ * (the enums have an ordinal number matching the AMQP spec field order,
+ * and a sensible name)
+ */
+ protected Map<Enum<?>, Object> getReceivedFields() {
+ return receivedFields;
+ }
+
+ protected void verifyFields(List<Object> described) {
+ int fieldNumber = 0;
+ HashMap<Enum<?>, Object> valueMap = new HashMap<>();
+ for (Object value : described) {
+ valueMap.put(getField(fieldNumber++), value);
+ }
+
+ receivedFields = valueMap;
+
+ _logger.debug("About to check the fields of the described type." + "\n Received:" + valueMap + "\n Expectations: " + fieldMatchers);
+ for (Map.Entry<Enum<?>, Matcher<?>> entry : fieldMatchers.entrySet()) {
+ @SuppressWarnings("unchecked")
+ Matcher<Object> matcher = (Matcher<Object>) entry.getValue();
+ Enum<?> field = entry.getKey();
+ assertThat("Field " + field + " value should match", valueMap.get(field), matcher);
+ }
+ }
+
+ /**
+ * Intended to be overridden in most cases (but not necessarily all - hence not marked as abstract)
+ */
+ protected Enum<?> getField(int fieldIndex) {
+ throw new UnsupportedOperationException("getField is expected to be overridden by subclass if it is required");
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8e0e28fe/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 e835af3..c5e902d 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
@@ -18,9 +18,6 @@
*/
package org.apache.qpid.jms.test.testpeer;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -28,16 +25,9 @@ import org.apache.qpid.proton.amqp.Binary;
import org.apache.qpid.proton.amqp.Symbol;
import org.apache.qpid.proton.amqp.UnsignedLong;
import org.hamcrest.Matcher;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends FrameMatchingHandler
{
- private final Logger _logger = LoggerFactory.getLogger(getClass());
-
- private final Map<Enum<?>, Matcher<?>> _fieldMatchers;
- private Map<Enum<?>, Object> _receivedFields;
-
/**
* @param fieldMatchers a map of field matchers, keyed by enums representing the fields
* (the enums just need to have an ordinal number matching the AMQP spec field order,
@@ -50,24 +40,7 @@ public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends FrameM
Map<Enum<?>, Matcher<?>> fieldMatchers,
Runnable onSuccess)
{
- super(frameType, channel, numericDescriptor, symbolicDescriptor, onSuccess);
- _fieldMatchers = fieldMatchers;
- }
-
- protected Map<Enum<?>, Matcher<?>> getMatchers()
- {
- return _fieldMatchers;
- }
-
- /**
- * Returns the received values, keyed by enums representing the fields
- * (the enums have an ordinal number matching the AMQP spec field order,
- * and a sensible name)
- */
- @Override
- protected Map<Enum<?>, Object> getReceivedFields()
- {
- return _receivedFields;
+ super(frameType, channel, numericDescriptor, symbolicDescriptor, onSuccess, fieldMatchers);
}
@Override
@@ -77,36 +50,5 @@ public abstract class AbstractFrameFieldAndPayloadMatchingHandler extends FrameM
verifyPayload(payload);
}
- protected void verifyFields(List<Object> described)
- {
- int fieldNumber = 0;
- HashMap<Enum<?>, Object> valueMap = new HashMap<>();
- for(Object value : described)
- {
- valueMap.put(getField(fieldNumber++), value);
- }
-
- _receivedFields = valueMap;
-
- _logger.debug("About to check the fields of the described type."
- + "\n Received:" + valueMap
- + "\n Expectations: " + _fieldMatchers);
- for(Map.Entry<Enum<?>, Matcher<?>> entry : _fieldMatchers.entrySet())
- {
- @SuppressWarnings("unchecked")
- Matcher<Object> matcher = (Matcher<Object>) entry.getValue();
- Enum<?> field = entry.getKey();
- assertThat("Field " + field + " value should match", valueMap.get(field), matcher);
- }
- }
-
- /**
- * Intended to be overridden in most cases (but not necessarily all - hence not marked as abstract)
- */
- protected Enum<?> getField(int fieldIndex)
- {
- throw new UnsupportedOperationException("getFieldName is expected to be overridden by subclass if it is required");
- }
-
protected abstract void verifyPayload(Binary payload);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/8e0e28fe/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
index 5ccabcb..d1fb852 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/FrameMatchingHandler.java
@@ -25,17 +25,16 @@ import org.apache.qpid.proton.amqp.Binary;
import org.apache.qpid.proton.amqp.DescribedType;
import org.apache.qpid.proton.amqp.Symbol;
import org.apache.qpid.proton.amqp.UnsignedLong;
+import org.hamcrest.Matcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-abstract class FrameMatchingHandler implements FrameHandler
+abstract class FrameMatchingHandler extends AbstractFieldAndDescriptorMatcher implements FrameHandler
{
private static final Logger LOGGER = LoggerFactory.getLogger(FrameMatchingHandler.class);
public static int ANY_CHANNEL = -1;
- private final UnsignedLong _numericDescriptor;
- private final Symbol _symbolicDescriptor;
private final FrameType _frameType;
/** The expected channel number, or {@link #ANY_CHANNEL} if we don't care */
@@ -48,17 +47,15 @@ abstract class FrameMatchingHandler implements FrameHandler
protected FrameMatchingHandler(FrameType frameType,
int channel,
UnsignedLong numericDescriptor,
- Symbol symbolicDescriptor, Runnable onSuccessAction)
+ Symbol symbolicDescriptor, Runnable onSuccessAction,
+ Map<Enum<?>, Matcher<?>> fieldMatchers)
{
+ super(numericDescriptor, symbolicDescriptor, fieldMatchers);
_frameType = frameType;
- _numericDescriptor = numericDescriptor;
- _symbolicDescriptor = symbolicDescriptor;
_expectedChannel = channel;
_onSuccessAction = onSuccessAction;
}
- protected abstract Map<Enum<?>,Object> getReceivedFields();
-
/**
* 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
@@ -71,7 +68,7 @@ abstract class FrameMatchingHandler implements FrameHandler
{
if(type == _frameType.ordinal()
&& (_expectedChannel == ANY_CHANNEL || _expectedChannel == ch)
- && (_numericDescriptor.equals(dt.getDescriptor()) || _symbolicDescriptor.equals(dt.getDescriptor()))
+ && descriptorMatches(dt.getDescriptor())
&& (dt.getDescribed() instanceof List))
{
_actualChannel = ch;
@@ -84,7 +81,7 @@ abstract class FrameMatchingHandler implements FrameHandler
"Frame was not as expected. Expected: " +
"type=%s, channel=%s, descriptor=%s/%s but got: " +
"type=%s, channel=%s, descriptor=%s",
- _frameType.ordinal(), expectedChannelString(), _symbolicDescriptor, _numericDescriptor,
+ _frameType.ordinal(), expectedChannelString(), getSymbolicDescriptor(), getNumericDescriptor(),
type, ch, dt.getDescriptor()));
}
}
@@ -139,7 +136,7 @@ abstract class FrameMatchingHandler implements FrameHandler
@Override
public String toString()
{
- return "FrameMatchingHandler [_symbolicDescriptor=" + _symbolicDescriptor
+ return "FrameMatchingHandler [_symbolicDescriptor=" + getSymbolicDescriptor()
+ ", _expectedChannel=" + expectedChannelString()
+ "]";
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org