QPIDIT-43 QPIDIT-44 QPIDIT-45: Added framework for new tests: AMQP features 
test, AMQP and JMS DTX and large content tests


Project: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/commit/138dc7d1
Tree: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/tree/138dc7d1
Diff: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/diff/138dc7d1

Branch: refs/heads/master
Commit: 138dc7d1ea271c824fd45a0b574b69c07a8101e4
Parents: aa01b8e
Author: Kim van der Riet <kp...@apache.org>
Authored: Mon Oct 17 16:16:55 2016 -0400
Committer: Kim van der Riet <kp...@apache.org>
Committed: Mon Oct 17 16:16:55 2016 -0400

----------------------------------------------------------------------
 .../amqp_types_test/Receiver.java               | 274 -------------
 .../amqp_types_test/Sender.java                 | 260 ------------
 .../jms_dtx_test/Receiver.java                  | 407 +++++++++++++++++++
 .../qpid_interop_test/jms_dtx_test/Sender.java  | 113 +++++
 .../jms_large_content_test/Receiver.java        | 407 +++++++++++++++++++
 .../jms_large_content_test/Sender.java          | 113 +++++
 shims/qpid-proton-cpp/src/CMakeLists.txt        | 129 +++---
 .../src/qpidit/amqp_dtx_test/Receiver.cpp       |  43 ++
 .../src/qpidit/amqp_dtx_test/Receiver.hpp       |  39 ++
 .../src/qpidit/amqp_dtx_test/Sender.cpp         |  43 ++
 .../src/qpidit/amqp_dtx_test/Sender.hpp         |  39 ++
 .../src/qpidit/amqp_features_test/Receiver.cpp  |  43 ++
 .../src/qpidit/amqp_features_test/Receiver.hpp  |  39 ++
 .../src/qpidit/amqp_features_test/Sender.cpp    |  44 ++
 .../src/qpidit/amqp_features_test/Sender.hpp    |  39 ++
 .../qpidit/amqp_large_content_test/Receiver.cpp |  43 ++
 .../qpidit/amqp_large_content_test/Receiver.hpp |  39 ++
 .../qpidit/amqp_large_content_test/Sender.cpp   |  43 ++
 .../qpidit/amqp_large_content_test/Sender.hpp   |  40 ++
 .../src/qpidit/jms_dtx_test/Receiver.cpp        |  43 ++
 .../src/qpidit/jms_dtx_test/Receiver.hpp        |  39 ++
 .../src/qpidit/jms_dtx_test/Sender.cpp          |  43 ++
 .../src/qpidit/jms_dtx_test/Sender.hpp          |  39 ++
 .../src/qpidit/jms_hdrs_props_test/Receiver.cpp |  13 +-
 .../src/qpidit/jms_hdrs_props_test/Receiver.hpp |   3 +-
 .../src/qpidit/jms_hdrs_props_test/Sender.hpp   |   1 -
 .../qpidit/jms_large_content_test/Receiver.cpp  |  43 ++
 .../qpidit/jms_large_content_test/Receiver.hpp  |  39 ++
 .../qpidit/jms_large_content_test/Sender.cpp    |  43 ++
 .../qpidit/jms_large_content_test/Sender.hpp    |  39 ++
 .../src/qpidit/jms_messages_test/Receiver.hpp   |   1 -
 .../src/qpidit/jms_messages_test/Sender.hpp     |   1 -
 .../src/amqp_dtx_test/Receiver.py               |  75 ++++
 .../src/amqp_dtx_test/Sender.py                 |  94 +++++
 .../src/amqp_features_test/Receiver.py          |  75 ++++
 .../src/amqp_features_test/Sender.py            |  94 +++++
 .../src/amqp_large_content_test/Receiver.py     |  75 ++++
 .../src/amqp_large_content_test/Sender.py       |  94 +++++
 .../src/amqp_types_test/Receiver.py             |  16 +-
 .../src/amqp_types_test/Sender.py               |  14 +-
 .../src/jms_dtx_test/Receiver.py                |  76 ++++
 .../src/jms_dtx_test/Sender.py                  |  95 +++++
 .../src/jms_hdrs_props_test/Receiver.py         |  22 +-
 .../src/jms_hdrs_props_test/Sender.py           |  31 +-
 .../src/jms_large_content_test/Receiver.py      |  76 ++++
 .../src/jms_large_content_test/Sender.py        |  95 +++++
 .../src/jms_messages_test/Receiver.py           |  24 +-
 .../src/jms_messages_test/Sender.py             |  43 +-
 src/python/qpid_interop_test/amqp_dtx_test.py   | 136 +++++++
 .../qpid_interop_test/amqp_features_test.py     | 136 +++++++
 .../amqp_large_content_test.py                  | 156 +++++++
 src/python/qpid_interop_test/amqp_types_test.py |   2 +-
 src/python/qpid_interop_test/jms_dtx_test.py    | 144 +++++++
 .../qpid_interop_test/jms_hdrs_props_test.py    |   2 +-
 .../qpid_interop_test/jms_large_content_test.py | 144 +++++++
 src/python/qpid_interop_test/jms_types.py       |  39 ++
 56 files changed, 3596 insertions(+), 706 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Receiver.java
----------------------------------------------------------------------
diff --git 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Receiver.java
 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Receiver.java
