From 293c124f6e49530a10e7b1c1bcb90e41ec05b420 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Wed, 6 Dec 2006 17:51:42 +0000 Subject: Allow non-durable messages to be lazy-loaded. Cleanup of lazy-loaded messages that are never enqueued. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@483165 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/tests/MessageBuilderTest.cpp | 72 ++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 31 deletions(-) (limited to 'qpid/cpp/tests/MessageBuilderTest.cpp') diff --git a/qpid/cpp/tests/MessageBuilderTest.cpp b/qpid/cpp/tests/MessageBuilderTest.cpp index 3f84142461..88e8318832 100644 --- a/qpid/cpp/tests/MessageBuilderTest.cpp +++ b/qpid/cpp/tests/MessageBuilderTest.cpp @@ -50,7 +50,7 @@ class MessageBuilderTest : public CppUnit::TestCase public: - void stage(Message::shared_ptr& msg) + void stage(Message* const msg) { if (msg->getPersistenceId() == 0) { header = new Buffer(msg->encodedHeaderSize()); @@ -71,6 +71,11 @@ class MessageBuilderTest : public CppUnit::TestCase } } + void destroy(Message* msg) + { + CPPUNIT_ASSERT(msg->getPersistenceId()); + } + Message::shared_ptr getRestoredMessage() { Message::shared_ptr msg(new Message()); @@ -164,37 +169,42 @@ class MessageBuilderTest : public CppUnit::TestCase } void testStaging(){ - DummyHandler handler; + //store must be the last thing to be destroyed or destructor + //of Message fails (it uses the store to call destroy if lazy + //loaded content is in use) TestMessageStore store(14); - MessageBuilder builder(&handler, &store, 5); - - string data1("abcdefg"); - string data2("hijklmn"); - - Message::shared_ptr message(new Message(0, "test", "my_routing_key", false, false)); - AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC)); - header->setContentSize(14); - BasicHeaderProperties* properties = dynamic_cast(header->getProperties()); - properties->setMessageId("MyMessage"); - properties->getHeaders().setString("abc", "xyz"); - - AMQContentBody::shared_ptr part1(new AMQContentBody(data1)); - AMQContentBody::shared_ptr part2(new AMQContentBody(data2)); - - builder.initialise(message); - builder.setHeader(header); - builder.addContent(part1); - builder.addContent(part2); - CPPUNIT_ASSERT(handler.msg); - CPPUNIT_ASSERT_EQUAL(message, handler.msg); - - Message::shared_ptr restored = store.getRestoredMessage(); - CPPUNIT_ASSERT_EQUAL(message->getExchange(), restored->getExchange()); - CPPUNIT_ASSERT_EQUAL(message->getRoutingKey(), restored->getRoutingKey()); - CPPUNIT_ASSERT_EQUAL(message->getHeaderProperties()->getMessageId(), restored->getHeaderProperties()->getMessageId()); - CPPUNIT_ASSERT_EQUAL(message->getHeaderProperties()->getHeaders().getString("abc"), - restored->getHeaderProperties()->getHeaders().getString("abc")); - CPPUNIT_ASSERT_EQUAL((u_int64_t) 14, restored->contentSize()); + { + DummyHandler handler; + MessageBuilder builder(&handler, &store, 5); + + string data1("abcdefg"); + string data2("hijklmn"); + + Message::shared_ptr message(new Message(0, "test", "my_routing_key", false, false)); + AMQHeaderBody::shared_ptr header(new AMQHeaderBody(BASIC)); + header->setContentSize(14); + BasicHeaderProperties* properties = dynamic_cast(header->getProperties()); + properties->setMessageId("MyMessage"); + properties->getHeaders().setString("abc", "xyz"); + + AMQContentBody::shared_ptr part1(new AMQContentBody(data1)); + AMQContentBody::shared_ptr part2(new AMQContentBody(data2)); + + builder.initialise(message); + builder.setHeader(header); + builder.addContent(part1); + builder.addContent(part2); + CPPUNIT_ASSERT(handler.msg); + CPPUNIT_ASSERT_EQUAL(message, handler.msg); + + Message::shared_ptr restored = store.getRestoredMessage(); + CPPUNIT_ASSERT_EQUAL(message->getExchange(), restored->getExchange()); + CPPUNIT_ASSERT_EQUAL(message->getRoutingKey(), restored->getRoutingKey()); + CPPUNIT_ASSERT_EQUAL(message->getHeaderProperties()->getMessageId(), restored->getHeaderProperties()->getMessageId()); + CPPUNIT_ASSERT_EQUAL(message->getHeaderProperties()->getHeaders().getString("abc"), + restored->getHeaderProperties()->getHeaders().getString("abc")); + CPPUNIT_ASSERT_EQUAL((u_int64_t) 14, restored->contentSize()); + } } }; -- cgit v1.2.1