You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kp...@apache.org on 2016/01/27 16:31:18 UTC

qpid-interop-test git commit: QPIDIT-22: Add ability to run on Jenkins continuous integration platform. Added ability to find qpid-proton and qpid-jms components from build locations. Some tidy-up.

Repository: qpid-interop-test
Updated Branches:
  refs/heads/master 5f7ac58b0 -> 2204fc595


QPIDIT-22: Add ability to run on Jenkins continuous integration platform.  Added ability to find qpid-proton and qpid-jms components from build locations.  Some tidy-up.


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/2204fc59
Tree: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/tree/2204fc59
Diff: http://git-wip-us.apache.org/repos/asf/qpid-interop-test/diff/2204fc59

Branch: refs/heads/master
Commit: 2204fc595217f7e1dcebe85d14cfb1ba5f3f66e8
Parents: 5f7ac58
Author: Kim van der Riet <kp...@apache.org>
Authored: Wed Jan 27 10:30:42 2016 -0500
Committer: Kim van der Riet <kp...@apache.org>
Committed: Wed Jan 27 10:30:42 2016 -0500

----------------------------------------------------------------------
 shims/qpid-jms/java-build.sh                    |  16 ++-
 shims/qpid-proton-cpp/CMakeLists.txt            |   6 +-
 shims/qpid-proton-cpp/src/CMakeLists.txt        |   6 +-
 .../qpid-proton-cpp/src/qpidit/QpidItErrors.cpp |  46 ++++----
 .../qpid-proton-cpp/src/qpidit/QpidItErrors.hpp |  21 ++--
 .../src/qpidit/shim/AmqpReceiver.cpp            |  23 +---
 .../src/qpidit/shim/AmqpReceiver.hpp            |   7 +-
 .../src/qpidit/shim/AmqpSender.cpp              |  40 +++++--
 .../src/qpidit/shim/AmqpSender.hpp              |  13 ++-
 .../src/qpidit/shim/JmsReceiver.cpp             |  26 +++--
 .../src/qpidit/shim/JmsReceiver.hpp             |   8 +-
 .../src/qpidit/shim/JmsSender.cpp               |  44 +++++---
 .../src/qpidit/shim/JmsSender.hpp               |  21 ++--
 .../qpid-proton-python/src/TypesReceiverShim.py |   4 +-
 .../qpid-interop-test/jms/jms_message_tests.py  | 113 ++++++++++++-------
 15 files changed, 243 insertions(+), 151 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-jms/java-build.sh
----------------------------------------------------------------------
diff --git a/shims/qpid-jms/java-build.sh b/shims/qpid-jms/java-build.sh
index 6afe72f..0ddc0ea 100755
--- a/shims/qpid-jms/java-build.sh
+++ b/shims/qpid-jms/java-build.sh
@@ -1,7 +1,21 @@
 #!/bin/bash
 
 # JARS
-JMS_API=${HOME}/.m2/repository/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar:${HOME}/.m2/repository/org/apache/qpid/qpid-jms-client/0.4.0-SNAPSHOT/qpid-jms-client-0.4.0-SNAPSHOT.jar
+MVN_LOCAL_REPOSITORY=${HOME}/.m2/repository
+QPID_JMS_CLIENT_LOCATION=${MVN_LOCAL_REPOSITORY}/org/apache/qpid/qpid-jms-client
+
+echo "Available qpid-jms client versions:"
+for d in ${QPID_JMS_CLIENT_LOCATION}/*; do
+    if [ -d ${d} ]; then
+		echo "  ${d##*/}"
+    fi
+done
+
+# TODO: get this from the above list, which needs sorting to find latest version by default
+JMS_VERSION=0.8.0-SNAPSHOT
+echo "Current qpid-jms client version: ${JMS_VERSION}"
+
+JMS_API=${MVN_LOCAL_REPOSITORY}/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.1.1/geronimo-jms_1.1_spec-1.1.1.jar:${QPID_JMS_CLIENT_LOCATION}/${JMS_VERSION}/qpid-jms-client-${JMS_VERSION}.jar
 JSON_API=../../jars/javax.json-api-1.0.jar
 CLASSPATH=${JMS_API}:${JSON_API}
 

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/CMakeLists.txt b/shims/qpid-proton-cpp/CMakeLists.txt
index d4d3cf3..e8c7e89 100644
--- a/shims/qpid-proton-cpp/CMakeLists.txt
+++ b/shims/qpid-proton-cpp/CMakeLists.txt
@@ -19,6 +19,10 @@
 
 project (qpid-interop-test-cpp-shims)
 
+cmake_minimum_required(VERSION 2.6)
+
+set(PROTON_DIR "$ENV{HOME}/qpid-proton" CACHE PATH "Proton directory")
+set(PROTON_BUILD_DIR_NAME "build" CACHE STRING "Proton build directory")
+
 add_subdirectory(src)
 
-cmake_minimum_required(VERSION 2.6)

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/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 cece52c..724176a 100644
--- a/shims/qpid-proton-cpp/src/CMakeLists.txt
+++ b/shims/qpid-proton-cpp/src/CMakeLists.txt
@@ -17,9 +17,13 @@
 # under the License.
 #
 
+message("PROTON_DIR=${PROTON_DIR} PROTON_BUILD_DIR_NAME=${PROTON_BUILD_DIR_NAME}")
+include_directories(${PROTON_DIR}/proton-c/include)
+include_directories(${PROTON_DIR}/proton-c/bindings/cpp/include)
 include_directories(/usr/include/jsoncpp)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+link_directories(${PROTON_DIR}/${PROTON_BUILD_DIR_NAME}/proton-c/bindings/cpp)
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 
 # --- Common files and libs ---
 

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.cpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.cpp b/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.cpp
index dadcbde..9287fdc 100644
--- a/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.cpp
+++ b/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.cpp
@@ -51,7 +51,7 @@ namespace qpidit
                     std::runtime_error(MSG(funcName << "() returned " << errorNum << " (" << strerror(errorNum) << ")"))
     {}
 
-    ErrnoError::~ErrnoError() {}
+    ErrnoError::~ErrnoError() throw() {}
 
     // --- IncorrectJmsMapKeyPrefixError ---
 
@@ -60,7 +60,7 @@ namespace qpidit
                                     << key.substr(0, key.size()-3) << "\""))
     {}
 
-    IncorrectJmsMapKeyPrefixError::~IncorrectJmsMapKeyPrefixError() {}
+    IncorrectJmsMapKeyPrefixError::~IncorrectJmsMapKeyPrefixError() throw() {}
 
     // --- IncorrectMessageBodyLengthError ---
 
@@ -69,7 +69,7 @@ namespace qpidit
                                     << "; found " << found))
     {}
 
-    IncorrectMessageBodyLengthError::~IncorrectMessageBodyLengthError() {}
+    IncorrectMessageBodyLengthError::~IncorrectMessageBodyLengthError() throw() {}
 
     // --- IncorrectMessageBodyTypeError ---
 
