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