summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2013-06-26 16:12:21 +0000
committerGordon Sim <gsim@apache.org>2013-06-26 16:12:21 +0000
commit408006d6d6543309b29d17eadb6df16fdd57fdf2 (patch)
treeb95b889e317e1eebab1e92e9dd8d10285bf527b1 /cpp/src
parent22115cc570ebdc27671adbdeb63db4adc47a3c8e (diff)
downloadqpid-python-408006d6d6543309b29d17eadb6df16fdd57fdf2.tar.gz
QPID-4953: recognise temp queue shorthand in 0-10 codepath
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1496985 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/client/amqp0_10/AddressResolution.cpp10
-rw-r--r--cpp/src/tests/MessagingSessionTests.cpp25
2 files changed, 32 insertions, 3 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp b/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
index ac3253c572..dac2a4a6d9 100644
--- a/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
+++ b/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
@@ -24,6 +24,7 @@
#include "qpid/client/amqp0_10/MessageSink.h"
#include "qpid/client/amqp0_10/OutgoingMessage.h"
#include "qpid/messaging/Address.h"
+#include "qpid/messaging/AddressImpl.h"
#include "qpid/messaging/Message.h"
#include "qpid/types/Variant.h"
#include "qpid/messaging/exceptions.h"
@@ -193,8 +194,8 @@ class Queue : protected Node
void checkDelete(qpid::client::AsyncSession&, CheckMode);
private:
const bool durable;
- const bool autoDelete;
- const bool exclusive;
+ bool autoDelete;
+ bool exclusive;
const std::string alternateExchange;
FieldTable arguments;
};
@@ -709,6 +710,11 @@ Queue::Queue(const Address& a) : Node(a),
(Opt(a)/NODE/X_DECLARE/ARGUMENTS).collect(arguments);
nodeBindings.setDefaultQueue(name);
linkBindings.setDefaultQueue(name);
+ if (qpid::messaging::AddressImpl::isTemporary(a) && createPolicy.isVoid()) {
+ createPolicy = "always";
+ autoDelete = true;
+ exclusive = true;
+ }
}
void Queue::checkCreate(qpid::client::AsyncSession& session, CheckMode mode)
diff --git a/cpp/src/tests/MessagingSessionTests.cpp b/cpp/src/tests/MessagingSessionTests.cpp
index 82c729cd72..b388f2c13a 100644
--- a/cpp/src/tests/MessagingSessionTests.cpp
+++ b/cpp/src/tests/MessagingSessionTests.cpp
@@ -521,7 +521,7 @@ struct DeletePolicyFixture : public MessagingFixture
void test(Mode mode)
{
- qpid::messaging::Address address("#; " + getPolicy(mode));
+ qpid::messaging::Address address("testqueue#; " + getPolicy(mode));
create(address);
Sender s = session.createSender(address);
@@ -1266,6 +1266,29 @@ QPID_AUTO_TEST_CASE(testConcurrentFetch)
BOOST_CHECK(fetcher.result);
}
+QPID_AUTO_TEST_CASE(testSimpleRequestResponse)
+{
+ QueueFixture fix;
+ //create receiver on temp queue for responses (using shorthand for temp queue)
+ Receiver r1 = fix.session.createReceiver("#");
+ //send request
+ Sender s1 = fix.session.createSender(fix.queue);
+ Message original("test-message");
+ original.setSubject("test-subject");
+ original.setReplyTo(r1.getAddress());
+ s1.send(original);
+
+ //receive request and send response
+ Receiver r2 = fix.session.createReceiver(fix.queue);
+ Message m = r2.fetch(Duration::SECOND * 5);
+ Sender s2 = fix.session.createSender(m.getReplyTo());
+ s2.send(m);
+ m = r1.fetch(Duration::SECOND * 5);
+ fix.session.acknowledge();
+ BOOST_CHECK_EQUAL(m.getContent(), original.getContent());
+ BOOST_CHECK_EQUAL(m.getSubject(), original.getSubject());
+}
+
QPID_AUTO_TEST_SUITE_END()
}} // namespace qpid::tests