From fbd97f554b04a109c95c01fe6ad538c5f50161af Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Tue, 6 Feb 2007 15:01:45 +0000 Subject: * broker/Reference, tests/ReferenceTest: class representing a reference. * broker/BrokerChannel.cpp (complete): get destination exchange from Message, don't assume only one message in progress (could have multiple references open.) * broker/BrokerMessageMessage.cpp,.h: Contains transfer body and vector of append bodies. Construct from Reference. * broker/CompletionHandler.h: Extracted from BrokerMessage, used for MessageMessage also. * broker/ExchangeRegistry.cpp: Moved throw for missing exchanges to registry. * cpp/tests/start_broker: Increased wait time to 5 secs. * cpp/tests/*: renamed DummyChannel as MockChannel. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@504172 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/tests/ReferenceTest.cpp | 116 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 cpp/tests/ReferenceTest.cpp (limited to 'cpp/tests/ReferenceTest.cpp') diff --git a/cpp/tests/ReferenceTest.cpp b/cpp/tests/ReferenceTest.cpp new file mode 100644 index 0000000000..b50511f724 --- /dev/null +++ b/cpp/tests/ReferenceTest.cpp @@ -0,0 +1,116 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +#include +#include +#include "qpid_test_plugin.h" +#include "Reference.h" +#include "BrokerMessageMessage.h" +#include "MessageTransferBody.h" +#include "MessageAppendBody.h" +#include "CompletionHandler.h" + +using namespace boost; +using namespace qpid::broker; +using namespace qpid::framing; +using namespace std; + +class ReferenceTest : public CppUnit::TestCase +{ + CPPUNIT_TEST_SUITE(ReferenceTest); + CPPUNIT_TEST(testRegistry); + CPPUNIT_TEST(testReference); + CPPUNIT_TEST_SUITE_END(); + + + struct MockCompletionHandler : public CompletionHandler { + std::vector messages; + void complete(Message::shared_ptr msg) { messages.push_back(msg); } + }; + + MockCompletionHandler handler; + ProtocolVersion v; + ReferenceRegistry registry; + MessageTransferBody::shared_ptr t1, t2; + MessageAppendBody::shared_ptr a1, a2; + public: + + ReferenceTest() : + registry(handler), + t1(new MessageTransferBody(v)), + t2(new MessageTransferBody(v)), + a1(new MessageAppendBody(v)), + a2(new MessageAppendBody(v)) + {} + + void testRegistry() { + Reference& ref = registry.open("foo"); + CPPUNIT_ASSERT_EQUAL(string("foo"), ref.getId()); + CPPUNIT_ASSERT(&ref == ®istry.get("foo")); + try { + registry.get("none"); + CPPUNIT_FAIL("Expected exception"); + } catch (...) {} + try { + registry.open("foo"); + CPPUNIT_FAIL("Expected exception"); + } catch(...) {} + } + + MessageMessage& handlerMessage(size_t i) { + CPPUNIT_ASSERT(handler.messages.size() > i); + MessageMessage* msg = dynamic_cast( + handler.messages[i].get()); + CPPUNIT_ASSERT(msg); + return *msg; + } + + void testReference() { + Reference& ref = registry.open("foo"); + ref.transfer(t1); + ref.transfer(t2); + CPPUNIT_ASSERT_EQUAL(size_t(2), ref.getTransfers().size()); + ref.append(a1); + ref.append(a2); + CPPUNIT_ASSERT_EQUAL(size_t(2), ref.getAppends().size()); + ref.close(); + try { + registry.open("foo"); + CPPUNIT_FAIL("Expected exception"); + } catch(...) {} + + vector& messages = handler.messages; + CPPUNIT_ASSERT_EQUAL(size_t(2), messages.size()); + + CPPUNIT_ASSERT_EQUAL(handlerMessage(0).getTransfer(), t1); + CPPUNIT_ASSERT_EQUAL(handlerMessage(0).getAppends()[0], a1); + CPPUNIT_ASSERT_EQUAL(handlerMessage(0).getAppends()[1], a2); + + CPPUNIT_ASSERT_EQUAL(handlerMessage(1).getTransfer(), t2); + CPPUNIT_ASSERT_EQUAL(handlerMessage(1).getAppends()[0], a1); + CPPUNIT_ASSERT_EQUAL(handlerMessage(1).getAppends()[1], a2); + } + + +}; + +// Make this test suite a plugin. +CPPUNIT_PLUGIN_IMPLEMENT(); +CPPUNIT_TEST_SUITE_REGISTRATION(ReferenceTest); -- cgit v1.2.1