@@ -83,7 +83,7 @@ namespace qpidit
                                                     << "; found: " << found))
     {}
 
-    IncorrectMessageBodyTypeError::~IncorrectMessageBodyTypeError() {}
+    IncorrectMessageBodyTypeError::~IncorrectMessageBodyTypeError() throw() {}
 
 
     // --- IncorrectValueTypeError ---
@@ -93,29 +93,19 @@ namespace qpidit
                 std::runtime_error(MSG("Incorrect value type received: " << val.type()))
     {}
 
-    IncorrectValueTypeError::~IncorrectValueTypeError() {}
+    IncorrectValueTypeError::~IncorrectValueTypeError() throw() {}
 
 
     // --- InvalidJsonRootNodeError ---
 
-    //static
-    std::map<Json::ValueType, std::string> InvalidJsonRootNodeError::s_JsonValueTypeNames = {
-                    {Json::nullValue, "Json::nullValue"},
-                    {Json::intValue, "Json::intValue"},
-                    {Json::uintValue, "Json::uintValue"},
-                    {Json::realValue, "Json::realValue"},
-                    {Json::stringValue, "Json::stringValue"},
-                    {Json::booleanValue, "Json::booleanValue"},
-                    {Json::arrayValue, "Json::arrayValue"},
-                    {Json::objectValue, "Json::objectValue"},
-                    };
+    std::map<Json::ValueType, std::string> InvalidJsonRootNodeError::s_JsonValueTypeNames = initializeStaticMap();
 
     InvalidJsonRootNodeError::InvalidJsonRootNodeError(const Json::ValueType& expected, const Json::ValueType& actual) :
                 std::runtime_error(MSG("Invalid JSON root node: Expected type " << formatJsonValueType(expected)
                                 << ", received type " << formatJsonValueType(actual)))
     {}
 
-    InvalidJsonRootNodeError::~InvalidJsonRootNodeError() {}
+    InvalidJsonRootNodeError::~InvalidJsonRootNodeError() throw() {}
 
     // protected
 
@@ -126,6 +116,20 @@ namespace qpidit
         return oss.str();
     }
 
+    //static
+    std::map<Json::ValueType, std::string> InvalidJsonRootNodeError::initializeStaticMap() {
+        std::map<Json::ValueType, std::string> m;
+        m[Json::nullValue] = "Json::nullValue";
+        m[Json::intValue] = "Json::intValue";
+        m[Json::uintValue] = "Json::uintValue";
+        m[Json::realValue] = "Json::realValue";
+        m[Json::stringValue] = "Json::stringValue";
+        m[Json::booleanValue] = "Json::booleanValue";
+        m[Json::arrayValue] = "Json::arrayValue";
+        m[Json::objectValue] = "Json::objectValue";
+        return m;
+    }
+
     // --- InvalidTestValueError ---
 
     InvalidTestValueError::InvalidTestValueError(const std::string& type, const std::string& valueStr) :
@@ -148,14 +152,14 @@ namespace qpidit
 
     PcloseError::PcloseError(int errorNum) : ErrnoError("pclose", errorNum) {}
 
-    PcloseError::~PcloseError() {}
+    PcloseError::~PcloseError() throw() {}
 
 
     // --- PopenError ---
 
     PopenError::PopenError(int errorNum) : ErrnoError("popen", errorNum) {}
 
-    PopenError::~PopenError() {}
+    PopenError::~PopenError() throw() {}
 
 
     // --- UnknownAmqpTypeError ---
@@ -173,7 +177,7 @@ namespace qpidit
                     std::runtime_error(MSG("Unknown JMS sub-type \"" << jmsMessageSubType << "\""))
     {}
 
-    UnknownJmsMessageSubTypeError::~UnknownJmsMessageSubTypeError() {}
+    UnknownJmsMessageSubTypeError::~UnknownJmsMessageSubTypeError() throw() {}
 
 
     // --- UnknownJmsMessageTypeError ---
@@ -182,7 +186,7 @@ namespace qpidit
                     std::runtime_error(MSG("Unknown JMS message type \"" << jmsMessageType << "\""))
     {}
 
-    UnknownJmsMessageTypeError::~UnknownJmsMessageTypeError() {}
+    UnknownJmsMessageTypeError::~UnknownJmsMessageTypeError() throw() {}
 
 
     // --- UnsupportedAmqpTypeError ---

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.hpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.hpp b/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.hpp
index 23833a6..2beaecb 100644
--- a/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.hpp
+++ b/shims/qpid-proton-cpp/src/qpidit/QpidItErrors.hpp
@@ -61,21 +61,21 @@ namespace qpidit
     {
     public:
         ErrnoError(const std::string& funcName, int errorNum);
-        virtual ~ErrnoError();
+        virtual ~ErrnoError() throw();
     };
 
     class IncorrectJmsMapKeyPrefixError: public std::runtime_error
     {
     public:
         IncorrectJmsMapKeyPrefixError(const std::string& expected, const std::string& key);
-        virtual ~IncorrectJmsMapKeyPrefixError();
+        virtual ~IncorrectJmsMapKeyPrefixError() throw();
     };
 
     class IncorrectMessageBodyLengthError: public std::runtime_error
     {
     public:
         IncorrectMessageBodyLengthError(int expected, int found);
-        virtual ~IncorrectMessageBodyLengthError();
+        virtual ~IncorrectMessageBodyLengthError() throw();
     };
 
     class IncorrectMessageBodyTypeError: public std::runtime_error
@@ -83,14 +83,14 @@ namespace qpidit
     public:
         IncorrectMessageBodyTypeError(proton::type_id expected, proton::type_id found); // AMQP type errors
         IncorrectMessageBodyTypeError(const std::string& expected, const std::string& found); // JMS message type errors
-        virtual ~IncorrectMessageBodyTypeError();
+        virtual ~IncorrectMessageBodyTypeError() throw();
     };
 
     class IncorrectValueTypeError: public std::runtime_error
     {
     public:
         IncorrectValueTypeError(const proton::value& val);
-        virtual ~IncorrectValueTypeError();
+        virtual ~IncorrectValueTypeError() throw();
     };
 
     class InvalidJsonRootNodeError: public std::runtime_error
@@ -99,9 +99,10 @@ namespace qpidit
         static std::map<Json::ValueType, std::string> s_JsonValueTypeNames;
     public:
         InvalidJsonRootNodeError(const Json::ValueType& expected, const Json::ValueType& actual);
-        virtual ~InvalidJsonRootNodeError();
+        virtual ~InvalidJsonRootNodeError() throw();
     protected:
         static std::string formatJsonValueType(const Json::ValueType& valueType);
+        static std::map<Json::ValueType, std::string> initializeStaticMap();
     };
 
     class InvalidTestValueError: public std::runtime_error
