diff options
Diffstat (limited to 'qpid/cpp/src')
| -rw-r--r-- | qpid/cpp/src/qpid/client/amqp0_10/AddressResolution.cpp | 10 | ||||
| -rw-r--r-- | qpid/cpp/src/tests/MessagingSessionTests.cpp | 25 |
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 |
