diff options
author | Aidan Skinner <aidan@apache.org> | 2008-04-18 19:28:48 +0000 |
---|---|---|
committer | Aidan Skinner <aidan@apache.org> | 2008-04-18 19:28:48 +0000 |
commit | 1342bb533040492cb85b638267023d9ad3a6d72e (patch) | |
tree | 5d48f4d170ccece1a6736ae3eb6875d83f2bc665 | |
parent | 802de181b8cb1c7f9c68a8f7ef7da26a5d94aeb4 (diff) | |
download | qpid-python-1342bb533040492cb85b638267023d9ad3a6d72e.tar.gz |
Merged revisions 649482-649660 via svnmerge from
https://svn.apache.org/repos/asf/incubator/qpid/trunk
........
r649547 | aconway | 2008-04-18 15:12:36 +0100 (Fri, 18 Apr 2008) | 2 lines
Uncommented tests.
........
r649554 | aconway | 2008-04-18 15:49:15 +0100 (Fri, 18 Apr 2008) | 4 lines
From Ted Ross: https://issues.apache.org/jira/browse/QPID-934
This patch fixes a problem related to multiple management sessions run over the same AMQP session (typically seen in test environments).
........
r649571 | aconway | 2008-04-18 16:26:05 +0100 (Fri, 18 Apr 2008) | 1 line
Fix build problem.
........
r649642 | kpvdr | 2008-04-18 19:18:22 +0100 (Fri, 18 Apr 2008) | 1 line
fix ambiguity problem found on gcc 3.4 compilers
........
r649648 | rhs | 2008-04-18 19:35:51 +0100 (Fri, 18 Apr 2008) | 1 line
QPID-901: update pom to work with new codegen
........
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/thegreatmerge@649661 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/src/qpid/framing/SequenceSet.h | 2 | ||||
-rw-r--r-- | qpid/cpp/src/tests/amqp_0_10/serialize.cpp | 567 | ||||
-rw-r--r-- | qpid/java/common/build.xml | 1 | ||||
-rwxr-xr-x | qpid/java/common/codegen | 3 | ||||
-rw-r--r-- | qpid/java/common/pom.xml | 10 | ||||
-rw-r--r-- | qpid/python/qpid/management.py | 9 |
6 files changed, 299 insertions, 293 deletions
diff --git a/qpid/cpp/src/qpid/framing/SequenceSet.h b/qpid/cpp/src/qpid/framing/SequenceSet.h index 226062f35d..eabc729411 100644 --- a/qpid/cpp/src/qpid/framing/SequenceSet.h +++ b/qpid/cpp/src/qpid/framing/SequenceSet.h @@ -51,7 +51,7 @@ class SequenceSet { public: SequenceSet() {} - SequenceSet(const SequenceNumber& s) { add(s); } + explicit SequenceSet(const SequenceNumber& s) { add(s); } void encode(Buffer& buffer) const; void decode(Buffer& buffer); diff --git a/qpid/cpp/src/tests/amqp_0_10/serialize.cpp b/qpid/cpp/src/tests/amqp_0_10/serialize.cpp index 901779d8a3..6dfa5c191d 100644 --- a/qpid/cpp/src/tests/amqp_0_10/serialize.cpp +++ b/qpid/cpp/src/tests/amqp_0_10/serialize.cpp @@ -81,296 +81,295 @@ typedef mpl::vector<Map, Vbin8, Str8Latin, Str8, Str8Utf16, Vbin16, Str16Latin, typedef concat4<IntegralTypes, BinTypes, FloatTypes, FixedSizeClassTypes>::type FixedSizeTypes; typedef concat2<FixedSizeTypes, VariableSizeTypes>::type AllTypes; -// FIXME aconway 2008-04-15: -// // TODO aconway 2008-02-20: should test 64 bit integrals for order also. -// QPID_AUTO_TEST_CASE(testNetworkByteOrder) { -// string data; - -// uint32_t l = 0x11223344; -// Codec::encode(std::back_inserter(data))(l); -// uint32_t enc=reinterpret_cast<const uint32_t&>(*data.data()); -// uint32_t l2 = ntohl(enc); -// BOOST_CHECK_EQUAL(l, l2); - -// data.clear(); -// uint16_t s = 0x1122; -// Codec::encode(std::back_inserter(data))(s); -// uint32_t s2 = ntohs(*reinterpret_cast<const uint32_t*>(data.data())); -// BOOST_CHECK_EQUAL(s, s2); -// } - -// QPID_AUTO_TEST_CASE(testSetLimit) { -// typedef Codec::Encoder<back_insert_iterator<string> > Encoder; -// string data; -// Encoder encode(back_inserter(data), 3); -// encode('1')('2')('3'); -// try { -// encode('4'); -// BOOST_FAIL("Expected exception"); -// } catch (...) {} // FIXME aconway 2008-04-03: catch proper exception -// BOOST_CHECK_EQUAL(data, "123"); -// } - -// QPID_AUTO_TEST_CASE(testScopedLimit) { -// typedef Codec::Encoder<back_insert_iterator<string> > Encoder; -// string data; -// Encoder encode(back_inserter(data), 10); -// encode(Str8("123")); // 4 bytes -// { -// Encoder::ScopedLimit l(encode, 3); -// encode('a')('b')('c'); -// try { -// encode('d'); -// BOOST_FAIL("Expected exception"); -// } catch(...) {} // FIXME aconway 2008-04-03: catch proper exception -// } -// BOOST_CHECK_EQUAL(data, "\003123abc"); -// encode('x')('y')('z'); -// try { -// encode('!'); -// BOOST_FAIL("Expected exception"); -// } catch(...) {} // FIXME aconway 2008-04-03: catch proper exception -// BOOST_CHECK_EQUAL(data.size(), 10u); -// } - -// // Assign test values to the various types. -// void testValue(bool& b) { b = true; } -// void testValue(Bit&) { } -// template <class T> typename boost::enable_if<boost::is_arithmetic<T> >::type testValue(T& n) { n=42; } -// void testValue(CharUtf32& c) { c = 43; } -// void testValue(long long& l) { l = 0x012345; } -// void testValue(Datetime& dt) { dt = qpid::sys::now(); } -// void testValue(Uuid& uuid) { uuid=Uuid(true); } -// template <class E, class M> void testValue(Decimal<E,M>& d) { d.exponent=2; d.mantissa=0x1122; } -// void testValue(SequenceNo& s) { s = 42; } -// template <size_t N> void testValue(Bin<N>& a) { a.assign(42); } -// template <class T, class S, int Unique> void testValue(SerializableString<T, S, Unique>& s) { -// char msg[]="foobar"; -// s.assign(msg, msg+sizeof(msg)); -// } -// void testValue(Str16& s) { s = "the quick brown fox jumped over the lazy dog"; } -// void testValue(Str8& s) { s = "foobar"; } -// void testValue(Map& m) { m["s"] = Str8("foobar"); m["b"] = true; m["c"] = uint16_t(42); } - -// //typedef mpl::vector<Str8, Str16>::type TestTypes; -// QPID_AUTO_TEST_CASE_TEMPLATE(testEncodeDecode, T, AllTypes) -// { -// string data; -// T t; -// testValue(t); -// Codec::encode(std::back_inserter(data))(t); - -// BOOST_CHECK_EQUAL(Codec::size(t), data.size()); - -// T t2; -// Codec::decode(data.begin())(t2); -// BOOST_CHECK_EQUAL(t,t2); -// } - -// struct TestMe { -// bool encoded, decoded; -// char value; -// TestMe(char v) : encoded(), decoded(), value(v) {} -// template <class S> void encode(S& s) const { -// const_cast<TestMe*>(this)->encoded=true; s(value); -// } -// template <class S> void decode(S& s) { decoded=true; s(value); } -// template <class S> void serialize(S& s) { s.split(*this); } -// }; - -// QPID_AUTO_TEST_CASE(testSplit) { -// string data; -// TestMe t1('x'); -// Codec::encode(std::back_inserter(data))(t1); -// BOOST_CHECK(t1.encoded); -// BOOST_CHECK(!t1.decoded); -// BOOST_CHECK_EQUAL(data, "x"); - -// TestMe t2('y'); -// Codec::decode(data.begin())(t2); -// BOOST_CHECK(!t2.encoded); -// BOOST_CHECK(t2.decoded); -// BOOST_CHECK_EQUAL(t2.value, 'x'); -// } - -// QPID_AUTO_TEST_CASE(testControlEncodeDecode) { -// string data; -// Control::Holder h(in_place<connection::Tune>(1,2,3,4)); -// Codec::encode(std::back_inserter(data))(h); +// TODO aconway 2008-02-20: should test 64 bit integrals for order also. +QPID_AUTO_TEST_CASE(testNetworkByteOrder) { + string data; + + uint32_t l = 0x11223344; + Codec::encode(std::back_inserter(data))(l); + uint32_t enc=reinterpret_cast<const uint32_t&>(*data.data()); + uint32_t l2 = ntohl(enc); + BOOST_CHECK_EQUAL(l, l2); + + data.clear(); + uint16_t s = 0x1122; + Codec::encode(std::back_inserter(data))(s); + uint32_t s2 = ntohs(*reinterpret_cast<const uint32_t*>(data.data())); + BOOST_CHECK_EQUAL(s, s2); +} + +QPID_AUTO_TEST_CASE(testSetLimit) { + typedef Codec::Encoder<back_insert_iterator<string> > Encoder; + string data; + Encoder encode(back_inserter(data), 3); + encode('1')('2')('3'); + try { + encode('4'); + BOOST_FAIL("Expected exception"); + } catch (...) {} // FIXME aconway 2008-04-03: catch proper exception + BOOST_CHECK_EQUAL(data, "123"); +} + +QPID_AUTO_TEST_CASE(testScopedLimit) { + typedef Codec::Encoder<back_insert_iterator<string> > Encoder; + string data; + Encoder encode(back_inserter(data), 10); + encode(Str8("123")); // 4 bytes + { + Encoder::ScopedLimit l(encode, 3); + encode('a')('b')('c'); + try { + encode('d'); + BOOST_FAIL("Expected exception"); + } catch(...) {} // FIXME aconway 2008-04-03: catch proper exception + } + BOOST_CHECK_EQUAL(data, "\003123abc"); + encode('x')('y')('z'); + try { + encode('!'); + BOOST_FAIL("Expected exception"); + } catch(...) {} // FIXME aconway 2008-04-03: catch proper exception + BOOST_CHECK_EQUAL(data.size(), 10u); +} + +// Assign test values to the various types. +void testValue(bool& b) { b = true; } +void testValue(Bit&) { } +template <class T> typename boost::enable_if<boost::is_arithmetic<T> >::type testValue(T& n) { n=42; } +void testValue(CharUtf32& c) { c = 43; } +void testValue(long long& l) { l = 0x012345; } +void testValue(Datetime& dt) { dt = qpid::sys::now(); } +void testValue(Uuid& uuid) { uuid=Uuid(true); } +template <class E, class M> void testValue(Decimal<E,M>& d) { d.exponent=2; d.mantissa=0x1122; } +void testValue(SequenceNo& s) { s = 42; } +template <size_t N> void testValue(Bin<N>& a) { a.assign(42); } +template <class T, class S, int Unique> void testValue(SerializableString<T, S, Unique>& s) { + char msg[]="foobar"; + s.assign(msg, msg+sizeof(msg)); +} +void testValue(Str16& s) { s = "the quick brown fox jumped over the lazy dog"; } +void testValue(Str8& s) { s = "foobar"; } +void testValue(Map& m) { m["s"] = Str8("foobar"); m["b"] = true; m["c"] = uint16_t(42); } + +//typedef mpl::vector<Str8, Str16>::type TestTypes; +BOOST_AUTO_TEST_CASE_TEMPLATE(testEncodeDecode, T, AllTypes) +{ + string data; + T t; + testValue(t); + Codec::encode(std::back_inserter(data))(t); + + BOOST_CHECK_EQUAL(Codec::size(t), data.size()); + + T t2; + Codec::decode(data.begin())(t2); + BOOST_CHECK_EQUAL(t,t2); +} + +struct TestMe { + bool encoded, decoded; + char value; + TestMe(char v) : encoded(), decoded(), value(v) {} + template <class S> void encode(S& s) const { + const_cast<TestMe*>(this)->encoded=true; s(value); + } + template <class S> void decode(S& s) { decoded=true; s(value); } + template <class S> void serialize(S& s) { s.split(*this); } +}; + +QPID_AUTO_TEST_CASE(testSplit) { + string data; + TestMe t1('x'); + Codec::encode(std::back_inserter(data))(t1); + BOOST_CHECK(t1.encoded); + BOOST_CHECK(!t1.decoded); + BOOST_CHECK_EQUAL(data, "x"); + + TestMe t2('y'); + Codec::decode(data.begin())(t2); + BOOST_CHECK(!t2.encoded); + BOOST_CHECK(t2.decoded); + BOOST_CHECK_EQUAL(t2.value, 'x'); +} + +QPID_AUTO_TEST_CASE(testControlEncodeDecode) { + string data; + Control::Holder h(in_place<connection::Tune>(1,2,3,4)); + Codec::encode(std::back_inserter(data))(h); -// BOOST_CHECK_EQUAL(data.size(), Codec::size(h)); - -// Codec::Decoder<string::iterator> decode(data.begin()); -// Control::Holder h2; -// decode(h2); - -// BOOST_REQUIRE(h2.get()); -// BOOST_CHECK_EQUAL(h2.get()->getClassCode(), connection::CODE); -// BOOST_CHECK_EQUAL(h2.get()->getCode(), uint8_t(connection::Tune::CODE)); -// connection::Tune& tune=static_cast<connection::Tune&>(*h2.get()); -// BOOST_CHECK_EQUAL(tune.channelMax, 1u); -// BOOST_CHECK_EQUAL(tune.maxFrameSize, 2u); -// BOOST_CHECK_EQUAL(tune.heartbeatMin, 3u); -// BOOST_CHECK_EQUAL(tune.heartbeatMax, 4u); -// } - -// QPID_AUTO_TEST_CASE(testStruct32) { -// message::DeliveryProperties dp; -// dp.priority=message::MEDIUM; -// dp.routingKey="foo"; -// Struct32 s(dp); -// string data; -// Codec::encode(back_inserter(data))(s); - -// uint32_t structSize; // Starts with size -// Codec::decode(data.begin())(structSize); -// BOOST_CHECK_EQUAL(structSize, Codec::size(dp) + 2); // +2 for code -// BOOST_CHECK_EQUAL(structSize, data.size()-4); // encoded body + BOOST_CHECK_EQUAL(data.size(), Codec::size(h)); + + Codec::Decoder<string::iterator> decode(data.begin()); + Control::Holder h2; + decode(h2); + + BOOST_REQUIRE(h2.get()); + BOOST_CHECK_EQUAL(h2.get()->getClassCode(), connection::CODE); + BOOST_CHECK_EQUAL(h2.get()->getCode(), uint8_t(connection::Tune::CODE)); + connection::Tune& tune=static_cast<connection::Tune&>(*h2.get()); + BOOST_CHECK_EQUAL(tune.channelMax, 1u); + BOOST_CHECK_EQUAL(tune.maxFrameSize, 2u); + BOOST_CHECK_EQUAL(tune.heartbeatMin, 3u); + BOOST_CHECK_EQUAL(tune.heartbeatMax, 4u); +} + +QPID_AUTO_TEST_CASE(testStruct32) { + message::DeliveryProperties dp; + dp.priority=message::MEDIUM; + dp.routingKey="foo"; + Struct32 s(dp); + string data; + Codec::encode(back_inserter(data))(s); + + uint32_t structSize; // Starts with size + Codec::decode(data.begin())(structSize); + BOOST_CHECK_EQUAL(structSize, Codec::size(dp) + 2); // +2 for code + BOOST_CHECK_EQUAL(structSize, data.size()-4); // encoded body -// BOOST_CHECK_EQUAL(data.size(), Codec::size(s)); -// Struct32 s2; -// Codec::decode(data.begin())(s2); -// message::DeliveryProperties* dp2 = s2.getIf<message::DeliveryProperties>(); -// BOOST_REQUIRE(dp2); -// BOOST_CHECK_EQUAL(dp2->priority, message::MEDIUM); -// BOOST_CHECK_EQUAL(dp2->routingKey, "foo"); -// } - -// QPID_AUTO_TEST_CASE(testStruct32Unknown) { -// // Verify we can recode an unknown struct unchanged. -// Struct32 s; -// string data; -// Codec::encode(back_inserter(data))(uint32_t(10)); -// data.append(10, 'X'); -// Codec::decode(data.begin())(s); -// string data2; -// Codec::encode(back_inserter(data2))(s); -// BOOST_CHECK_EQUAL(data.size(), data2.size()); -// BOOST_CHECK_EQUAL(data, data2); -// } - -// struct DummyPacked { -// static const uint8_t PACK=1; -// boost::optional<char> i, j; -// char k; -// Bit l,m; -// DummyPacked(char a=0, char b=0, char c=0) : i(a), j(b), k(c), l(), m() {} -// template <class S> void serialize(S& s) { s(i)(j)(k)(l)(m); } -// }; - -// Packer<DummyPacked> serializable(DummyPacked& d) { return Packer<DummyPacked>(d); } - -// QPID_AUTO_TEST_CASE(testPackBits) { -// DummyPacked d('a','b','c'); -// BOOST_CHECK_EQUAL(packBits(d), 7u); -// d.j = boost::none; -// BOOST_CHECK_EQUAL(packBits(d), 5u); -// d.m = true; -// BOOST_CHECK_EQUAL(packBits(d), 0x15u); -// } - - -// QPID_AUTO_TEST_CASE(testPacked) { -// string data; - -// Codec::encode(back_inserter(data))('a')(boost::optional<char>('b'))(boost::optional<char>())('c'); -// BOOST_CHECK_EQUAL(data, "abc"); -// data.clear(); + BOOST_CHECK_EQUAL(data.size(), Codec::size(s)); + Struct32 s2; + Codec::decode(data.begin())(s2); + message::DeliveryProperties* dp2 = s2.getIf<message::DeliveryProperties>(); + BOOST_REQUIRE(dp2); + BOOST_CHECK_EQUAL(dp2->priority, message::MEDIUM); + BOOST_CHECK_EQUAL(dp2->routingKey, "foo"); +} + +QPID_AUTO_TEST_CASE(testStruct32Unknown) { + // Verify we can recode an unknown struct unchanged. + Struct32 s; + string data; + Codec::encode(back_inserter(data))(uint32_t(10)); + data.append(10, 'X'); + Codec::decode(data.begin())(s); + string data2; + Codec::encode(back_inserter(data2))(s); + BOOST_CHECK_EQUAL(data.size(), data2.size()); + BOOST_CHECK_EQUAL(data, data2); +} + +struct DummyPacked { + static const uint8_t PACK=1; + boost::optional<char> i, j; + char k; + Bit l,m; + DummyPacked(char a=0, char b=0, char c=0) : i(a), j(b), k(c), l(), m() {} + template <class S> void serialize(S& s) { s(i)(j)(k)(l)(m); } +}; + +Packer<DummyPacked> serializable(DummyPacked& d) { return Packer<DummyPacked>(d); } + +QPID_AUTO_TEST_CASE(testPackBits) { + DummyPacked d('a','b','c'); + BOOST_CHECK_EQUAL(packBits(d), 7u); + d.j = boost::none; + BOOST_CHECK_EQUAL(packBits(d), 5u); + d.m = true; + BOOST_CHECK_EQUAL(packBits(d), 0x15u); +} + + +QPID_AUTO_TEST_CASE(testPacked) { + string data; + + Codec::encode(back_inserter(data))('a')(boost::optional<char>('b'))(boost::optional<char>())('c'); + BOOST_CHECK_EQUAL(data, "abc"); + data.clear(); -// DummyPacked dummy('a','b','c'); - -// Codec::encode(back_inserter(data))(dummy); -// BOOST_CHECK_EQUAL(data.size(), 4u); -// BOOST_CHECK_EQUAL(data, string("\007abc")); -// data.clear(); - -// dummy.i = boost::none; -// Codec::encode(back_inserter(data))(dummy); -// BOOST_CHECK_EQUAL(data, string("\6bc")); -// data.clear(); - -// const char* missing = "\5xy"; -// Codec::decode(missing)(dummy); -// BOOST_CHECK(dummy.i); -// BOOST_CHECK_EQUAL(*dummy.i, 'x'); -// BOOST_CHECK(!dummy.j); -// BOOST_CHECK_EQUAL(dummy.k, 'y'); -// } - -// QPID_AUTO_TEST_CASE(testUnitControl) { -// string data; -// Control::Holder h(in_place<connection::Tune>(1,2,3,4)); -// Codec::encode(std::back_inserter(data))(h); - -// Unit unit(FrameHeader(FIRST_FRAME|LAST_FRAME, CONTROL)); -// Codec::decode(data.begin())(unit); - -// BOOST_REQUIRE(unit.get<ControlHolder>()); - -// string data2; -// Codec::encode(back_inserter(data2))(unit); + DummyPacked dummy('a','b','c'); + + Codec::encode(back_inserter(data))(dummy); + BOOST_CHECK_EQUAL(data.size(), 4u); + BOOST_CHECK_EQUAL(data, string("\007abc")); + data.clear(); + + dummy.i = boost::none; + Codec::encode(back_inserter(data))(dummy); + BOOST_CHECK_EQUAL(data, string("\6bc")); + data.clear(); + + const char* missing = "\5xy"; + Codec::decode(missing)(dummy); + BOOST_CHECK(dummy.i); + BOOST_CHECK_EQUAL(*dummy.i, 'x'); + BOOST_CHECK(!dummy.j); + BOOST_CHECK_EQUAL(dummy.k, 'y'); +} + +QPID_AUTO_TEST_CASE(testUnitControl) { + string data; + Control::Holder h(in_place<connection::Tune>(1,2,3,4)); + Codec::encode(std::back_inserter(data))(h); + + Unit unit(FrameHeader(FIRST_FRAME|LAST_FRAME, CONTROL)); + Codec::decode(data.begin())(unit); + + BOOST_REQUIRE(unit.get<ControlHolder>()); + + string data2; + Codec::encode(back_inserter(data2))(unit); -// BOOST_CHECK_EQUAL(data, data2); -// } - -// QPID_AUTO_TEST_CASE(testArray) { -// ArrayDomain<char> a; -// a.resize(3, 'x'); -// string data; -// Codec::encode(back_inserter(data))(a); - -// ArrayDomain<char> b; -// Codec::decode(data.begin())(b); -// BOOST_CHECK_EQUAL(b.size(), 3u); -// string data3; -// Codec::encode(back_inserter(data3))(a); -// BOOST_CHECK_EQUAL(data, data3); + BOOST_CHECK_EQUAL(data, data2); +} + +QPID_AUTO_TEST_CASE(testArray) { + ArrayDomain<char> a; + a.resize(3, 'x'); + string data; + Codec::encode(back_inserter(data))(a); + + ArrayDomain<char> b; + Codec::decode(data.begin())(b); + BOOST_CHECK_EQUAL(b.size(), 3u); + string data3; + Codec::encode(back_inserter(data3))(a); + BOOST_CHECK_EQUAL(data, data3); -// Array x; -// Codec::decode(data.begin())(x); -// BOOST_CHECK_EQUAL(x.size(), 3u); -// BOOST_CHECK_EQUAL(x[0].size(), 1u); -// BOOST_CHECK_EQUAL(*x[0].begin(), 'x'); -// BOOST_CHECK_EQUAL(*x[2].begin(), 'x'); - -// string data2; -// Codec::encode(back_inserter(data2))(x); -// BOOST_CHECK_EQUAL(data,data2); -// } - -// QPID_AUTO_TEST_CASE(testStruct) { -// string data; - -// message::DeliveryProperties dp; -// BOOST_CHECK(!dp.discardUnroutable); -// dp.immediate = true; -// dp.redelivered = false; -// dp.priority = message::MEDIUM; -// dp.exchange = "foo"; - -// Codec::encode(back_inserter(data))(dp); -// uint16_t encodedBits=uint8_t(data[1]); // Little-endian -// encodedBits <<= 8; -// encodedBits += uint8_t(data[0]); -// BOOST_CHECK_EQUAL(encodedBits, packBits(dp)); + Array x; + Codec::decode(data.begin())(x); + BOOST_CHECK_EQUAL(x.size(), 3u); + BOOST_CHECK_EQUAL(x[0].size(), 1u); + BOOST_CHECK_EQUAL(*x[0].begin(), 'x'); + BOOST_CHECK_EQUAL(*x[2].begin(), 'x'); + + string data2; + Codec::encode(back_inserter(data2))(x); + BOOST_CHECK_EQUAL(data,data2); +} + +QPID_AUTO_TEST_CASE(testStruct) { + string data; + + message::DeliveryProperties dp; + BOOST_CHECK(!dp.discardUnroutable); + dp.immediate = true; + dp.redelivered = false; + dp.priority = message::MEDIUM; + dp.exchange = "foo"; + + Codec::encode(back_inserter(data))(dp); + uint16_t encodedBits=uint8_t(data[1]); // Little-endian + encodedBits <<= 8; + encodedBits += uint8_t(data[0]); + BOOST_CHECK_EQUAL(encodedBits, packBits(dp)); -// data.clear(); -// Struct32 h(dp); -// Codec::encode(back_inserter(data))(h); - -// Struct32 h2; -// Codec::decode(data.begin())(h2); -// BOOST_CHECK_EQUAL(h2.getClassCode(), Uint8(message::DeliveryProperties::CLASS_CODE)); -// BOOST_CHECK_EQUAL(h2.getCode(), Uint8(message::DeliveryProperties::CODE)); -// message::DeliveryProperties* dp2 = -// dynamic_cast<message::DeliveryProperties*>(h2.get()); -// BOOST_CHECK(dp2); -// BOOST_CHECK(!dp2->discardUnroutable); -// BOOST_CHECK(dp2->immediate); -// BOOST_CHECK(!dp2->redelivered); -// BOOST_CHECK_EQUAL(dp2->priority, message::MEDIUM); -// BOOST_CHECK_EQUAL(dp2->exchange, "foo"); -// } + data.clear(); + Struct32 h(dp); + Codec::encode(back_inserter(data))(h); + + Struct32 h2; + Codec::decode(data.begin())(h2); + BOOST_CHECK_EQUAL(h2.getClassCode(), Uint8(message::DeliveryProperties::CLASS_CODE)); + BOOST_CHECK_EQUAL(h2.getCode(), Uint8(message::DeliveryProperties::CODE)); + message::DeliveryProperties* dp2 = + dynamic_cast<message::DeliveryProperties*>(h2.get()); + BOOST_CHECK(dp2); + BOOST_CHECK(!dp2->discardUnroutable); + BOOST_CHECK(dp2->immediate); + BOOST_CHECK(!dp2->redelivered); + BOOST_CHECK_EQUAL(dp2->priority, message::MEDIUM); + BOOST_CHECK_EQUAL(dp2->exchange, "foo"); +} struct RecodeUnit { template <class T> diff --git a/qpid/java/common/build.xml b/qpid/java/common/build.xml index 1db4e1c59e..6172a680ec 100644 --- a/qpid/java/common/build.xml +++ b/qpid/java/common/build.xml @@ -45,6 +45,7 @@ <arg value="${basedir}/codegen"/> <arg value="${module.precompiled}"/> <arg value="${xml.spec.dir}/amqp.0-10-qpid-errata.xml"/> + <arg value="${basedir}"/> <classpath> <pathelement location="jython-2.2-rc2.jar"/> </classpath> diff --git a/qpid/java/common/codegen b/qpid/java/common/codegen index f5d1577774..ab1ab1c542 100755 --- a/qpid/java/common/codegen +++ b/qpid/java/common/codegen @@ -6,6 +6,7 @@ from genutil import * out_dir = sys.argv[1] spec_file = sys.argv[2] +tpl_dir = sys.argv[3] pkg_dir = os.path.join(out_dir, "org/apache/qpidity/transport") if not os.path.exists(pkg_dir): @@ -22,7 +23,7 @@ def excludes(nd): return True def execute(output, template, **kwargs): - f = open(template) + f = open(os.path.join(tpl_dir, template)) input = f.read() f.close() p = Parser(**kwargs) diff --git a/qpid/java/common/pom.xml b/qpid/java/common/pom.xml index e1eb07e606..714087d843 100644 --- a/qpid/java/common/pom.xml +++ b/qpid/java/common/pom.xml @@ -85,14 +85,14 @@ <params> <param>-Dpython.cachedir.skip=true</param> <param>-Dpython.path=${basedir}/jython-lib.jar/Lib${path.separator}${mllib.dir}</param> - <param>${basedir}/generate</param> + <param>${basedir}/codegen</param> <param>${generated.path}</param> - <param>org.apache.qpidity.transport</param> - <param>${specs.dir}/amqp.0-10-preview.xml</param> + <param>${specs.dir}/amqp.0-10-qpid-errata.xml</param> + <param>${basedir}</param> </params> <sources> - <source>${specs.dir}/amqp.0-10-preview.xml</source> - <source>${basedir}/generate</source> + <source>${specs.dir}/amqp.0-10-qpid-errata.xml</source> + <source>${basedir}/codegen</source> </sources> <timestamp>${generated.path}/generated.timestamp</timestamp> </configuration> diff --git a/qpid/python/qpid/management.py b/qpid/python/qpid/management.py index d32d458270..6b25d5ea08 100644 --- a/qpid/python/qpid/management.py +++ b/qpid/python/qpid/management.py @@ -176,6 +176,7 @@ class managementClient: mch = managementChannel (channel, self.topicCb, self.replyCb, cbContext) self.channels.append (mch) + self.incOutstanding (mch) codec = Codec (StringIO (), self.spec) self.setHeader (codec, ord ('B')) msg = Content (codec.stream.getvalue ()) @@ -213,6 +214,10 @@ class managementClient: def syncWaitForStable (self, channel): """ Synchronous (blocking) call to wait for schema stability on a channel """ self.cv.acquire () + if channel.reqsOutstanding == 0: + self.cv.release () + return + self.syncInFlight = True starttime = time () while channel.reqsOutstanding != 0: @@ -470,7 +475,6 @@ class managementClient: sendCodec = Codec (StringIO (), self.spec) seq = self.seqMgr.reserve ("outstanding") self.setHeader (sendCodec, ord ('P'), seq) - self.incOutstanding (ch) smsg = Content (sendCodec.stream.getvalue ()) smsg["content_type"] = "application/octet-stream" smsg["routing_key"] = "agent" @@ -508,7 +512,8 @@ class managementClient: if (cname, hash) not in self.packages[pname]: # Send a schema request sendCodec = Codec (StringIO (), self.spec) - self.setHeader (sendCodec, ord ('S')) + seq = self.seqMgr.reserve ("outstanding") + self.setHeader (sendCodec, ord ('S'), seq) self.incOutstanding (ch) sendCodec.encode_shortstr (pname) sendCodec.encode_shortstr (cname) |