@@ -122,14 +123,14 @@ namespace qpidit
     {
     public:
         PcloseError(int errorNum);
-        virtual ~PcloseError();
+        virtual ~PcloseError() throw();
     };
 
     class PopenError: public ErrnoError
     {
     public:
         PopenError(int errorNum);
-        virtual ~PopenError();
+        virtual ~PopenError() throw();
     };
 
     class UnknownAmqpTypeError: public std::runtime_error
@@ -143,14 +144,14 @@ namespace qpidit
     {
     public:
         explicit UnknownJmsMessageSubTypeError(const std::string& jmsMessageSubType);
-        virtual ~UnknownJmsMessageSubTypeError();
+        virtual ~UnknownJmsMessageSubTypeError() throw();
     };
 
     class UnknownJmsMessageTypeError: public std::runtime_error
     {
     public:
         explicit UnknownJmsMessageTypeError(const std::string& jmsMessageType);
-        virtual ~UnknownJmsMessageTypeError();
+        virtual ~UnknownJmsMessageTypeError() throw();
     };
 
     class UnsupportedAmqpTypeError: public std::runtime_error

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.cpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.cpp b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.cpp
index de02c77..972f139 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.cpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.cpp
@@ -24,6 +24,7 @@
 #include <iostream>
 #include <json/json.h>
 #include "proton/container.hpp"
+#include "proton/event.hpp"
 #include "qpidit/QpidItErrors.hpp"
 
 namespace qpidit
