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