deleted file mode 100644
index fea263a..0000000
--- 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Receiver.java
+++ /dev/null
@@ -1,274 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.interop_test.amqp_types_test;
-
-import java.math.BigDecimal;
-import java.util.UUID;
-import java.util.Vector;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class Receiver {
-    private static final String USER = "guest";
-    private static final String PASSWORD = "guest";
-    private static final int TIMEOUT = 1000;
-    private static final String[] SUPPORTED_AMQP_TYPES = {"null",
-                                                          "boolean",
-                                                          "ubyte",
-                                                          "ushort",
-                                                          "uint",
-                                                          "ulong",
-                                                          "byte",
-                                                          "short",
-                                                          "int",
-                                                          "long",
-                                                          "float",
-                                                          "double",
-                                                          "decimal32",
-                                                          "decimal64",
-                                                          "decimal128",
-                                                          "char",
-                                                          "timestamp",
-                                                          "uuid",
-                                                          "binary",
-                                                          "string",
-                                                          "symbol",
-                                                          "list",
-                                                          "map",
-                                                          "array"};
-
-    public static void main(String[] args) throws Exception {
-        if (args.length < 4) {
-            System.out.println("AmqpReceiver: Insufficient number of 
arguments");
-            System.out.println("AmqpReceiver: Expected arguments: 
broker_address, queue_name, amqp_type, num_test_values");
-            System.exit(1);
-        }
-        String brokerAddress = "amqp://" + args[0];
-        String queueName = args[1];
-        String amqpType = args[2];
-        int numTestValues = Integer.parseInt(args[3]);
-        Connection connection = null;
-
-        try {
-            ConnectionFactory factory = (ConnectionFactory)new 
JmsConnectionFactory(brokerAddress);
-
-            connection = factory.createConnection(USER, PASSWORD);
-            connection.setExceptionListener(new MyExceptionListener());
-            connection.start();
-
-            Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
-            
-            Queue queue = session.createQueue(queueName);
-
-            MessageConsumer messageConsumer = session.createConsumer(queue);
-            
-            Vector<String> outList = new Vector<String>();
-            outList.add(amqpType);
-            if (isSupportedAmqpType(amqpType)) {
-                int actualCount = 0;
-                Message message = null;
-                for (int i = 1; i <= numTestValues; i++, actualCount++) {
-                    message = messageConsumer.receive(TIMEOUT);
-                    if (message == null)
-                        break;
-                    switch (amqpType) {
-                    case "null":
-                        long bodyLength = 
((BytesMessage)message).getBodyLength();
-                        if (bodyLength == 0L) {
-                            outList.add("None");
-                        } else {
-                            throw new Exception("AmqpReceiver: JMS 
BytesMessage size error: Expected 0 bytes, read " + bodyLength);
-                        }
-                        break;
-                    case "boolean":
-                        String bs = 
String.valueOf(((BytesMessage)message).readBoolean());
-                        outList.add(Character.toUpperCase(bs.charAt(0)) + 
bs.substring(1));
-                        break;
-                    case "ubyte":
-                        byte byteValue = ((BytesMessage)message).readByte();
-                        short ubyteValue = (short)(byteValue & 0xff);
-                        outList.add(String.valueOf(ubyteValue));
-                        break;
-                    case "ushort":
-                    {
-                        byte[] byteArray = new byte[2];
-                        int numBytes = 
((BytesMessage)message).readBytes(byteArray);
-                        if (numBytes != 2) {
-                            // TODO: numBytes == -1 means no more bytes in 
stream - add error message for this case?
-                            throw new Exception("AmqpReceiver: JMS 
BytesMessage size error: Exptected 2 bytes, read " + numBytes);
-                        }
-                        int ushortValue = 0;
-                        for (int j=0; j<byteArray.length; j++) {
-                            ushortValue = (ushortValue << 8) + (byteArray[j] & 
0xff);
-                        }
-                        outList.add(String.valueOf(ushortValue));
-                        break;
-                    }
-                    case "uint":
-                    {
-                        byte[] byteArray = new byte[4];
-                        int numBytes = 
((BytesMessage)message).readBytes(byteArray);
-                        if (numBytes != 4) {
-                            // TODO: numBytes == -1 means no more bytes in 
stream - add error message for this case?
-                            throw new Exception("AmqpReceiver: JMS 
BytesMessage size error: Exptected 4 bytes, read " + numBytes);
-                        }
-                        long uintValue = 0;
-                        for (int j=0; j<byteArray.length; j++) {
-                            uintValue = (uintValue << 8) + (byteArray[j] & 
0xff);
-                        }
-                        outList.add(String.valueOf(uintValue));
-                        break;
-                    }
-                    case "ulong":
-                    case "timestamp":
-                    {
-                        // TODO: Tidy this ugliness up - perhaps use of 
vector<byte>?
-                        byte[] byteArray = new byte[8];
-                        int numBytes = 
((BytesMessage)message).readBytes(byteArray);
-                        if (numBytes != 8) {
-                            // TODO: numBytes == -1 means no more bytes in 
stream - add error message for this case?
-                            throw new Exception("AmqpReceiver: JMS 
BytesMessage size error: Exptected 8 bytes, read " + numBytes);
-                        }
-                        // TODO: shortcut in use here - this byte array should 
go through a Java type that can represent this as a number - such as BigInteger.
-                        
outList.add(String.format("0x%02x%02x%02x%02x%02x%02x%02x%02x", byteArray[0], 
byteArray[1],
-                                byteArray[2], byteArray[3], byteArray[4], 
byteArray[5], byteArray[6], byteArray[7]));
-                        break;
-                    }
-                    case "byte":
-                        
outList.add(String.valueOf(((BytesMessage)message).readByte()));
-                        break;
-                    case "short":
-                        
outList.add(String.valueOf(((BytesMessage)message).readShort()));
-                        break;
-                    case "int":
-                        
outList.add(String.valueOf(((BytesMessage)message).readInt()));
-                        break;
-                    case "long":
-                        
outList.add(String.valueOf(((BytesMessage)message).readLong()));
-                        break;
-                    case "float":
-                        float f = ((BytesMessage)message).readFloat();
-                        int i0 = Float.floatToRawIntBits(f);
-                        outList.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
-                        break;
-                    case "double":
-                        double d = ((BytesMessage)message).readDouble();
-                        long l = Double.doubleToRawLongBits(d);
-                        outList.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
-                        break;
-                    case "decimal32":
-                        BigDecimal bd32 = 
(BigDecimal)((ObjectMessage)message).getObject();
-                        outList.add(bd32.toString());
-                        break;
-                    case "decimal64":
-                        BigDecimal bd64 = 
(BigDecimal)((ObjectMessage)message).getObject();
-                        outList.add(bd64.toString());
-                        break;
-                    case "decimal128":
-                        BigDecimal bd128 = 
(BigDecimal)((ObjectMessage)message).getObject();
-                        outList.add(bd128.toString());
-                        break;
-                    case "char":
-                        outList.add(String.format("%c", 
((BytesMessage)message).readChar()));
-                        break;
-                    case "uuid":
-                        UUID uuid = (UUID)((ObjectMessage)message).getObject();
-                        outList.add(uuid.toString());
-                        break;
-                    case "binary":
-                        BytesMessage bm = (BytesMessage)message;
-                        int msgLen = (int)bm.getBodyLength();
-                        byte[] ba = new byte[msgLen];
-                        if (bm.readBytes(ba) == msgLen) {
-                            outList.add(new String(ba));
-                        } else {
-                            // TODO: Raise exception or error here: size 
mismatch
-                        }
-                        break;
-                    case "string":
-                        outList.add(((TextMessage)message).getText());
-                        break;
-                    case "symbol":
-                        outList.add(((BytesMessage)message).readUTF());
-                        break;
-                    case "list":
-                        break;
-                    case "map":
-                        break;
-                    case "array":
-                        break;
-                    default:
-                        // Internal error, should never happen if 
SUPPORTED_AMQP_TYPES matches this case stmt
-                        connection.close();
-                        throw new Exception("AmqpReceiver: Internal error: 
unsupported AMQP type \"" + amqpType + "\"");
-                    }
-                }
-            } else {
-                System.out.println("ERROR: AmqpReceiver: AMQP type \"" + 
amqpType + "\" is not supported");
-                connection.close();
-                System.exit(1);
-            }
-
-            connection.close();
-
-            // No exception, print results
-            for (int i=0; i<outList.size(); i++) {
-                System.out.println(outList.get(i));
-            }
-        } catch (Exception exp) {
-            if (connection != null)
-                connection.close();
-            System.out.println("Caught exception, exiting.");
-            exp.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-    
-    protected static boolean isSupportedAmqpType(String amqpType) {
-        for (String supportedAmqpType: SUPPORTED_AMQP_TYPES) {
-            if (amqpType.equals(supportedAmqpType))
-                return true;
-        }
-        return false;
-    }
-
-    private static class MyExceptionListener implements ExceptionListener {
-        @Override
-        public void onException(JMSException exception) {
-            System.out.println("Connection ExceptionListener fired, exiting.");
-            exception.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-
-    public Receiver(String brokerAddress, String queueName) {
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Sender.java
----------------------------------------------------------------------
diff --git 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Sender.java
 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Sender.java
deleted file mode 100644
index 7b436de..0000000
--- 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/amqp_types_test/Sender.java
+++ /dev/null
@@ -1,260 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.qpid.interop_test.amqp_types_test;
-
-import java.math.BigDecimal; 
-import java.math.BigInteger; 
-import java.math.MathContext; 
-import java.util.Arrays;
-import java.util.UUID;
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.ExceptionListener;
-import javax.jms.JMSException;
-import javax.jms.MapMessage;
-import javax.jms.Message;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.StreamMessage;
-import javax.jms.TextMessage;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import org.apache.qpid.jms.JmsConnectionFactory;
-
-public class Sender {
-    private static final String USER = "guest";
-    private static final String PASSWORD = "guest";
-    private static final String[] SUPPORTED_AMQP_TYPES = {"null",
-                                                          "boolean",
-                                                          "ubyte",
-                                                          "ushort",
-                                                          "uint",
-                                                          "ulong",
-                                                          "byte",
-                                                          "short",
-                                                          "int",
-                                                          "long",
-                                                          "float",
-                                                          "double",
-                                                          "decimal32",
-                                                          "decimal64",
-                                                          "decimal128",
-                                                          "char",
-                                                          "timestamp",
-                                                          "uuid",
-                                                          "binary",
-                                                          "string",
-                                                          "symbol",
-                                                          "list",
-                                                          "map",
-                                                          "array"};
-
-    public static void main(String[] args) throws Exception {
-        if (args.length < 4) {
-            System.out.println("AmqpSender: Insufficient number of arguments");
-            System.out.println("AmqpSender: Expected arguments: 
broker_address, queue_name, amqp_type, test_val, test_val, ...");
-            System.exit(1);
-        }
-        String brokerAddress = "amqp://" + args[0];
-        String queueName = args[1];
-        String amqpType = args[2];
-        String[] testValueList = Arrays.copyOfRange(args, 3, args.length); // 
Use remaining args as test values
-
-        try {
-            ConnectionFactory factory = (ConnectionFactory)new 
JmsConnectionFactory(brokerAddress);
-
-            Connection connection = factory.createConnection();
-            connection.setExceptionListener(new MyExceptionListener());
-            connection.start();
-
-            Session session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
-            
-            Queue queue = session.createQueue(queueName);
-
-            MessageProducer messageProducer = session.createProducer(queue);
-
-            if (isSupportedAmqpType(amqpType)) {
-                Message message = null;
-                for (String testValueStr : testValueList) {
-                    switch (amqpType) {
-                    case "null":
-                        message = session.createBytesMessage();
-                        break;
-                    case "boolean":
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeBoolean(Boolean.parseBoolean(testValueStr));
-                        break;
-                    case "ubyte":
-                    {
-                        byte testValue = (byte)Short.parseShort(testValueStr);
-                        message = session.createBytesMessage();
-                        ((BytesMessage)message).writeByte(testValue);
-                        break;
-                    }
-                    case "ushort":
-                    {
-                        int testValue = Integer.parseInt(testValueStr);
-                        byte[] byteArray = new byte[2];
-                        byteArray[0] = (byte)(testValue >> 8);
-                        byteArray[1] = (byte)(testValue);
-                        message = session.createBytesMessage();
-                        ((BytesMessage)message).writeBytes(byteArray);
-                        break;
-                    }
-                    case "uint":
-                    {
-                        long testValue = Long.parseLong(testValueStr);
-                        byte[] byteArray = new byte[4];
-                        byteArray[0] = (byte)(testValue >> 24);
-                        byteArray[1] = (byte)(testValue >> 16);
-                        byteArray[2] = (byte)(testValue >> 8);
-                        byteArray[3] = (byte)(testValue);
-                        message = session.createBytesMessage();
-                        ((BytesMessage)message).writeBytes(byteArray);
-                        break;
-                    }
-                    case "ulong":
-                    {
-                        // TODO: Tidy this ugliness up - perhaps use of 
vector<byte>?
-                        BigInteger testValue = new BigInteger(testValueStr);
-                        byte[] bigIntArray =  testValue.toByteArray(); // may 
be 1 to 9 bytes depending on number
-                        byte[] byteArray = {0, 0, 0, 0, 0, 0, 0, 0};
-                        int effectiveBigIntArrayLen = bigIntArray.length > 8 ? 
8 : bigIntArray.length; // Cap length at 8
-                        int bigIntArrayOffs = bigIntArray.length > 8 ? 
bigIntArray.length - 8 : 0; // Offset when length > 8
-                        for (int i=0; i<bigIntArray.length && i < 8; i++)
-                            byteArray[8 - effectiveBigIntArrayLen + i] = 
bigIntArray[bigIntArrayOffs + i];
-                        message = session.createBytesMessage();
-                        ((BytesMessage)message).writeBytes(byteArray);
-                        break;
-                    }
-                    case "byte":
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeByte(Byte.parseByte(testValueStr));
-                        break;
-                    case "short":
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeShort(Short.parseShort(testValueStr));
-                        break;
-                    case "int":
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeInt(Integer.parseInt(testValueStr));
-                        break;
-                    case "long":
-                    case "timestamp":
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeLong(Long.parseLong(testValueStr));
-                        break;
-                    case "float":
-                        Long i = Long.parseLong(testValueStr.substring(2), 16);
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeFloat(Float.intBitsToFloat(i.intValue()));
-                        break;
-                    case "double":
-                        Long l1 = Long.parseLong(testValueStr.substring(2, 3), 
16) << 60;
-                        Long l2 = Long.parseLong(testValueStr.substring(3), 
16);
-                        message = session.createBytesMessage();
-                        
((BytesMessage)message).writeDouble(Double.longBitsToDouble(l1 | l2));
-                        break;
-                    case "decimal32":
-                        BigDecimal bd32 = new BigDecimal(testValueStr, 
MathContext.DECIMAL32);
-                        message = session.createObjectMessage();
-                        ((ObjectMessage)message).setObject(bd32);
-                        break;
-                    case "decimal64":
-                        BigDecimal bd64 = new BigDecimal(testValueStr, 
MathContext.DECIMAL64);
-                        message = session.createObjectMessage();
-                        ((ObjectMessage)message).setObject(bd64);
-                        break;
-                    case "decimal128":
-                        BigDecimal bd128 = new BigDecimal(testValueStr, 
MathContext.DECIMAL128);
-                        message = session.createObjectMessage();
-                        ((ObjectMessage)message).setObject(bd128);
-                        break;
-                    case "char":
-                        char c = 0;
-                        if (testValueStr.length() == 1) // Single char
-                            c = testValueStr.charAt(0);
-                        else if (testValueStr.length() == 6) // unicode format
-                            c = (char)Integer.parseInt(testValueStr, 16);
-                        message = session.createBytesMessage();
-                        ((BytesMessage)message).writeChar(c);
-                        break;
-                    case "uuid":
-                        UUID uuid = UUID.fromString(testValueStr);
-                        message = session.createObjectMessage();
-                        ((ObjectMessage)message).setObject(uuid);
-                        break;
-                    case "binary":
-                        message = session.createBytesMessage();
-                        byte[] byteArray = testValueStr.getBytes();
-                        ((BytesMessage)message).writeBytes(byteArray, 0, 
byteArray.length);
-                        break;
-                    case "string":
-                        message = session.createTextMessage(testValueStr);
-                        break;
-                    case "symbol":
-                        message = session.createBytesMessage();
-                        ((BytesMessage)message).writeUTF(testValueStr);
-                        break;
-                    case "list":
-                        break;
-                    case "map":
-                        break;
-                    case "array":
-                        break;
-                    default:
-                        // Internal error, should never happen if 
SUPPORTED_AMQP_TYPES matches this case stmt
-                        connection.close();
-                        throw new Exception("AmqpSender: Internal error: 
unsupported AMQP type \"" + amqpType + "\"");
-                    }
-                    messageProducer.send(message, DeliveryMode.NON_PERSISTENT, 
Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
-                }
-            } else {
-                System.out.println("ERROR: AmqpSender: AMQP type \"" + 
amqpType + "\" is not supported");
-                connection.close();
-                System.exit(1);
-            }
-            
-            connection.close();
-        } catch (Exception exp) {
-            System.out.println("Caught exception, exiting.");
-            exp.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-    
-    protected static boolean isSupportedAmqpType(String amqpType) {
-        for (String supportedAmqpType: SUPPORTED_AMQP_TYPES) {
-            if (amqpType.equals(supportedAmqpType))
-                return true;
-        }
-        return false;
-    }
-
-    private static class MyExceptionListener implements ExceptionListener {
-        @Override
-        public void onException(JMSException exception) {
-            System.out.println("Connection ExceptionListener fired, exiting.");
-            exception.printStackTrace(System.out);
-            System.exit(1);
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
----------------------------------------------------------------------
diff --git 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
new file mode 100644
index 0000000..a4763f8
--- /dev/null
+++ 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Receiver.java
@@ -0,0 +1,407 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.interop_test.jms_dtx_test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import javax.jms.BytesMessage;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.ObjectMessage;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.StreamMessage;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonReader;
+import javax.json.JsonWriter;
+import org.apache.qpid.jms.JmsConnectionFactory;
+
+public class Receiver {
+    private static final String USER = "guest";
+    private static final String PASSWORD = "guest";
+    private static final int TIMEOUT = 1000;
+    private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = 
{"JMS_MESSAGE_TYPE",
+                                                                 
"JMS_BYTESMESSAGE_TYPE",
+                                                                 
"JMS_MAPMESSAGE_TYPE",
+                                                                 
"JMS_OBJECTMESSAGE_TYPE",
+                                                                 
"JMS_STREAMMESSAGE_TYPE",
+                                                                 
"JMS_TEXTMESSAGE_TYPE"};
+    private static enum JMS_DESTINATION_TYPE {JMS_QUEUE, JMS_TEMPORARY_QUEUE, 
JMS_TOPIC, JMS_TEMPORARY_TOPIC};
+    
+    Connection _connection;
+    Session _session;
+    Queue _queue;
+    MessageConsumer _messageConsumer;
+    JsonObjectBuilder _jsonTestValueMapBuilder;
+    
+    // args[0]: Broker URL
+    // args[1]: Queue name
+    // args[2]: JMS message type
+    // args[3]: JSON Test parameters containing testValuesMap
+    public static void main(String[] args) throws Exception {
+        if (args.length != 4) {
+            System.out.println("JmsReceiverShim: Incorrect number of 
arguments");
+            System.out.println("JmsReceiverShim: Expected arguments: 
broker_address, queue_name, JMS_msg_type, JSON_receive_params");
+            System.exit(1);
+        }
+        String brokerAddress = "amqp://" + args[0];
+        String queueName = args[1];
+        String jmsMessageType = args[2];
+        if (!isSupportedJmsMessageType(jmsMessageType)) {
+            System.out.println("ERROR: JmsReceiverShim: Unknown or unsupported 
JMS message type \"" + jmsMessageType + "\"");
+            System.exit(1);
+        }
+
+        JsonReader jsonReader = Json.createReader(new StringReader(args[3]));
+        JsonObject numTestValuesMap = jsonReader.readObject();
+        jsonReader.close();
+        
+        Receiver shim = new Receiver(brokerAddress, queueName);
+        shim.run(jmsMessageType, numTestValuesMap);
+    }
+
+    public Receiver(String brokerAddress, String queueName) {
+        try {
+            _connection = null;
+            ConnectionFactory factory = (ConnectionFactory)new 
JmsConnectionFactory(brokerAddress);
+            _connection = factory.createConnection(USER, PASSWORD);
+            _connection.setExceptionListener(new MyExceptionListener());
+            _connection.start();
+
+            _session = _connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+            _queue = _session.createQueue(queueName);
+
+            _messageConsumer = _session.createConsumer(_queue);
+
+            _jsonTestValueMapBuilder = Json.createObjectBuilder();
+        } catch (Exception exc) {
+            if (_connection != null)
+                try { _connection.close(); } catch (JMSException e) {}
+            System.out.println("Caught exception, exiting.");
+            exc.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+    
+    public void run(String jmsMessageType, JsonObject numTestValuesMap) {
+        try {
+            List<String> subTypeKeyList = new 
ArrayList<String>(numTestValuesMap.keySet());
+            Collections.sort(subTypeKeyList);
+            
+            Message message = null;
+            
+            for (String subType: subTypeKeyList) {
+                JsonArrayBuilder jasonTestValuesArrayBuilder = 
Json.createArrayBuilder();
+                for (int i=0; 
i<numTestValuesMap.getJsonNumber(subType).intValue(); ++i) {
+                    message = _messageConsumer.receive(TIMEOUT);
+                    if (message == null) break;
+                    switch (jmsMessageType) {
+                    case "JMS_MESSAGE_TYPE":
+                        processJMSMessage(jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_BYTESMESSAGE_TYPE":
+                        processJMSBytesMessage(jmsMessageType, subType, 
message, jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_STREAMMESSAGE_TYPE":
+                        processJMSStreamMessage(jmsMessageType, subType, 
message, jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_MAPMESSAGE_TYPE":
+                        processJMSMapMessage(jmsMessageType, subType, i, 
message, jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_OBJECTMESSAGE_TYPE":
+                        processJMSObjectMessage(subType, message, 
jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_TEXTMESSAGE_TYPE":
+                        processJMSTextMessage(message, 
jasonTestValuesArrayBuilder);
+                        break;
+                    default:
+                        _connection.close();
+                        throw new Exception("JmsReceiverShim: Internal error: 
Unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
+                    }
+                }
+                _jsonTestValueMapBuilder.add(subType, 
jasonTestValuesArrayBuilder);
+            }
+            _connection.close();
+    
+            System.out.println(jmsMessageType);
+            StringWriter out = new StringWriter();
+            writeJsonObject(_jsonTestValueMapBuilder, out);
+            System.out.println(out.toString());        
+        } catch (Exception exp) {
+            try { _connection.close(); } catch (JMSException e) {}
+            System.out.println("Caught exception, exiting.");
+            exp.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+    
+    protected void processJMSMessage(JsonArrayBuilder 
jasonTestValuesArrayBuilder) {
+        jasonTestValuesArrayBuilder.addNull();        
+    }
+    
+    protected void processJMSBytesMessage(String jmsMessageType, String 
subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws 
Exception, JMSException, IOException, ClassNotFoundException {
+        switch (subType) {
+        case "boolean":
+            
jasonTestValuesArrayBuilder.add(((BytesMessage)message).readBoolean()?"True":"False");
+            break;
+        case "byte":
+            
jasonTestValuesArrayBuilder.add(formatByte(((BytesMessage)message).readByte()));
+            break;
+        case "bytes":
+            {
+                byte[] bytesBuff = new byte[65536];
+                int numBytesRead = 
((BytesMessage)message).readBytes(bytesBuff);
+                if (numBytesRead >= 0) {
+                    jasonTestValuesArrayBuilder.add(new 
String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
+                } else {
+                    // NOTE: For this case, an empty byte array has nothing to 
return
+                    jasonTestValuesArrayBuilder.add(new String());
+                }
+            }
+            break;
+        case "char":
+            
jasonTestValuesArrayBuilder.add(formatChar(((BytesMessage)message).readChar()));
+            break;
+        case "double":
+            long l = 
Double.doubleToRawLongBits(((BytesMessage)message).readDouble());
+            jasonTestValuesArrayBuilder.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
+            break;
+        case "float":
+            int i0 = 
Float.floatToRawIntBits(((BytesMessage)message).readFloat());
+            jasonTestValuesArrayBuilder.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
+            break;
+        case "int":
+            
jasonTestValuesArrayBuilder.add(formatInt(((BytesMessage)message).readInt()));
+            break;
+        case "long":
+            
jasonTestValuesArrayBuilder.add(formatLong(((BytesMessage)message).readLong()));
+            break;
+        case "object":
+            {
+                byte[] bytesBuff = new byte[65536];
+                int numBytesRead = 
((BytesMessage)message).readBytes(bytesBuff);
+                if (numBytesRead >= 0) {
+                    ByteArrayInputStream bais = new 
ByteArrayInputStream(Arrays.copyOfRange(bytesBuff, 0, numBytesRead));
+                    ObjectInputStream ois = new ObjectInputStream(bais);
+                    Object obj = ois.readObject();
+                    jasonTestValuesArrayBuilder.add(obj.getClass().getName() + 
":" + obj.toString());
+                } else {
+                    jasonTestValuesArrayBuilder.add("<object error>");
+                }
+            }
+            break;
+        case "short":
+            
jasonTestValuesArrayBuilder.add(formatShort(((BytesMessage)message).readShort()));
+            break;
+        case "string":
+            jasonTestValuesArrayBuilder.add(((BytesMessage)message).readUTF());
+            break;
+        default:
+            throw new Exception("JmsReceiverShim: Unknown subtype for " + 
jmsMessageType + ": \"" + subType + "\"");
+        }        
+    }
+    
+    protected void processJMSMapMessage(String jmsMessageType, String subType, 
int count, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) 
throws Exception, JMSException {
+        String name = String.format("%s%03d", subType, count);
+        switch (subType) {
+        case "boolean":
+            
jasonTestValuesArrayBuilder.add(((MapMessage)message).getBoolean(name)?"True":"False");
+            break;
+        case "byte":
+            
jasonTestValuesArrayBuilder.add(formatByte(((MapMessage)message).getByte(name)));
+            break;
+        case "bytes":
+            jasonTestValuesArrayBuilder.add(new 
String(((MapMessage)message).getBytes(name)));
+            break;
+        case "char":
+            
jasonTestValuesArrayBuilder.add(formatChar(((MapMessage)message).getChar(name)));
+            break;
+        case "double":
+            long l = 
Double.doubleToRawLongBits(((MapMessage)message).getDouble(name));
+            jasonTestValuesArrayBuilder.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
+            break;
+        case "float":
+            int i0 = 
Float.floatToRawIntBits(((MapMessage)message).getFloat(name));
+            jasonTestValuesArrayBuilder.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
+            break;
+        case "int":
+            
jasonTestValuesArrayBuilder.add(formatInt(((MapMessage)message).getInt(name)));
+            break;
+        case "long":
+            
jasonTestValuesArrayBuilder.add(formatLong(((MapMessage)message).getLong(name)));
+            break;
+        case "object":
+            Object obj = ((MapMessage)message).getObject(name);
+            jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + 
obj.toString());
+            break;
+        case "short":
+            
jasonTestValuesArrayBuilder.add(formatShort(((MapMessage)message).getShort(name)));
+            break;
+        case "string":
+            
jasonTestValuesArrayBuilder.add(((MapMessage)message).getString(name));
+            break;
+        default:
+            throw new Exception("JmsReceiverShim: Unknown subtype for " + 
jmsMessageType + ": \"" + subType + "\"");
+        }        
+    }
+    
+    protected void processJMSObjectMessage(String subType, Message message, 
JsonArrayBuilder jasonTestValuesArrayBuilder) throws JMSException {
+        
jasonTestValuesArrayBuilder.add(((ObjectMessage)message).getObject().toString());
+    }
+    
+    protected void processJMSStreamMessage(String jmsMessageType, String 
subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws 
Exception, JMSException {
+        switch (subType) {
+        case "boolean":
+            
jasonTestValuesArrayBuilder.add(((StreamMessage)message).readBoolean()?"True":"False");
+            break;
+        case "byte":
+            
jasonTestValuesArrayBuilder.add(formatByte(((StreamMessage)message).readByte()));
+            break;
+        case "bytes":
+            byte[] bytesBuff = new byte[65536];
+            int numBytesRead = ((StreamMessage)message).readBytes(bytesBuff);
+            if (numBytesRead >= 0) {
+                jasonTestValuesArrayBuilder.add(new 
String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
+            } else {
+                System.out.println("StreamMessage.readBytes() returned " + 
numBytesRead);
+                jasonTestValuesArrayBuilder.add("<bytes error>");
+            }
+            break;
+        case "char":
+            
jasonTestValuesArrayBuilder.add(formatChar(((StreamMessage)message).readChar()));
+            break;
+        case "double":
+            long l = 
Double.doubleToRawLongBits(((StreamMessage)message).readDouble());
+            jasonTestValuesArrayBuilder.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
+            break;
+        case "float":
+            int i0 = 
Float.floatToRawIntBits(((StreamMessage)message).readFloat());
+            jasonTestValuesArrayBuilder.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
+            break;
+        case "int":
+            
jasonTestValuesArrayBuilder.add(formatInt(((StreamMessage)message).readInt()));
+            break;
+        case "long":
+            
jasonTestValuesArrayBuilder.add(formatLong(((StreamMessage)message).readLong()));
+            break;
+        case "object":
+            Object obj = ((StreamMessage)message).readObject();
+            jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + 
obj.toString());
+            break;
+        case "short":
+            
jasonTestValuesArrayBuilder.add(formatShort(((StreamMessage)message).readShort()));
+            break;
+        case "string":
+            
jasonTestValuesArrayBuilder.add(((StreamMessage)message).readString());
+            break;
+        default:
+            throw new Exception("JmsReceiverShim: Unknown subtype for " + 
jmsMessageType + ": \"" + subType + "\"");
+        }        
+    }
+
+    protected void processJMSTextMessage(Message message, JsonArrayBuilder 
jasonTestValuesArrayBuilder) throws JMSException {
+        jasonTestValuesArrayBuilder.add(((TextMessage)message).getText());
+    }
+
+    protected static void writeJsonObject(JsonObjectBuilder builder, 
StringWriter out) {
+        JsonWriter jsonWriter = Json.createWriter(out);
+        jsonWriter.writeObject(builder.build());
+        jsonWriter.close();        
+    }
+
+    protected static String formatByte(byte b) {
+        boolean neg = false;
+        if (b < 0) {
+            neg = true;
+            b = (byte)-b;
+        }
+        return String.format("%s0x%x", neg?"-":"", b);
+    }
+    
+    protected static String formatChar(char c) {
+        if (Character.isLetterOrDigit(c)) {
+            return String.format("%c", c);
+        }
+        char[] ca = {c};
+        return new String(ca);
+    }
+    
+    protected static String formatInt(int i) {
+        boolean neg = false;
+        if (i < 0) {
+            neg = true;
+            i = -i;
+        }
+        return String.format("%s0x%x", neg?"-":"", i);
+    }
+    
+    protected static String formatLong(long l) {
+        boolean neg = false;
+        if (l < 0) {
+            neg = true;
+            l = -l;
+        }
+        return String.format("%s0x%x", neg?"-":"", l);
+    }
+    
+    protected static String formatShort(int s) {
+        boolean neg = false;
+        if (s < 0) {
+            neg = true;
+            s = -s;
+        }
+        return String.format("%s0x%x", neg?"-":"", s);
+    }
+        
+    protected static boolean isSupportedJmsMessageType(String jmsMessageType) {
+        for (String supportedJmsMessageType: SUPPORTED_JMS_MESSAGE_TYPES) {
+            if (jmsMessageType.equals(supportedJmsMessageType))
+                return true;
+        }
+    return false;
+    }
+
+    private static class MyExceptionListener implements ExceptionListener {
+        @Override
+        public void onException(JMSException exception) {
+            System.out.println("Connection ExceptionListener fired, exiting.");
+            exception.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
----------------------------------------------------------------------
diff --git 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
new file mode 100644
index 0000000..78dfa4f
--- /dev/null
+++ 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_dtx_test/Sender.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.interop_test.jms_dtx_test;
+
+import java.io.Serializable;
+import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.jms.BytesMessage;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+import javax.jms.ObjectMessage;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.StreamMessage;
+import javax.jms.TextMessage;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import org.apache.qpid.jms.JmsConnectionFactory;
+
+public class Sender {
+    private static final String USER = "guest";
+    private static final String PASSWORD = "guest";
+    private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = 
{"JMS_MESSAGE_TYPE",
+                                                                 
"JMS_BYTESMESSAGE_TYPE",
+                                                                 
"JMS_MAPMESSAGE_TYPE",
+                                                                 
"JMS_OBJECTMESSAGE_TYPE",
+                                                                 
"JMS_STREAMMESSAGE_TYPE",
+                                                                 
"JMS_TEXTMESSAGE_TYPE"};
+    Connection _connection;
+    Session _session;
+    Queue _queue;
+    MessageProducer _messageProducer;
+    int _msgsSent;
+    
+
+    // args[0]: Broker URL
+    // args[1]: Queue name
+    // ...
+    public static void main(String[] args) throws Exception {
+        if (args.length != 2) {
+            System.out.println("JmsSenderShim: Incorrect number of arguments");
+            System.out.println("JmsSenderShim: Expected arguments: 
broker_address, queue_name, ...");
+            System.exit(1);
+        }
+        String brokerAddress = "amqp://" + args[0];
+        String queueName = args[1];
+
+        Sender shim = new Sender(brokerAddress, queueName);
+        shim.runTests();
+    }
+
+    public Sender(String brokerAddress, String queueName) {
+        try {
+            ConnectionFactory factory = (ConnectionFactory)new 
JmsConnectionFactory(brokerAddress);
+
+            _connection = factory.createConnection();
+            _connection.setExceptionListener(new MyExceptionListener());
+            _connection.start();
+
+            _session = _connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+            _queue = _session.createQueue(queueName);
+
+            _messageProducer = _session.createProducer(_queue);
+            
+            _msgsSent = 0;
+        } catch (Exception exp) {
+            System.out.println("Caught exception, exiting.");
+            exp.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+
+    public void runTests() throws Exception {
+        _connection.close();
+    }
+    
+
+    private static class MyExceptionListener implements ExceptionListener {
+        @Override
+        public void onException(JMSException exception) {
+            System.out.println("Connection ExceptionListener fired, exiting.");
+            exception.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
----------------------------------------------------------------------
diff --git 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
new file mode 100644
index 0000000..0eed5ef
--- /dev/null
+++ 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Receiver.java
@@ -0,0 +1,407 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.interop_test.jms_large_content_test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import javax.jms.BytesMessage;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.Destination;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.ObjectMessage;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.StreamMessage;
+import javax.jms.TextMessage;
+import javax.jms.Topic;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
+import javax.json.JsonReader;
+import javax.json.JsonWriter;
+import org.apache.qpid.jms.JmsConnectionFactory;
+
+public class Receiver {
+    private static final String USER = "guest";
+    private static final String PASSWORD = "guest";
+    private static final int TIMEOUT = 1000;
+    private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = 
{"JMS_MESSAGE_TYPE",
+                                                                 
"JMS_BYTESMESSAGE_TYPE",
+                                                                 
"JMS_MAPMESSAGE_TYPE",
+                                                                 
"JMS_OBJECTMESSAGE_TYPE",
+                                                                 
"JMS_STREAMMESSAGE_TYPE",
+                                                                 
"JMS_TEXTMESSAGE_TYPE"};
+    private static enum JMS_DESTINATION_TYPE {JMS_QUEUE, JMS_TEMPORARY_QUEUE, 
JMS_TOPIC, JMS_TEMPORARY_TOPIC};
+    
+    Connection _connection;
+    Session _session;
+    Queue _queue;
+    MessageConsumer _messageConsumer;
+    JsonObjectBuilder _jsonTestValueMapBuilder;
+    
+    // args[0]: Broker URL
+    // args[1]: Queue name
+    // args[2]: JMS message type
+    // args[3]: JSON Test parameters containing testValuesMap
+    public static void main(String[] args) throws Exception {
+        if (args.length != 4) {
+            System.out.println("JmsReceiverShim: Incorrect number of 
arguments");
+            System.out.println("JmsReceiverShim: Expected arguments: 
broker_address, queue_name, JMS_msg_type, JSON_receive_params");
+            System.exit(1);
+        }
+        String brokerAddress = "amqp://" + args[0];
+        String queueName = args[1];
+        String jmsMessageType = args[2];
+        if (!isSupportedJmsMessageType(jmsMessageType)) {
+            System.out.println("ERROR: JmsReceiverShim: Unknown or unsupported 
JMS message type \"" + jmsMessageType + "\"");
+            System.exit(1);
+        }
+
+        JsonReader jsonReader = Json.createReader(new StringReader(args[3]));
+        JsonObject numTestValuesMap = jsonReader.readObject();
+        jsonReader.close();
+        
+        Receiver shim = new Receiver(brokerAddress, queueName);
+        shim.run(jmsMessageType, numTestValuesMap);
+    }
+
+    public Receiver(String brokerAddress, String queueName) {
+        try {
+            _connection = null;
+            ConnectionFactory factory = (ConnectionFactory)new 
JmsConnectionFactory(brokerAddress);
+            _connection = factory.createConnection(USER, PASSWORD);
+            _connection.setExceptionListener(new MyExceptionListener());
+            _connection.start();
+
+            _session = _connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+            _queue = _session.createQueue(queueName);
+
+            _messageConsumer = _session.createConsumer(_queue);
+
+            _jsonTestValueMapBuilder = Json.createObjectBuilder();
+        } catch (Exception exc) {
+            if (_connection != null)
+                try { _connection.close(); } catch (JMSException e) {}
+            System.out.println("Caught exception, exiting.");
+            exc.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+    
+    public void run(String jmsMessageType, JsonObject numTestValuesMap) {
+        try {
+            List<String> subTypeKeyList = new 
ArrayList<String>(numTestValuesMap.keySet());
+            Collections.sort(subTypeKeyList);
+            
+            Message message = null;
+            
+            for (String subType: subTypeKeyList) {
+                JsonArrayBuilder jasonTestValuesArrayBuilder = 
Json.createArrayBuilder();
+                for (int i=0; 
i<numTestValuesMap.getJsonNumber(subType).intValue(); ++i) {
+                    message = _messageConsumer.receive(TIMEOUT);
+                    if (message == null) break;
+                    switch (jmsMessageType) {
+                    case "JMS_MESSAGE_TYPE":
+                        processJMSMessage(jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_BYTESMESSAGE_TYPE":
+                        processJMSBytesMessage(jmsMessageType, subType, 
message, jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_STREAMMESSAGE_TYPE":
+                        processJMSStreamMessage(jmsMessageType, subType, 
message, jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_MAPMESSAGE_TYPE":
+                        processJMSMapMessage(jmsMessageType, subType, i, 
message, jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_OBJECTMESSAGE_TYPE":
+                        processJMSObjectMessage(subType, message, 
jasonTestValuesArrayBuilder);
+                        break;
+                    case "JMS_TEXTMESSAGE_TYPE":
+                        processJMSTextMessage(message, 
jasonTestValuesArrayBuilder);
+                        break;
+                    default:
+                        _connection.close();
+                        throw new Exception("JmsReceiverShim: Internal error: 
Unknown or unsupported JMS message type \"" + jmsMessageType + "\"");
+                    }
+                }
+                _jsonTestValueMapBuilder.add(subType, 
jasonTestValuesArrayBuilder);
+            }
+            _connection.close();
+    
+            System.out.println(jmsMessageType);
+            StringWriter out = new StringWriter();
+            writeJsonObject(_jsonTestValueMapBuilder, out);
+            System.out.println(out.toString());        
+        } catch (Exception exp) {
+            try { _connection.close(); } catch (JMSException e) {}
+            System.out.println("Caught exception, exiting.");
+            exp.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+    
+    protected void processJMSMessage(JsonArrayBuilder 
jasonTestValuesArrayBuilder) {
+        jasonTestValuesArrayBuilder.addNull();        
+    }
+    
+    protected void processJMSBytesMessage(String jmsMessageType, String 
subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws 
Exception, JMSException, IOException, ClassNotFoundException {
+        switch (subType) {
+        case "boolean":
+            
jasonTestValuesArrayBuilder.add(((BytesMessage)message).readBoolean()?"True":"False");
+            break;
+        case "byte":
+            
jasonTestValuesArrayBuilder.add(formatByte(((BytesMessage)message).readByte()));
+            break;
+        case "bytes":
+            {
+                byte[] bytesBuff = new byte[65536];
+                int numBytesRead = 
((BytesMessage)message).readBytes(bytesBuff);
+                if (numBytesRead >= 0) {
+                    jasonTestValuesArrayBuilder.add(new 
String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
+                } else {
+                    // NOTE: For this case, an empty byte array has nothing to 
return
+                    jasonTestValuesArrayBuilder.add(new String());
+                }
+            }
+            break;
+        case "char":
+            
jasonTestValuesArrayBuilder.add(formatChar(((BytesMessage)message).readChar()));
+            break;
+        case "double":
+            long l = 
Double.doubleToRawLongBits(((BytesMessage)message).readDouble());
+            jasonTestValuesArrayBuilder.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
+            break;
+        case "float":
+            int i0 = 
Float.floatToRawIntBits(((BytesMessage)message).readFloat());
+            jasonTestValuesArrayBuilder.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
+            break;
+        case "int":
+            
jasonTestValuesArrayBuilder.add(formatInt(((BytesMessage)message).readInt()));
+            break;
+        case "long":
+            
jasonTestValuesArrayBuilder.add(formatLong(((BytesMessage)message).readLong()));
+            break;
+        case "object":
+            {
+                byte[] bytesBuff = new byte[65536];
+                int numBytesRead = 
((BytesMessage)message).readBytes(bytesBuff);
+                if (numBytesRead >= 0) {
+                    ByteArrayInputStream bais = new 
ByteArrayInputStream(Arrays.copyOfRange(bytesBuff, 0, numBytesRead));
+                    ObjectInputStream ois = new ObjectInputStream(bais);
+                    Object obj = ois.readObject();
+                    jasonTestValuesArrayBuilder.add(obj.getClass().getName() + 
":" + obj.toString());
+                } else {
+                    jasonTestValuesArrayBuilder.add("<object error>");
+                }
+            }
+            break;
+        case "short":
+            
jasonTestValuesArrayBuilder.add(formatShort(((BytesMessage)message).readShort()));
+            break;
+        case "string":
+            jasonTestValuesArrayBuilder.add(((BytesMessage)message).readUTF());
+            break;
+        default:
+            throw new Exception("JmsReceiverShim: Unknown subtype for " + 
jmsMessageType + ": \"" + subType + "\"");
+        }        
+    }
+    
+    protected void processJMSMapMessage(String jmsMessageType, String subType, 
int count, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) 
throws Exception, JMSException {
+        String name = String.format("%s%03d", subType, count);
+        switch (subType) {
+        case "boolean":
+            
jasonTestValuesArrayBuilder.add(((MapMessage)message).getBoolean(name)?"True":"False");
+            break;
+        case "byte":
+            
jasonTestValuesArrayBuilder.add(formatByte(((MapMessage)message).getByte(name)));
+            break;
+        case "bytes":
+            jasonTestValuesArrayBuilder.add(new 
String(((MapMessage)message).getBytes(name)));
+            break;
+        case "char":
+            
jasonTestValuesArrayBuilder.add(formatChar(((MapMessage)message).getChar(name)));
+            break;
+        case "double":
+            long l = 
Double.doubleToRawLongBits(((MapMessage)message).getDouble(name));
+            jasonTestValuesArrayBuilder.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
+            break;
+        case "float":
+            int i0 = 
Float.floatToRawIntBits(((MapMessage)message).getFloat(name));
+            jasonTestValuesArrayBuilder.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
+            break;
+        case "int":
+            
jasonTestValuesArrayBuilder.add(formatInt(((MapMessage)message).getInt(name)));
+            break;
+        case "long":
+            
jasonTestValuesArrayBuilder.add(formatLong(((MapMessage)message).getLong(name)));
+            break;
+        case "object":
+            Object obj = ((MapMessage)message).getObject(name);
+            jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + 
obj.toString());
+            break;
+        case "short":
+            
jasonTestValuesArrayBuilder.add(formatShort(((MapMessage)message).getShort(name)));
+            break;
+        case "string":
+            
jasonTestValuesArrayBuilder.add(((MapMessage)message).getString(name));
+            break;
+        default:
+            throw new Exception("JmsReceiverShim: Unknown subtype for " + 
jmsMessageType + ": \"" + subType + "\"");
+        }        
+    }
+    
+    protected void processJMSObjectMessage(String subType, Message message, 
JsonArrayBuilder jasonTestValuesArrayBuilder) throws JMSException {
+        
jasonTestValuesArrayBuilder.add(((ObjectMessage)message).getObject().toString());
+    }
+    
+    protected void processJMSStreamMessage(String jmsMessageType, String 
subType, Message message, JsonArrayBuilder jasonTestValuesArrayBuilder) throws 
Exception, JMSException {
+        switch (subType) {
+        case "boolean":
+            
jasonTestValuesArrayBuilder.add(((StreamMessage)message).readBoolean()?"True":"False");
+            break;
+        case "byte":
+            
jasonTestValuesArrayBuilder.add(formatByte(((StreamMessage)message).readByte()));
+            break;
+        case "bytes":
+            byte[] bytesBuff = new byte[65536];
+            int numBytesRead = ((StreamMessage)message).readBytes(bytesBuff);
+            if (numBytesRead >= 0) {
+                jasonTestValuesArrayBuilder.add(new 
String(Arrays.copyOfRange(bytesBuff, 0, numBytesRead)));
+            } else {
+                System.out.println("StreamMessage.readBytes() returned " + 
numBytesRead);
+                jasonTestValuesArrayBuilder.add("<bytes error>");
+            }
+            break;
+        case "char":
+            
jasonTestValuesArrayBuilder.add(formatChar(((StreamMessage)message).readChar()));
+            break;
+        case "double":
+            long l = 
Double.doubleToRawLongBits(((StreamMessage)message).readDouble());
+            jasonTestValuesArrayBuilder.add(String.format("0x%16s", 
Long.toHexString(l)).replace(' ', '0'));
+            break;
+        case "float":
+            int i0 = 
Float.floatToRawIntBits(((StreamMessage)message).readFloat());
+            jasonTestValuesArrayBuilder.add(String.format("0x%8s", 
Integer.toHexString(i0)).replace(' ', '0'));
+            break;
+        case "int":
+            
jasonTestValuesArrayBuilder.add(formatInt(((StreamMessage)message).readInt()));
+            break;
+        case "long":
+            
jasonTestValuesArrayBuilder.add(formatLong(((StreamMessage)message).readLong()));
+            break;
+        case "object":
+            Object obj = ((StreamMessage)message).readObject();
+            jasonTestValuesArrayBuilder.add(obj.getClass().getName() + ":" + 
obj.toString());
+            break;
+        case "short":
+            
jasonTestValuesArrayBuilder.add(formatShort(((StreamMessage)message).readShort()));
+            break;
+        case "string":
+            
jasonTestValuesArrayBuilder.add(((StreamMessage)message).readString());
+            break;
+        default:
+            throw new Exception("JmsReceiverShim: Unknown subtype for " + 
jmsMessageType + ": \"" + subType + "\"");
+        }        
+    }
+
+    protected void processJMSTextMessage(Message message, JsonArrayBuilder 
jasonTestValuesArrayBuilder) throws JMSException {
+        jasonTestValuesArrayBuilder.add(((TextMessage)message).getText());
+    }
+
+    protected static void writeJsonObject(JsonObjectBuilder builder, 
StringWriter out) {
+        JsonWriter jsonWriter = Json.createWriter(out);
+        jsonWriter.writeObject(builder.build());
+        jsonWriter.close();        
+    }
+
+    protected static String formatByte(byte b) {
+        boolean neg = false;
+        if (b < 0) {
+            neg = true;
+            b = (byte)-b;
+        }
+        return String.format("%s0x%x", neg?"-":"", b);
+    }
+    
+    protected static String formatChar(char c) {
+        if (Character.isLetterOrDigit(c)) {
+            return String.format("%c", c);
+        }
+        char[] ca = {c};
+        return new String(ca);
+    }
+    
+    protected static String formatInt(int i) {
+        boolean neg = false;
+        if (i < 0) {
+            neg = true;
+            i = -i;
+        }
+        return String.format("%s0x%x", neg?"-":"", i);
+    }
+    
+    protected static String formatLong(long l) {
+        boolean neg = false;
+        if (l < 0) {
+            neg = true;
+            l = -l;
+        }
+        return String.format("%s0x%x", neg?"-":"", l);
+    }
+    
+    protected static String formatShort(int s) {
+        boolean neg = false;
+        if (s < 0) {
+            neg = true;
+            s = -s;
+        }
+        return String.format("%s0x%x", neg?"-":"", s);
+    }
+        
+    protected static boolean isSupportedJmsMessageType(String jmsMessageType) {
+        for (String supportedJmsMessageType: SUPPORTED_JMS_MESSAGE_TYPES) {
+            if (jmsMessageType.equals(supportedJmsMessageType))
+                return true;
+        }
+    return false;
+    }
+
+    private static class MyExceptionListener implements ExceptionListener {
+        @Override
+        public void onException(JMSException exception) {
+            System.out.println("Connection ExceptionListener fired, exiting.");
+            exception.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
----------------------------------------------------------------------
diff --git 
a/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
new file mode 100644
index 0000000..41f5ee8
--- /dev/null
+++ 
b/shims/qpid-jms/src/main/java/org/apache/qpid/qpid_interop_test/jms_large_content_test/Sender.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.qpid.interop_test.jms_large_content_test;
+
+import java.io.Serializable;
+import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javax.jms.BytesMessage;
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.jms.DeliveryMode;
+import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
+import javax.jms.MapMessage;
+import javax.jms.Message;
+import javax.jms.MessageProducer;
+import javax.jms.ObjectMessage;
+import javax.jms.Queue;
+import javax.jms.Session;
+import javax.jms.StreamMessage;
+import javax.jms.TextMessage;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import org.apache.qpid.jms.JmsConnectionFactory;
+
+public class Sender {
+    private static final String USER = "guest";
+    private static final String PASSWORD = "guest";
+    private static final String[] SUPPORTED_JMS_MESSAGE_TYPES = 
{"JMS_MESSAGE_TYPE",
+                                                                 
"JMS_BYTESMESSAGE_TYPE",
+                                                                 
"JMS_MAPMESSAGE_TYPE",
+                                                                 
"JMS_OBJECTMESSAGE_TYPE",
+                                                                 
"JMS_STREAMMESSAGE_TYPE",
+                                                                 
"JMS_TEXTMESSAGE_TYPE"};
+    Connection _connection;
+    Session _session;
+    Queue _queue;
+    MessageProducer _messageProducer;
+    int _msgsSent;
+    
+
+    // args[0]: Broker URL
+    // args[1]: Queue name
+    // ...
+    public static void main(String[] args) throws Exception {
+        if (args.length != 2) {
+            System.out.println("JmsSenderShim: Incorrect number of arguments");
+            System.out.println("JmsSenderShim: Expected arguments: 
broker_address, queue_name, ...");
+            System.exit(1);
+        }
+        String brokerAddress = "amqp://" + args[0];
+        String queueName = args[1];
+
+        Sender shim = new Sender(brokerAddress, queueName);
+        shim.runTests();
+    }
+
+    public Sender(String brokerAddress, String queueName) {
+        try {
+            ConnectionFactory factory = (ConnectionFactory)new 
JmsConnectionFactory(brokerAddress);
+
+            _connection = factory.createConnection();
+            _connection.setExceptionListener(new MyExceptionListener());
+            _connection.start();
+
+            _session = _connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
+
+            _queue = _session.createQueue(queueName);
+
+            _messageProducer = _session.createProducer(_queue);
+            
+            _msgsSent = 0;
+        } catch (Exception exp) {
+            System.out.println("Caught exception, exiting.");
+            exp.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+
+    public void runTests() throws Exception {
+        _connection.close();
+    }
+    
+
+    private static class MyExceptionListener implements ExceptionListener {
+        @Override
+        public void onException(JMSException exception) {
+            System.out.println("Connection ExceptionListener fired, exiting.");
+            exception.printStackTrace(System.out);
+            System.exit(1);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-proton-cpp/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/CMakeLists.txt 
b/shims/qpid-proton-cpp/src/CMakeLists.txt
index f6b11a0..efd5549 100644
--- a/shims/qpid-proton-cpp/src/CMakeLists.txt
+++ b/shims/qpid-proton-cpp/src/CMakeLists.txt
@@ -24,129 +24,102 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
 link_directories(${PROTON_INSTALL_DIR}/lib64)
 #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 
-# --- Common files and libs ---
-
-set(Common_SOURCES
-    qpidit/QpidItErrors.hpp
-    qpidit/QpidItErrors.cpp
-)
 
-set(Common_Jms_SOURCES
-    qpidit/JmsTestBase.hpp
-    qpidit/JmsTestBase.cpp
-)
-
-set(Common_LIBS
-    qpid-proton-cpp
-    jsoncpp
-)
-
-
-# -----------------------
-# --- amqp_types_test ---
-# -----------------------
 
+function(addTest testName)
 # --- Sender ---
 
-set(amqp_types_test_Sender_SOURCES
+set(${testName}_Sender_SOURCES
     ${Common_SOURCES}
-    qpidit/amqp_types_test/Sender.hpp
-    qpidit/amqp_types_test/Sender.cpp
+    qpidit/${testName}/Sender.hpp
+    qpidit/${testName}/Sender.cpp
 )
 
-add_executable(amqp_types_test_Sender ${amqp_types_test_Sender_SOURCES})
-target_link_libraries(amqp_types_test_Sender ${Common_LIBS})
-set_target_properties(amqp_types_test_Sender PROPERTIES
-    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/amqp_types_test"
+add_executable(${testName}_Sender ${${testName}_Sender_SOURCES})
+target_link_libraries(${testName}_Sender ${Common_LIBS})
+set_target_properties(${testName}_Sender PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${testName}"
     OUTPUT_NAME Sender
 )
 
 # --- Receiver ---
 
-set(amqp_types_test_Receiver_SOURCES
+set(${testName}_Receiver_SOURCES
     ${Common_SOURCES}
-    qpidit/amqp_types_test/Receiver.hpp
-    qpidit/amqp_types_test/Receiver.cpp
+    qpidit/${testName}/Receiver.hpp
+    qpidit/${testName}/Receiver.cpp
 )
 
-add_executable(amqp_types_test_Receiver ${amqp_types_test_Receiver_SOURCES})
-target_link_libraries(amqp_types_test_Receiver ${Common_LIBS})
-set_target_properties(amqp_types_test_Receiver PROPERTIES
-    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/amqp_types_test"
+add_executable(${testName}_Receiver ${${testName}_Receiver_SOURCES})
+target_link_libraries(${testName}_Receiver ${Common_LIBS})
+set_target_properties(${testName}_Receiver PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${testName}"
     OUTPUT_NAME Receiver
 )
 
+endfunction(addTest)
 
-# ---------------------------
-# --- jms_hdrs_props_test ---
-# ---------------------------
 
+
+function(addJMSTest testName)
 # --- Sender ---
 
-set(jms_hdrs_props_test_Sender_SOURCES
+set(${testName}_Sender_SOURCES
     ${Common_SOURCES}
     ${Common_Jms_SOURCES}
-    qpidit/jms_hdrs_props_test/Sender.hpp
-    qpidit/jms_hdrs_props_test/Sender.cpp
+    qpidit/${testName}/Sender.hpp
+    qpidit/${testName}/Sender.cpp
 )
 
-add_executable(jms_hdrs_props_test_Sender 
${jms_hdrs_props_test_Sender_SOURCES})
-target_link_libraries(jms_hdrs_props_test_Sender ${Common_LIBS})
-set_target_properties(jms_hdrs_props_test_Sender PROPERTIES
-    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/jms_hdrs_props_test"
+add_executable(${testName}_Sender ${${testName}_Sender_SOURCES})
+target_link_libraries(${testName}_Sender ${Common_LIBS})
+set_target_properties(${testName}_Sender PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${testName}"
     OUTPUT_NAME Sender
 )
 
 # --- Receiver ---
 
-set(jms_hdrs_props_test_Receiver_SOURCES
+set(${testName}_Receiver_SOURCES
     ${Common_SOURCES}
     ${Common_Jms_SOURCES}
-    qpidit/jms_hdrs_props_test/Receiver.hpp
-    qpidit/jms_hdrs_props_test/Receiver.cpp
+    qpidit/${testName}/Receiver.hpp
+    qpidit/${testName}/Receiver.cpp
 )
 
-add_executable(jms_hdrs_props_test_Receiver 
${jms_hdrs_props_test_Receiver_SOURCES})
-target_link_libraries(jms_hdrs_props_test_Receiver ${Common_LIBS})
-set_target_properties(jms_hdrs_props_test_Receiver PROPERTIES
-    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/jms_hdrs_props_test"
+add_executable(${testName}_Receiver ${${testName}_Receiver_SOURCES})
+target_link_libraries(${testName}_Receiver ${Common_LIBS})
+set_target_properties(${testName}_Receiver PROPERTIES
+    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${testName}"
     OUTPUT_NAME Receiver
 )
 
+endfunction(addJMSTest)
 
-# -------------------------
-# --- jms_messages_test ---
-# -------------------------
 
-# --- Sender ---
+# --- Common files and libs ---
 
-set(jms_messages_test_Sender_SOURCES
-    ${Common_SOURCES}
-    ${Common_Jms_SOURCES}
-    qpidit/jms_messages_test/Sender.hpp
-    qpidit/jms_messages_test/Sender.cpp
+set(Common_SOURCES
+    qpidit/QpidItErrors.hpp
+    qpidit/QpidItErrors.cpp
 )
 
-add_executable(jms_messages_test_Sender ${jms_messages_test_Sender_SOURCES})
-target_link_libraries(jms_messages_test_Sender ${Common_LIBS})
-set_target_properties(jms_messages_test_Sender PROPERTIES
-    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/jms_messages_test"
-    OUTPUT_NAME Sender
+set(Common_Jms_SOURCES
+    qpidit/JmsTestBase.hpp
+    qpidit/JmsTestBase.cpp
 )
 
-# --- Receiver ---
-
-set(jms_messages_test_Receiver_SOURCES
-    ${Common_SOURCES}
-    ${Common_Jms_SOURCES}
-    qpidit/jms_messages_test/Receiver.hpp
-    qpidit/jms_messages_test/Receiver.cpp
+set(Common_LIBS
+    qpid-proton-cpp
+    jsoncpp
 )
 
-add_executable(jms_messages_test_Receiver 
${jms_messages_test_Receiver_SOURCES})
-target_link_libraries(jms_messages_test_Receiver ${Common_LIBS})
-set_target_properties(jms_messages_test_Receiver PROPERTIES
-    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/jms_messages_test"
-    OUTPUT_NAME Receiver
-)
 
+addTest(amqp_types_test)
+addTest(amqp_features_test)
+addTest(amqp_large_content_test)
+addTest(amqp_dtx_test)
+addJMSTest(jms_messages_test)
+addJMSTest(jms_hdrs_props_test)
+addJMSTest(jms_large_content_test)
+addJMSTest(jms_dtx_test)

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.cpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.cpp 
b/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.cpp
new file mode 100644
index 0000000..eb5dbed
--- /dev/null
+++ b/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.cpp
@@ -0,0 +1,43 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#include "qpidit/amqp_dtx_test/Receiver.hpp"
+
+#include <stdlib.h> // exit()
+
+namespace qpidit
+{
+    namespace amqp_dtx_test
+    {
+    } /* namespace amqp_dtx_test */
+} /* namespace qpidit */
+
+
+/*
+ * --- main ---
+ * Args: 1: Broker address (ip-addr:port)
+ *       2: Queue name
+ *       ...
+ */
+
+int main(int argc, char** argv) {
+    exit(0);
+}

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/138dc7d1/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.hpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.hpp 
b/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.hpp
new file mode 100644
index 0000000..d1bf8de
--- /dev/null
+++ b/shims/qpid-proton-cpp/src/qpidit/amqp_dtx_test/Receiver.hpp
@@ -0,0 +1,39 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#ifndef SRC_QPIDIT_AMQP_DTX_TEST_RECEIVER_HPP_
+#define SRC_QPIDIT_AMQP_DTX_TEST_RECEIVER_HPP_
+
+#include "proton/messaging_handler.hpp"
+
+namespace qpidit
+{
+    namespace amqp_dtx_test
+    {
+
+        class Receiver : public proton::messaging_handler
+        {
+        };
+
+    } /* namespace amqp_dtx_test */
+} /* namespace qpidit */
+
+#endif /* SRC_QPIDIT_AMQP_DTX_TEST_RECEIVER_HPP_ */


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to