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 <[email protected]> Authored: Wed Jan 27 10:30:42 2016 -0500 Committer: Kim van der Riet <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
