summaryrefslogtreecommitdiff
path: root/qpid/cpp
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
commit3a6acad9663e3b552ebed78645c77e855f9502ac (patch)
tree05220ba6a96d25da202546409d009d59ce0fd5a6 /qpid/cpp
parent8bdc5010fef590e5dc3c424b1f41f8df42c47c11 (diff)
downloadqpid-python-3a6acad9663e3b552ebed78645c77e855f9502ac.tar.gz
QPID-4953: recognise temp queue shorthand in 0-10 codepath
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1496985 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp10
-rw-r--r--qpid/cpp/src/tests/MessagingSessionTests.cpp25
2 files changed, 32 insertions, 3 deletions
diff --git a/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp b/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
index ac3253c572..dac2a4a6d9 100644
--- a/qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp
+++ b/qpid/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/qpid/cpp/src/tests/MessagingSessionTests.cpp b/qpid/cpp/src/tests/MessagingSessionTests.cpp
index 82c729cd72..b388f2c13a 100644
--- a/qpid/cpp/src/tests/MessagingSessionTests.cpp
+++ b/qpid/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