diff options
| author | Alan Conway <aconway@apache.org> | 2008-04-10 20:15:08 +0000 |
|---|---|---|
| committer | Alan Conway <aconway@apache.org> | 2008-04-10 20:15:08 +0000 |
| commit | 407e277c2dffa27f832dc8f9ce7fc184c9508715 (patch) | |
| tree | 172b20f12a1a4e8bdee63f8c576bc4314a015e4d /qpid/cpp/src/tests | |
| parent | 382a45a2cec001d55b1a5cced13a9a8e8c274d35 (diff) | |
| download | qpid-python-407e277c2dffa27f832dc8f9ce7fc184c9508715.tar.gz | |
amqp_0_10: Encoding for packed structs.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@646943 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/tests')
| -rw-r--r-- | qpid/cpp/src/tests/amqp_0_10/serialize.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/qpid/cpp/src/tests/amqp_0_10/serialize.cpp b/qpid/cpp/src/tests/amqp_0_10/serialize.cpp index 2e1f2c40a8..8928a9fbc9 100644 --- a/qpid/cpp/src/tests/amqp_0_10/serialize.cpp +++ b/qpid/cpp/src/tests/amqp_0_10/serialize.cpp @@ -30,6 +30,7 @@ #include "qpid/amqp_0_10/Codec.h" #include "qpid/amqp_0_10/specification.h" #include "qpid/amqp_0_10/ControlHolder.h" +#include "qpid/amqp_0_10/StructHolder.h" #include "qpid/amqp_0_10/FrameHeader.h" #include "qpid/amqp_0_10/Map.h" #include "qpid/amqp_0_10/Unit.h" @@ -216,8 +217,9 @@ struct DummyPacked { static const uint8_t PACK=1; boost::optional<char> i, j; char k; - DummyPacked(char a=0, char b=0, char c=0) : i(a), j(b), k(c) {} - template <class S> void serialize(S& s) { s(i)(j)(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); } @@ -226,7 +228,9 @@ BOOST_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); + BOOST_CHECK_EQUAL(packBits(d), 5u); + d.m = true; + BOOST_CHECK_EQUAL(packBits(d), 0x15u); } @@ -298,6 +302,40 @@ BOOST_AUTO_TEST_CASE(testArray) { BOOST_CHECK_EQUAL(data,data2); } +BOOST_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(); + Struct::Holder h(dp); + Codec::encode(back_inserter(data))(h); + + Struct::Holder 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> void operator() (const T& t) { |