@@ -53,10 +54,10 @@ namespace qpidit
 
         void AmqpReceiver::on_message(proton::event &e) {
             proton::message& msg = e.message();
-            if (!msg.id().empty() && msg.id().get<uint64_t>() < _received) return; // ignore duplicate
+            if (msg.id().get<uint64_t>() < _received) return; // ignore duplicate
             if (_received < _expected) {
                 if (_amqpType.compare("null") == 0) {
-                    checkMessageType(msg, proton::NULL_);
+                    checkMessageType(msg, proton::NULL_TYPE);
                     _receivedValueList.append("None");
                 } else if (_amqpType.compare("boolean") == 0) {
                     checkMessageType(msg, proton::BOOLEAN);
@@ -163,15 +164,9 @@ namespace qpidit
         }
 
         //static
-        Json::Value& AmqpReceiver::getMap(Json::Value& jsonMap, const proton::data& dat) {
-            const proton::value v(dat);
-            return getMap(jsonMap, v);
-        }
-
-        //static
         Json::Value& AmqpReceiver::getMap(Json::Value& jsonMap, const proton::value& val) {
             std::map<proton::value, proton::value> msgMap;
-            val.decoder() >> proton::to_map(msgMap);
+            val.decode() >> proton::to_map(msgMap);
             for (std::map<proton::value, proton::value>::const_iterator i = msgMap.begin(); i != msgMap.end(); ++i) {
                 switch (i->second.type()) {
                 case proton::LIST:
@@ -199,15 +194,9 @@ namespace qpidit
         }
 
         //static
-        Json::Value& AmqpReceiver::getSequence(Json::Value& jsonList, const proton::data& dat) {
-            const proton::value v(dat);
-            return getSequence(jsonList, v);
-        }
-
-        //static
         Json::Value& AmqpReceiver::getSequence(Json::Value& jsonList, const proton::value& val) {
             std::vector<proton::value> msgList;
-            val.decoder() >> proton::to_sequence(msgList);
+            val.decode() >> proton::to_sequence(msgList);
             for (std::vector<proton::value>::const_iterator i=msgList.begin(); i!=msgList.end(); ++i) {
                 switch ((*i).type()) {
                 case proton::LIST:
@@ -266,7 +255,7 @@ int main(int argc, char** argv) {
     oss << argv[1] << "/" << argv[2];
 
     try {
-        qpidit::shim::AmqpReceiver receiver(oss.str(), argv[3], std::stoul(argv[4]));
+        qpidit::shim::AmqpReceiver receiver(oss.str(), argv[3], std::strtoul(argv[4], NULL, 0));
         proton::container(receiver).run();
 
         std::cout << argv[3] << std::endl;

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.hpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.hpp b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.hpp
index 0e5e5e8..8b011f0 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.hpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpReceiver.hpp
@@ -24,7 +24,8 @@
 
 #include <iomanip>
 #include <json/value.h>
-#include "proton/messaging_handler.hpp"
+#include "proton/handler.hpp"
+#include "proton/receiver.hpp"
 #include <sstream>
 
 namespace qpidit
@@ -32,7 +33,7 @@ namespace qpidit
     namespace shim
     {
 
-        class AmqpReceiver : public proton::messaging_handler
+        class AmqpReceiver : public proton::handler
         {
         protected:
             const std::string _brokerUrl;
@@ -49,9 +50,7 @@ namespace qpidit
             void on_message(proton::event &e);
         protected:
             static void checkMessageType(const proton::message& msg, proton::type_id msgType);
-            static Json::Value& getMap(Json::Value& jsonMap, const proton::data& datl);
             static Json::Value& getMap(Json::Value& jsonMap, const proton::value& val);
-            static Json::Value& getSequence(Json::Value& jsonList, const proton::data& dat);
             static Json::Value& getSequence(Json::Value& jsonList, const proton::value& val);
             static std::string stringToHexStr(const std::string& str);
 

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.cpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.cpp b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.cpp
index 1d07126..8b26726 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.cpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.cpp
@@ -25,6 +25,7 @@
 #include <iostream>
 #include <json/json.h>
 #include "proton/container.hpp"
+#include "proton/event.hpp"
 
 namespace qpidit
 {
@@ -59,17 +60,19 @@ namespace qpidit
                         _msgsSent++;
                     }
                 }
+            } else {
+                // do nothing
             }
         }
 
-        void AmqpSender::on_accepted(proton::event &e) {
+        void AmqpSender::on_delivery_accept(proton::event &e) {
             _msgsConfirmed++;
             if (_msgsConfirmed == _totalMsgs) {
                 e.connection().close();
             }
         }
 
-        void AmqpSender::on_disconnected(proton::event &e) {
+        void AmqpSender::on_disconnect(proton::event &e) {
             _msgsSent = _msgsConfirmed;
         }
 
@@ -112,20 +115,20 @@ namespace qpidit
                 setFloatValue<proton::amqp_double, uint64_t>(msg, testValue.asString());
             } else if (_amqpType.compare("decimal32") == 0) {
                 proton::amqp_decimal32 val;
-                val.value = std::stoul(testValue.asString(), nullptr, 16);
+                val.value = std::strtoul(testValue.asString().data(), NULL, 16);
                 msg.body(val);
             } else if (_amqpType.compare("decimal64") == 0) {
                 proton::amqp_decimal64 val;
-                val.value = std::stoul(testValue.asString(), nullptr, 16);
+                val.value = std::strtoul(testValue.asString().data(), NULL, 16);
                 msg.body(val);
             } else if (_amqpType.compare("decimal128") == 0) {
                 std::string testValueStr(testValue.asString());
                 if (testValueStr.size() != 34) { throw qpidit::InvalidTestValueError(_amqpType, testValueStr); }
 
                 const std::string s1 = testValueStr.substr(2, 16);
-                uint64_t p1 = std::stoul(s1, nullptr, 16);
+                uint64_t p1 = std::strtoul(s1.data(), NULL, 16);
                 const std::string s2 = testValueStr.substr(18, 16);
-                uint64_t p2 = std::stoul(s2, nullptr, 16);
+                uint64_t p2 = std::strtoul(s2.data(), NULL, 16);
 
                 proton::amqp_decimal128 val;
                 uint64ToChar16((char*)val.value.bytes, p1, p2);
@@ -136,14 +139,14 @@ namespace qpidit
                 if (charStr.size() == 1) { // Single char "a"
                     val = charStr[0];
                 } else if (charStr.size() >= 3 && charStr.size() <= 10) { // Format "0xN" through "0xNNNNNNNN"
-                    val = std::stoul(charStr, nullptr, 16);
+                    val = std::strtoul(charStr.data(), NULL, 16);
                 } else {
                     //TODO throw format error
                 }
                 msg.body(proton::amqp_char(val));
             } else if (_amqpType.compare("timestamp") == 0) {
                 proton::amqp_timestamp val;
-                val.milliseconds = std::stoul(testValue.asString(), nullptr, 16);
+                val.milliseconds = std::strtoul(testValue.asString().data(), NULL, 16);
                 msg.body(val);
             } else if (_amqpType.compare("uuid") == 0) {
                 std::string testValueStr(testValue.asString());
@@ -151,10 +154,10 @@ namespace qpidit
                 // Expected format: "00000000-0000-0000-0000-000000000000"
                 std::ostringstream oss1;
                 oss1 << testValueStr.substr(0, 8) << testValueStr.substr(9, 4) << testValueStr.substr(14, 4);
-                uint64_t p1 = std::stoul(oss1.str(), nullptr, 16);
+                uint64_t p1 = std::strtoul(oss1.str().data(), NULL, 16);
                 std::ostringstream oss2;
                 oss2 << testValueStr.substr(19, 4) << testValueStr.substr(24);
-                uint64_t p2 = std::stoul(oss2.str(), nullptr, 16);
+                uint64_t p2 = std::strtoul(oss2.str().data(), NULL, 16);
 
                 proton::amqp_uuid val;
                 uint64ToChar16((char*)val.value.bytes, p1, p2);
@@ -236,7 +239,22 @@ namespace qpidit
                     processMap(subMap, *i);
                     array.push_back(subMap);
                 } else {
-                    array.push_back(*i);
+                    proton::value v;
+                    if ((*i).isNull())
+                        v = proton::amqp_null();
+                    if ((*i).isBool())
+                        v = proton::amqp_boolean((*i).asBool());
+                    else if ((*i).isInt())
+                        v = proton::amqp_int((*i).asInt());
+                    else if ((*i).isUInt())
+                        v = proton::amqp_uint((*i).asUInt());
+                    else if ((*i).isDouble())
+                        v = proton::amqp_double((*i).asDouble());
+                    else if ((*i).isString())
+                        v = proton::amqp_string((*i).asString());
+                    else
+                        ; // TODO handle this case
+                    array.push_back(v);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.hpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.hpp b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.hpp
index 96ed391..79f5ba0 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.hpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/AmqpSender.hpp
@@ -23,7 +23,8 @@
 #define SRC_QPIDIT_SHIM_AMQPSENDER_HPP_
 
 #include <json/value.h>
-#include "proton/messaging_handler.hpp"
+#include "proton/handler.hpp"
+#include "proton/message.hpp"
 #include "qpidit/QpidItErrors.hpp"
 
 namespace qpidit
@@ -31,7 +32,7 @@ namespace qpidit
     namespace shim
     {
 
-        class AmqpSender : public proton::messaging_handler
+        class AmqpSender : public proton::handler
         {
         protected:
             const std::string _brokerUrl;
@@ -45,8 +46,8 @@ namespace qpidit
             virtual ~AmqpSender();
             void on_start(proton::event &e);
             void on_sendable(proton::event &e);
-            void on_accepted(proton::event &e);
-            void on_disconnected(proton::event &e);
+            void on_delivery_accept(proton::event &e);
+            void on_disconnect(proton::event &e);
         protected:
             proton::message& setMessage(proton::message& msg, const Json::Value& testValue);
 
@@ -64,14 +65,14 @@ namespace qpidit
             // Used to convert a hex string representation of a float or double to a float or double
             template<typename T, typename U> void setFloatValue(proton::message& msg, const std::string& testValueStr) {
                 try {
-                    U ival(std::stoul(testValueStr, nullptr, 16));
+                    U ival(std::strtoul(testValueStr.data(), NULL, 16));
                     msg.body(T(*reinterpret_cast<T*>(&ival)));
                 } catch (const std::exception& e) { throw qpidit::InvalidTestValueError(_amqpType, testValueStr); }
             }
 
             template<typename T> void setIntegralValue(proton::message& msg, const std::string& testValueStr, bool unsignedVal) {
                 try {
-                    T val(unsignedVal ? std::stoul(testValueStr, nullptr, 16) : std::stol(testValueStr, nullptr, 16));
+                    T val(unsignedVal ? std::strtoul(testValueStr.data(), NULL, 16) : std::strtol(testValueStr.data(), NULL, 16));
                     msg.body(val);
                 } catch (const std::exception& e) { throw qpidit::InvalidTestValueError(_amqpType, testValueStr); }
             }

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.cpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.cpp b/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.cpp
index 8cb86ba..ef899ec 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.cpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.cpp
@@ -25,6 +25,7 @@
 #include <json/json.h>
 #include <map>
 #include "proton/container.hpp"
+#include "proton/event.hpp"
 #include "qpidit/QpidItErrors.hpp"
 
 namespace qpidit
@@ -34,13 +35,7 @@ namespace qpidit
         typedef enum {JMS_MESSAGE_TYPE=0, JMS_OBJECTMESSAGE_TYPE, JMS_MAPMESSAGE_TYPE, JMS_BYTESMESSAGE_TYPE, JMS_STREAMMESSAGE_TYPE, JMS_TEXTMESSAGE_TYPE} jmsMessageType_t;
         //static
         proton::amqp_symbol JmsReceiver::s_jmsMessageTypeAnnotationKey("x-opt-jms-msg-type");
-        std::map<std::string, proton::amqp_byte>JmsReceiver::s_jmsMessageTypeAnnotationValues = {
-                        {"JMS_MESSAGE_TYPE", JMS_MESSAGE_TYPE},
-                        {"JMS_OBJECTMESSAGE_TYPE", JMS_OBJECTMESSAGE_TYPE},
-                        {"JMS_MAPMESSAGE_TYPE", JMS_MAPMESSAGE_TYPE},
-                        {"JMS_BYTESMESSAGE_TYPE", JMS_BYTESMESSAGE_TYPE},
-                        {"JMS_STREAMMESSAGE_TYPE", JMS_STREAMMESSAGE_TYPE},
-                        {"JMS_TEXTMESSAGE_TYPE", JMS_TEXTMESSAGE_TYPE}};
+        std::map<std::string, proton::amqp_byte>JmsReceiver::s_jmsMessageTypeAnnotationValues = initializeJmsMessageTypeAnnotationMap();
 
 
         JmsReceiver::JmsReceiver(const std::string& brokerUrl,
@@ -71,7 +66,7 @@ namespace qpidit
         void JmsReceiver::on_message(proton::event &e) {
             proton::message& msg = e.message();
             if (_received < _expected) {
-                switch (msg.annotation(proton::amqp_symbol("x-opt-jms-msg-type")).get<proton::amqp_byte>()) {
+                switch (msg.message_annotations()[proton::amqp_symbol("x-opt-jms-msg-type")].get<proton::amqp_byte>()) {
                 case JMS_MESSAGE_TYPE:
                     receiveJmsMessage(msg);
                     break;
@@ -188,7 +183,7 @@ namespace qpidit
             } else if (subType.compare("bytes") == 0) {
                 _receivedSubTypeList.append(Json::Value(body));
             } else if (subType.compare("char") == 0) {
-                if (body.size() != sizeof(char16_t)) throw IncorrectMessageBodyLengthError(sizeof(char16_t), body.size());
+                if (body.size() != sizeof(uint16_t)) throw IncorrectMessageBodyLengthError(sizeof(uint16_t), body.size());
                 // TODO: This is ugly: ignoring first byte - handle UTF-16 correctly
                 char c = body[1];
                 std::ostringstream oss;
@@ -268,6 +263,19 @@ namespace qpidit
             _receivedSubTypeList.append(Json::Value(msg.body().get<proton::amqp_string>()));
         }
 
+        //static
+        std::map<std::string, proton::amqp_byte> JmsReceiver::initializeJmsMessageTypeAnnotationMap() {
+            std::map<std::string, proton::amqp_byte> m;
+            m["JMS_MESSAGE_TYPE"] = JMS_MESSAGE_TYPE;
+            m["JMS_OBJECTMESSAGE_TYPE"] = JMS_OBJECTMESSAGE_TYPE;
+            m["JMS_MAPMESSAGE_TYPE"] = JMS_MAPMESSAGE_TYPE;
+            m["JMS_BYTESMESSAGE_TYPE"] = JMS_BYTESMESSAGE_TYPE;
+            m["JMS_STREAMMESSAGE_TYPE"] = JMS_STREAMMESSAGE_TYPE;
+            m["JMS_TEXTMESSAGE_TYPE"] = JMS_TEXTMESSAGE_TYPE;
+            return m;
+        }
+
+
     } /* namespace shim */
 } /* namespace qpidit */
 

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.hpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.hpp b/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.hpp
index b713882..df96fde 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.hpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/JmsReceiver.hpp
@@ -24,7 +24,9 @@
 
 #include <iomanip>
 #include <json/value.h>
-#include "proton/messaging_handler.hpp"
+#include "proton/handler.hpp"
+#include "proton/receiver.hpp"
+#include "proton/types.hpp"
 #include <sstream>
 
 namespace qpidit
@@ -32,7 +34,7 @@ namespace qpidit
     namespace shim
     {
 
-        class JmsReceiver : public proton::messaging_handler
+        class JmsReceiver : public proton::handler
         {
         protected:
             static proton::amqp_symbol s_jmsMessageTypeAnnotationKey;
@@ -65,6 +67,8 @@ namespace qpidit
             void receiveJmsStreamMessage(const proton::message& msg);
             void receiveJmsTextMessage(const proton::message& msg);
 
+            static std::map<std::string, proton::amqp_byte> initializeJmsMessageTypeAnnotationMap();
+
             // Format signed numbers in negative hex format if signedFlag is true, ie -0xNNNN, positive numbers in 0xNNNN format
             template<typename T> static std::string toHexStr(T val, bool fillFlag = false, bool signedFlag = true) {
                 std::ostringstream oss;

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.cpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.cpp b/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.cpp
index 5c57b25..5df15ac 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.cpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.cpp
@@ -21,9 +21,12 @@
 
 #include "qpidit/shim/JmsSender.hpp"
 
+#include <cerrno>
 #include <iostream>
+#include <iomanip>
 #include <json/json.h>
 #include "proton/container.hpp"
+#include "proton/event.hpp"
 #include "qpidit/QpidItErrors.hpp"
 #include <stdio.h>
 
@@ -31,15 +34,10 @@ namespace qpidit
 {
     namespace shim
     {
+        typedef enum {JMS_MESSAGE_TYPE=0, JMS_OBJECTMESSAGE_TYPE, JMS_MAPMESSAGE_TYPE, JMS_BYTESMESSAGE_TYPE, JMS_STREAMMESSAGE_TYPE, JMS_TEXTMESSAGE_TYPE} jmsMessageType_t;
         //static
         proton::amqp_symbol JmsSender::s_jmsMessageTypeAnnotationKey("x-opt-jms-msg-type");
-        std::map<std::string, proton::amqp_byte>JmsSender::s_jmsMessageTypeAnnotationValues = {
-                        {"JMS_MESSAGE_TYPE", 0},
-                        {"JMS_OBJECTMESSAGE_TYPE", 1},
-                        {"JMS_MAPMESSAGE_TYPE", 2},
-                        {"JMS_BYTESMESSAGE_TYPE", 3},
-                        {"JMS_STREAMMESSAGE_TYPE", 4},
-                        {"JMS_TEXTMESSAGE_TYPE", 5}};
+        std::map<std::string, proton::amqp_byte>JmsSender::s_jmsMessageTypeAnnotationValues = initializeJmsMessageTypeAnnotationMap();
 
         JmsSender::JmsSender(const std::string& brokerUrl,
                              const std::string& jmsMessageType,
@@ -74,14 +72,14 @@ namespace qpidit
             }
         }
 
-        void JmsSender::on_accepted(proton::event &e) {
+        void JmsSender::on_delivery_accept(proton::event &e) {
             _msgsConfirmed++;
             if (_msgsConfirmed == _totalMsgs) {
                 e.connection().close();
             }
         }
 
-        void JmsSender::on_disconnected(proton::event &e) {
+        void JmsSender::on_disconnect(proton::event &e) {
             _msgsSent = _msgsConfirmed;
         }
 
@@ -136,13 +134,13 @@ namespace qpidit
             } else if (subType.compare("double") == 0) {
                 uint64_t val;
                 try {
-                    val = htobe64(std::stoul(testValueStr, nullptr, 16));
+                    val = htobe64(std::strtoul(testValueStr.data(), NULL, 16));
                 } catch (const std::exception& e) { throw qpidit::InvalidTestValueError("double", testValueStr); }
                 bin.assign((char*)&val, sizeof(val));
             } else if (subType.compare("float") == 0) {
                 uint32_t val;
                 try {
-                    val = htobe32((uint32_t)std::stoul(testValueStr, nullptr, 16));
+                    val = htobe32((uint32_t)std::strtoul(testValueStr.data(), NULL, 16));
                 } catch (const std::exception& e) { throw qpidit::InvalidTestValueError("float", testValueStr); }
                 bin.assign((char*)&val, sizeof(val));
             } else if (subType.compare("long") == 0) {
@@ -166,7 +164,7 @@ namespace qpidit
             msg.body(bin);
             msg.inferred(true);
             msg.content_type(proton::amqp_symbol("application/octet-stream"));
-            msg.annotation(proton::amqp_symbol("x-opt-jms-msg-type"), s_jmsMessageTypeAnnotationValues["JMS_BYTESMESSAGE_TYPE"]);
+            msg.message_annotations()[proton::amqp_symbol("x-opt-jms-msg-type")] = s_jmsMessageTypeAnnotationValues["JMS_BYTESMESSAGE_TYPE"];
             return msg;
         }
 
@@ -208,7 +206,7 @@ namespace qpidit
             }
             msg.inferred(false);
             msg.body(m);
-            msg.annotation(proton::amqp_symbol("x-opt-jms-msg-type"), s_jmsMessageTypeAnnotationValues["JMS_MAPMESSAGE_TYPE"]);
+            msg.message_annotations()[proton::amqp_symbol("x-opt-jms-msg-type")] = s_jmsMessageTypeAnnotationValues["JMS_MAPMESSAGE_TYPE"];
             return msg;
         }
 
@@ -216,7 +214,7 @@ namespace qpidit
             msg.body(getJavaObjectBinary(subType, testValue.asString()));
             msg.inferred(true);
             msg.content_type(proton::amqp_symbol("application/x-java-serialized-object"));
-            msg.annotation(proton::amqp_symbol("x-opt-jms-msg-type"), s_jmsMessageTypeAnnotationValues["JMS_OBJECTMESSAGE_TYPE"]);
+            msg.message_annotations()[proton::amqp_symbol("x-opt-jms-msg-type")] = s_jmsMessageTypeAnnotationValues["JMS_OBJECTMESSAGE_TYPE"];
             return msg;
         }
 
@@ -255,14 +253,14 @@ namespace qpidit
             }
             msg.body(l);
             msg.inferred(true);
-            msg.annotation(proton::amqp_symbol("x-opt-jms-msg-type"), s_jmsMessageTypeAnnotationValues["JMS_STREAMMESSAGE_TYPE"]);
+            msg.message_annotations()[proton::amqp_symbol("x-opt-jms-msg-type")] = s_jmsMessageTypeAnnotationValues["JMS_STREAMMESSAGE_TYPE"];
             return msg;
        }
 
         proton::message& JmsSender::setTextMessage(proton::message& msg, const Json::Value& testValue) {
             msg.body(testValue.asString());
             msg.inferred(false);
-            msg.annotation(proton::amqp_symbol("x-opt-jms-msg-type"), s_jmsMessageTypeAnnotationValues["JMS_TEXTMESSAGE_TYPE"]);
+            msg.message_annotations()[proton::amqp_symbol("x-opt-jms-msg-type")] = s_jmsMessageTypeAnnotationValues["JMS_TEXTMESSAGE_TYPE"];
             return msg;
         }
 
@@ -272,7 +270,7 @@ namespace qpidit
             char buf[1024];
             int bytesRead;
             FILE* fp = ::popen("java -cp target/JavaObjUtils.jar org.apache.qpid.interop_test.obj_util.JavaObjToBytes javaClassStr", "rb");
-            if (fp == nullptr) { throw qpidit::PopenError(errno); }
+            if (fp == NULL) { throw qpidit::PopenError(errno); }
             do {
                 bytesRead = ::fread(buf, 1, sizeof(buf), fp);
                 javaObjectBinary.append(buf, bytesRead);
@@ -293,6 +291,18 @@ namespace qpidit
             return tot;
         }
 
+        //static
+        std::map<std::string, proton::amqp_byte> JmsSender::initializeJmsMessageTypeAnnotationMap() {
+            std::map<std::string, proton::amqp_byte> m;
+            m["JMS_MESSAGE_TYPE"] = JMS_MESSAGE_TYPE;
+            m["JMS_OBJECTMESSAGE_TYPE"] = JMS_OBJECTMESSAGE_TYPE;
+            m["JMS_MAPMESSAGE_TYPE"] = JMS_MAPMESSAGE_TYPE;
+            m["JMS_BYTESMESSAGE_TYPE"] = JMS_BYTESMESSAGE_TYPE;
+            m["JMS_STREAMMESSAGE_TYPE"] = JMS_STREAMMESSAGE_TYPE;
+            m["JMS_TEXTMESSAGE_TYPE"] = JMS_TEXTMESSAGE_TYPE;
+            return m;
+        }
+
     } /* namespace shim */
 } /* namespace qpidit */
 

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.hpp
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.hpp b/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.hpp
index a8e02e0..7ffca2c 100644
--- a/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.hpp
+++ b/shims/qpid-proton-cpp/src/qpidit/shim/JmsSender.hpp
@@ -23,17 +23,20 @@
 #define SRC_QPIDIT_SHIM_JMSSENDER_HPP_
 
 #include "json/value.h"
-#include "proton/messaging_handler.hpp"
+#include "proton/handler.hpp"
 #include "qpidit/QpidItErrors.hpp"
-#include <iostream> // DEBUG ONLY
-#include <iomanip> // DEBUG ONLY
+#include <typeinfo>
+
+namespace proton {
+    class message;
+}
 
 namespace qpidit
 {
     namespace shim
     {
 
-        class JmsSender : public proton::messaging_handler
+        class JmsSender : public proton::handler
         {
         protected:
             static proton::amqp_symbol s_jmsMessageTypeAnnotationKey;
@@ -50,8 +53,8 @@ namespace qpidit
             virtual ~JmsSender();
             void on_start(proton::event &e);
             void on_sendable(proton::event &e);
-            void on_accepted(proton::event &e);
-            void on_disconnected(proton::event &e);
+            void on_delivery_accept(proton::event &e);
+            void on_disconnect(proton::event &e);
         protected:
             void  sendMessages(proton::event &e, const std::string& subType, const Json::Value& testValueMap);
             proton::message& setBytesMessage(proton::message& msg, const std::string& subType, const std::string& testValueStr);
@@ -63,18 +66,20 @@ namespace qpidit
             static proton::amqp_binary getJavaObjectBinary(const std::string& javaClassName, const std::string& valAsString);
             static uint32_t getTotalNumMessages(const Json::Value& testValueMap);
 
+            static std::map<std::string, proton::amqp_byte> initializeJmsMessageTypeAnnotationMap();
+
             // Set message body to floating type T through integral type U
             // Used to convert a hex string representation of a float or double to a float or double
             template<typename T, typename U> T getFloatValue(const std::string& testValueStr) {
                 try {
-                    U ival(std::stoul(testValueStr, nullptr, 16));
+                    U ival(std::strtoul(testValueStr.data(), NULL, 16));
                     return T(*reinterpret_cast<T*>(&ival));
                 } catch (const std::exception& e) { throw qpidit::InvalidTestValueError(typeid(T).name(), testValueStr); }
             }
 
             template<typename T> T getIntegralValue(const std::string& testValueStr) {
                 try {
-                    return T(std::stol(testValueStr, nullptr, 16));
+                    return T(std::strtol(testValueStr.data(), NULL, 16));
                 } catch (const std::exception& e) { throw qpidit::InvalidTestValueError(typeid(T).name(), testValueStr); }
             }
         };

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/shims/qpid-proton-python/src/TypesReceiverShim.py
----------------------------------------------------------------------
diff --git a/shims/qpid-proton-python/src/TypesReceiverShim.py b/shims/qpid-proton-python/src/TypesReceiverShim.py
index 4196874..b88dcb8 100755
--- a/shims/qpid-proton-python/src/TypesReceiverShim.py
+++ b/shims/qpid-proton-python/src/TypesReceiverShim.py
@@ -54,12 +54,12 @@ class Receiver(MessagingHandler):
                 self.received_value_list.append(str(event.message.body))
             elif self.amqp_type == 'ubyte' or \
                self.amqp_type == 'ushort' or \
-               self.amqp_type == 'uint' or \
                self.amqp_type == 'byte' or \
                self.amqp_type == 'short' or \
                self.amqp_type == 'int':
                 self.received_value_list.append(hex(event.message.body))
-            elif self.amqp_type == 'ulong' or \
+            elif self.amqp_type == 'uint' or \
+               self.amqp_type == 'ulong' or \
                self.amqp_type == 'long' or \
                self.amqp_type == 'timestamp':
                 hex_str = hex(int(event.message.body))

http://git-wip-us.apache.org/repos/asf/qpid-interop-test/blob/2204fc59/src/py/qpid-interop-test/jms/jms_message_tests.py
----------------------------------------------------------------------
diff --git a/src/py/qpid-interop-test/jms/jms_message_tests.py b/src/py/qpid-interop-test/jms/jms_message_tests.py
index cc08b46..3c7726e 100755
--- a/src/py/qpid-interop-test/jms/jms_message_tests.py
+++ b/src/py/qpid-interop-test/jms/jms_message_tests.py
@@ -246,10 +246,14 @@ class Shim(object):
     Abstract shim class, parent of all shims.
     """
     NAME = None
-    SEND = None
-    RECEIVE = None
     USE_SHELL = False
 
+    def __init__(self, args):
+        self.ARGS = args
+        self.SEND = None
+        self.RECEIVE = None
+
+
     def send(self, broker_addr, queue_name, jms_message_type, json_test_values_str):
         """
         Send the values of type jms_message_type in json_test_values_str to queue queue_name.
@@ -302,8 +306,11 @@ class ProtonPythonShim(Shim):
     """
     NAME = 'ProtonPython'
     SHIM_LOC = path.join(QPID_INTEROP_TEST_HOME, 'shims', 'qpid-proton-python', 'src')
-    SEND = [path.join(SHIM_LOC, 'JmsSenderShim.py')]
-    RECEIVE = [path.join(SHIM_LOC, 'JmsReceiverShim.py')]
+
+    def __init__(self, args):
+        super(ProtonPythonShim, self).__init__(args)
+        self.SEND = [path.join(self.SHIM_LOC, 'JmsSenderShim.py')]
+        self.RECEIVE = [path.join(self.SHIM_LOC, 'JmsReceiverShim.py')]
 
 
 class ProtonCppShim(Shim):
@@ -312,8 +319,11 @@ class ProtonCppShim(Shim):
     """
     NAME = 'ProtonCpp'
     SHIM_LOC = path.join(QPID_INTEROP_TEST_HOME, 'shims', 'qpid-proton-cpp', 'build', 'src')
-    SEND = [path.join(SHIM_LOC, 'JmsSender')]
-    RECEIVE = [path.join(SHIM_LOC, 'JmsReceiver')]
+
+    def __init__(self, args):
+        super(ProtonCppShim, self).__init__(args)
+        self.SEND = [path.join(self.SHIM_LOC, 'JmsSender')]
+        self.RECEIVE = [path.join(self.SHIM_LOC, 'JmsReceiver')]
 
 
 class QpidJmsShim(Shim):
@@ -322,52 +332,54 @@ class QpidJmsShim(Shim):
     """
     NAME = 'QpidJms'
 
-    # Installed qpid versions
-    QPID_JMS_VER = '0.4.0-SNAPSHOT'
-    QPID_PROTON_J_VER = '0.10-SNAPSHOT'
-
     # Classpath components
     QPID_INTEROP_TEST_SHIM_JAR = path.join(QPID_INTEROP_TEST_HOME, 'shims', 'qpid-jms', 'target', 'qpid-jms-shim.jar')
     MAVEN_REPO_PATH = path.join(getenv('HOME'), '.m2', 'repository')
     JMS_API_JAR = path.join(MAVEN_REPO_PATH, 'org', 'apache', 'geronimo', 'specs', 'geronimo-jms_1.1_spec', '1.1.1',
                             'geronimo-jms_1.1_spec-1.1.1.jar')
-    JMS_IMPL_JAR = path.join(MAVEN_REPO_PATH, 'org', 'apache', 'qpid', 'qpid-jms-client', QPID_JMS_VER,
-                             'qpid-jms-client-' + QPID_JMS_VER + '.jar')
     JSON_API_JAR = path.join(QPID_INTEROP_TEST_HOME, 'jars', 'javax.json-api-1.0.jar')
     JSON_IMPL_JAR = path.join(QPID_INTEROP_TEST_HOME, 'jars', 'javax.json-1.0.4.jar')
     LOGGER_API_JAR = path.join(MAVEN_REPO_PATH, 'org', 'slf4j', 'slf4j-api', '1.5.6', 'slf4j-api-1.5.6.jar')
     LOGGER_IMPL_JAR = path.join(QPID_INTEROP_TEST_HOME, 'jars', 'slf4j-nop-1.5.6.jar')
-    PROTON_J_JAR = path.join(MAVEN_REPO_PATH, 'org', 'apache', 'qpid', 'proton-j', QPID_PROTON_J_VER,
-                             'proton-j-' + QPID_PROTON_J_VER + '.jar')
     NETTY_JAR = path.join(MAVEN_REPO_PATH, 'io', 'netty', 'netty-all', '4.0.17.Final', 'netty-all-4.0.17.Final.jar')
 
-    CLASSPATH = ':'.join([QPID_INTEROP_TEST_SHIM_JAR,
-                          JMS_API_JAR,
-                          JMS_IMPL_JAR,
-                          JSON_API_JAR,
-                          JSON_IMPL_JAR,
-                          LOGGER_API_JAR,
-                          LOGGER_IMPL_JAR,
-                          PROTON_J_JAR,
-                          NETTY_JAR])
     JAVA_HOME = getenv('JAVA_HOME', '/usr/bin') # Default only works in Linux
     JAVA_EXEC = path.join(JAVA_HOME, 'java')
-    SEND = [JAVA_EXEC, '-cp', CLASSPATH, 'org.apache.qpid.interop_test.shim.JmsSenderShim']
-    RECEIVE = [JAVA_EXEC, '-cp', CLASSPATH, 'org.apache.qpid.interop_test.shim.JmsReceiverShim']
 
-
-# SHIM_MAP contains an instance of each client language shim that is to be tested as a part of this test. For
-# every shim in this list, a test is dynamically constructed which tests it against itself as well as every
-# other shim in the list.
-#
-# As new shims are added, add them into this map to have them included in the test cases.
-#SHIM_MAP = {ProtonPythonShim.NAME: ProtonPythonShim()}
-#SHIM_MAP = {QpidJmsShim.NAME: QpidJmsShim()}
-#SHIM_MAP = {ProtonPythonShim.NAME: ProtonPythonShim(), QpidJmsShim.NAME: QpidJmsShim()}
-SHIM_MAP = {ProtonCppShim.NAME: ProtonCppShim(),
-            QpidJmsShim.NAME: QpidJmsShim(),
-            ProtonPythonShim.NAME: ProtonPythonShim()}
-#SHIM_MAP = {ProtonCppShim.NAME: ProtonCppShim()}
+    def __init__(self, args):
+        super(QpidJmsShim, self).__init__(args)
+        # Installed qpid versions
+        self.QPID_JMS_VER = self.ARGS.qpid_jms_ver
+        self.QPID_PROTON_J_VER = self.ARGS.qpid_proton_ver
+        self.JMS_IMPL_JAR = path.join(self.MAVEN_REPO_PATH, 'org', 'apache', 'qpid', 'qpid-jms-client',
+                                      self.QPID_JMS_VER, 'qpid-jms-client-' + self.QPID_JMS_VER + '.jar')
+        self.PROTON_J_JAR = path.join(self.MAVEN_REPO_PATH, 'org', 'apache', 'qpid', 'proton-j', self.QPID_PROTON_J_VER,
+                                      'proton-j-' + self.QPID_PROTON_J_VER + '.jar')
+        self.JAR_LIST = [self.QPID_INTEROP_TEST_SHIM_JAR,
+                         self.JMS_API_JAR,
+                         self.JMS_IMPL_JAR,
+                         self.JSON_API_JAR,
+                         self.JSON_IMPL_JAR,
+                         self.LOGGER_API_JAR,
+                         self.LOGGER_IMPL_JAR,
+                         self.PROTON_J_JAR,
+                         self.NETTY_JAR]
+        for jar in self.JAR_LIST:
+            if not self.jarExists(jar):
+                print '*** ERROR: Cannot find jar file "%s"' % jar
+        self.CLASSPATH = ':'.join(self.JAR_LIST)
+
+        self.SEND = [self.JAVA_EXEC, '-cp', self.CLASSPATH, 'org.apache.qpid.interop_test.shim.JmsSenderShim']
+        self.RECEIVE = [self.JAVA_EXEC, '-cp', self.CLASSPATH, 'org.apache.qpid.interop_test.shim.JmsReceiverShim']
+
+    def jarExists(self, jarPath):
+        try:
+            f = open(jarPath, 'rb')
+            f.close()
+            return True
+        except IOError as e:
+            pass
+        return False
 
 
 # TODO: Complete the test options to give fine control over running tests
@@ -375,7 +387,7 @@ class TestOptions(object):
     """
     Class controlling command-line arguments used to control the test.
     """
-    def __init__(self):
+    def __init__(self, shims):
         parser = argparse.ArgumentParser(description='Qpid-interop AMQP client interoparability test suite '
                                          'for JMS message types')
         parser.add_argument('--broker', action='store', default='localhost:5672', metavar='BROKER:PORT',
@@ -396,7 +408,11 @@ class TestOptions(object):
 #        shim_group.add_argument('--include-shim', action='append', metavar='SHIM-NAME',
 #                                help='Name of shim to include. Supported shims:\n%s' % SHIM_NAMES)
         parser.add_argument('--exclude-shim', action='append', metavar='SHIM-NAME',
-                            help='Name of shim to exclude. Supported shims:\n%s' % sorted(SHIM_MAP.keys()))
+                            help='Name of shim to exclude. Supported shims:\n%s' % sorted(shims))
+        parser.add_argument('--qpid-jms-ver', action='store', required=True,
+                            help='qpid-jms version in Maven repository to use for test')
+        parser.add_argument('--qpid-proton-ver', action='store',required=True,
+                            help='qpid-proton version in Maven repository to use for test')
         self.args = parser.parse_args()
 
 
@@ -404,9 +420,24 @@ class TestOptions(object):
 
 if __name__ == '__main__':
 
-    ARGS = TestOptions().args
+    SHIMS = [ProtonCppShim.NAME, QpidJmsShim.NAME, ProtonPythonShim.NAME]
+
+    ARGS = TestOptions(SHIMS).args
     #print 'ARGS:', ARGS # debug
 
+    # SHIM_MAP contains an instance of each client language shim that is to be tested as a part of this test. For
+    # every shim in this list, a test is dynamically constructed which tests it against itself as well as every
+    # other shim in the list.
+    #
+    # As new shims are added, add them into this map to have them included in the test cases.
+    #SHIM_MAP = {ProtonPythonShim.NAME: ProtonPythonShim()}
+    #SHIM_MAP = {QpidJmsShim.NAME: QpidJmsShim()}
+    #SHIM_MAP = {ProtonPythonShim.NAME: ProtonPythonShim(), QpidJmsShim.NAME: QpidJmsShim()}
+    SHIM_MAP = {ProtonCppShim.NAME: ProtonCppShim(ARGS),
+                QpidJmsShim.NAME: QpidJmsShim(ARGS),
+                ProtonPythonShim.NAME: ProtonPythonShim(ARGS)}
+    #SHIM_MAP = {ProtonCppShim.NAME: ProtonCppShim()}
+
     # Connect to broker to find broker type
     CONNECTION_PROPS = broker_properties.getBrokerProperties(ARGS.broker)
     print 'Test Broker: %s v.%s on %s' % (CONNECTION_PROPS[symbol(u'product')],


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