diff options
Diffstat (limited to 'cpp/src/tests/amqp_0_10/serialize.cpp')
-rw-r--r-- | cpp/src/tests/amqp_0_10/serialize.cpp | 44 |
1 files changed, 41 insertions, 3 deletions
diff --git a/cpp/src/tests/amqp_0_10/serialize.cpp b/cpp/src/tests/amqp_0_10/serialize.cpp index 2e1f2c40a8..8928a9fbc9 100644 --- a/cpp/src/tests/amqp_0_10/serialize.cpp +++ b/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) { |