diff options
author | Gordon Sim <gsim@apache.org> | 2016-03-10 22:53:42 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2016-03-10 22:53:42 +0000 |
commit | a13774c897218ba99d55a743ab77ba9179b93ff3 (patch) | |
tree | e5fe83237d16991d7d2f5531633f80ea55f12d6a | |
parent | b7bf0badc4a3417e4bea00885c8f676eaba04194 (diff) | |
download | qpid-python-a13774c897218ba99d55a743ab77ba9179b93ff3.tar.gz |
QPID-7134: ensure content object is reset when bytes are set
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1734476 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/src/qpid/messaging/Message.cpp | 14 | ||||
-rw-r--r-- | qpid/cpp/src/tests/MessagingSessionTests.cpp | 18 |
2 files changed, 28 insertions, 4 deletions
diff --git a/qpid/cpp/src/qpid/messaging/Message.cpp b/qpid/cpp/src/qpid/messaging/Message.cpp index 62ee93b6c2..299ed1b9f3 100644 --- a/qpid/cpp/src/qpid/messaging/Message.cpp +++ b/qpid/cpp/src/qpid/messaging/Message.cpp @@ -76,12 +76,18 @@ Variant::Map& Message::getProperties() { return impl->getHeaders(); } void Message::setProperties(const Variant::Map& p) { getProperties() = p; } void Message::setProperty(const std::string& k, const qpid::types::Variant& v) { impl->setHeader(k,v); } -void Message::setContent(const std::string& c) { impl->setBytes(c); } -void Message::setContent(const char* chars, size_t count) { impl->setBytes(chars, count); } +void Message::setContent(const std::string& c) { this->setContentBytes(c); } +void Message::setContent(const char* chars, size_t count) { + if (count == 0) impl->getContent().reset(); + impl->setBytes(chars, count); +} std::string Message::getContent() const { return impl->getBytes(); } -void Message::setContentBytes(const std::string& c) { impl->setBytes(c); } -std::string Message::getContentBytes() const { return impl->getBytes(); } +void Message::setContentBytes(const std::string& c) { + if (c.empty()) impl->getContent().reset(); + impl->setBytes(c); +} +std::string Message::getContentBytes() const {return impl->getBytes(); } qpid::types::Variant& Message::getContentObject() { return impl->getContent(); } void Message::setContentObject(const qpid::types::Variant& c) { impl->getContent() = c; } diff --git a/qpid/cpp/src/tests/MessagingSessionTests.cpp b/qpid/cpp/src/tests/MessagingSessionTests.cpp index d01dd69999..6af988e1cc 100644 --- a/qpid/cpp/src/tests/MessagingSessionTests.cpp +++ b/qpid/cpp/src/tests/MessagingSessionTests.cpp @@ -1490,6 +1490,24 @@ QPID_AUTO_TEST_CASE(testImmediateNextReceiverNoMessage) } } +QPID_AUTO_TEST_CASE(testResendEmpty) +{ + QueueFixture fix; + Sender sender = fix.session.createSender(fix.queue); + Message out("test-message"); + sender.send(out); + Receiver receiver = fix.session.createReceiver(fix.queue); + Message in = receiver.fetch(Duration::SECOND * 5); + fix.session.acknowledge(); + BOOST_CHECK_EQUAL(in.getContent(), out.getContent()); + //set content on received message to empty string and resend + in.setContent(""); + sender.send(in); + in = receiver.fetch(Duration::SECOND * 5); + fix.session.acknowledge(); + BOOST_CHECK_EQUAL(in.getContent(), std::string()); +} + QPID_AUTO_TEST_SUITE_END() }} // namespace qpid::tests |