summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2009-06-08 17:39:24 +0000
committerGordon Sim <gsim@apache.org>2009-06-08 17:39:24 +0000
commit3f6bd06a2515603d1b4f0133e529919b6d9a30e7 (patch)
tree03a1bd0d9bc79130cad3844e7de42dcb944fbc6a /cpp/src
parent0d9a9a82bc754e8ee12c5b7b4c8befd7b5b5c12b (diff)
downloadqpid-python-3f6bd06a2515603d1b4f0133e529919b6d9a30e7.tar.gz
If expiration is already set, don't alter it.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@782712 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/broker/Message.cpp7
-rw-r--r--cpp/src/tests/ClientSessionTest.cpp14
2 files changed, 19 insertions, 2 deletions
diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp
index 1e9eb9d386..3f4f63e48c 100644
--- a/cpp/src/qpid/broker/Message.cpp
+++ b/cpp/src/qpid/broker/Message.cpp
@@ -326,8 +326,11 @@ void Message::setTimestamp(const boost::intrusive_ptr<ExpiryPolicy>& e)
if (props->getTtl()) {
// AMQP requires setting the expiration property to be posix
// time_t in seconds. TTL is in milliseconds
- time_t now = ::time(0);
- props->setExpiration(now + (props->getTtl()/1000));
+ if (!props->getExpiration()) {
+ //only set expiration in delivery properties if not already set
+ time_t now = ::time(0);
+ props->setExpiration(now + (props->getTtl()/1000));
+ }
// Use higher resolution time for the internal expiry calculation.
expiration = AbsTime(AbsTime::now(), Duration(props->getTtl() * TIME_MSEC));
setExpiryPolicy(e);
diff --git a/cpp/src/tests/ClientSessionTest.cpp b/cpp/src/tests/ClientSessionTest.cpp
index c82cb77e95..7a6373ac17 100644
--- a/cpp/src/tests/ClientSessionTest.cpp
+++ b/cpp/src/tests/ClientSessionTest.cpp
@@ -590,6 +590,20 @@ QPID_AUTO_TEST_CASE(testSessionIsValid) {
BOOST_CHECK(!session.isValid());
}
+QPID_AUTO_TEST_CASE(testExpirationNotAltered) {
+ ClientSessionFixture fix;
+ fix.session.queueDeclare(arg::queue="my-queue", arg::exclusive=true, arg::autoDelete=true);
+
+ Message m("my-message", "my-queue");
+ m.getDeliveryProperties().setTtl(60000);
+ m.getDeliveryProperties().setExpiration(12345);
+ fix.session.messageTransfer(arg::content=m);
+ Message got;
+ BOOST_CHECK(fix.subs.get(got, "my-queue"));
+ BOOST_CHECK_EQUAL("my-message", got.getData());
+ BOOST_CHECK_EQUAL(12345u, got.getDeliveryProperties().getExpiration());
+}
+
QPID_AUTO_TEST_SUITE_END()