diff options
author | Alan Conway <aconway@apache.org> | 2007-01-22 15:20:54 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-01-22 15:20:54 +0000 |
commit | d6c1b1023ae636bff3e57992d00b01b0b7602aed (patch) | |
tree | 139d840241fb6412ea5c587ec6d5b56fd39b09ba /cpp | |
parent | 210aacb8d90319e0a643836fc55a6717f54ddb05 (diff) | |
download | qpid-python-d6c1b1023ae636bff3e57992d00b01b0b7602aed.tar.gz |
* AMQRequestBody.cpp: encode/decode bug - added missing reserved 4 byte word.
* BrokerSingleton: allow broker to run in-process.
* RequestResponseTest: skeleton test for request-response round-trip.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/qpid.0-9@498646 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/lib/broker/BrokerSingleton.cpp | 36 | ||||
-rw-r--r-- | cpp/lib/broker/BrokerSingleton.h | 52 | ||||
-rw-r--r-- | cpp/lib/broker/Makefile.am | 2 | ||||
-rw-r--r-- | cpp/lib/common/framing/AMQRequestBody.cpp | 2 | ||||
-rw-r--r-- | cpp/tests/Makefile.am | 7 | ||||
-rw-r--r-- | cpp/tests/RequestResponseTest.cpp | 57 |
6 files changed, 155 insertions, 1 deletions
diff --git a/cpp/lib/broker/BrokerSingleton.cpp b/cpp/lib/broker/BrokerSingleton.cpp new file mode 100644 index 0000000000..4571764850 --- /dev/null +++ b/cpp/lib/broker/BrokerSingleton.cpp @@ -0,0 +1,36 @@ +/* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed 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 "BrokerSingleton.h" + +namespace qpid { +namespace broker { + +BrokerSingleton::BrokerSingleton() { + if (broker.get() == 0) + broker = Broker::create(); + Broker::shared_ptr::operator=(broker); +} + +BrokerSingleton::~BrokerSingleton() { + broker->shutdown(); +} + +Broker::shared_ptr BrokerSingleton::broker; + +}} // namespace qpid::broker diff --git a/cpp/lib/broker/BrokerSingleton.h b/cpp/lib/broker/BrokerSingleton.h new file mode 100644 index 0000000000..139e02a5fd --- /dev/null +++ b/cpp/lib/broker/BrokerSingleton.h @@ -0,0 +1,52 @@ +#ifndef _broker_BrokerSingleton_h +#define _broker_BrokerSingleton_h + +/* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed 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 "Broker.h" + +namespace qpid { +namespace broker { + +/** + * BrokerSingleton is a smart pointer to a process-wide singleton broker + * started on an os-chosen port. The broker starts the first time + * an instance of BrokerSingleton is created and runs untill the process exits. + * + * Useful for unit tests that want to share a broker between multiple + * tests to reduce overhead of starting/stopping a broker for every test. + * + * Tests that need a new broker can call Broker::create directly. + * + * THREAD UNSAFE. + */ +class BrokerSingleton : public Broker::shared_ptr +{ + public: + BrokerSingleton(); + ~BrokerSingleton(); + private: + static Broker::shared_ptr broker; +}; + +}} // namespace qpid::broker + + + +#endif /*!_broker_BrokerSingleton_h*/ diff --git a/cpp/lib/broker/Makefile.am b/cpp/lib/broker/Makefile.am index 105abc8ad2..2366069128 100644 --- a/cpp/lib/broker/Makefile.am +++ b/cpp/lib/broker/Makefile.am @@ -16,6 +16,8 @@ libqpidbroker_la_SOURCES = \ Binding.h \ Broker.cpp \ Broker.h \ + BrokerSingleton.cpp \ + BrokerSingleton.h \ BrokerChannel.cpp \ BrokerChannel.h \ BrokerExchange.h \ diff --git a/cpp/lib/common/framing/AMQRequestBody.cpp b/cpp/lib/common/framing/AMQRequestBody.cpp index b18671c711..e711d4c0a1 100644 --- a/cpp/lib/common/framing/AMQRequestBody.cpp +++ b/cpp/lib/common/framing/AMQRequestBody.cpp @@ -25,11 +25,13 @@ namespace framing { void AMQRequestBody::Data::encode(Buffer& buffer) const { buffer.putLongLong(requestId); buffer.putLongLong(responseMark); + buffer.putLong(0); // Reserved long in spec. } void AMQRequestBody::Data::decode(Buffer& buffer) { requestId = buffer.getLongLong(); responseMark = buffer.getLongLong(); + buffer.getLong(); // Ignore reserved long. } void AMQRequestBody::encode(Buffer& buffer) const { diff --git a/cpp/tests/Makefile.am b/cpp/tests/Makefile.am index 8fb0350d2b..b1bbe70ae7 100644 --- a/cpp/tests/Makefile.am +++ b/cpp/tests/Makefile.am @@ -41,6 +41,10 @@ broker_tests = \ ValueTest \ MessageHandlerTest +# Tests that use the in-process BrokerSingleton to test client-broker +# interaction. Not strictly unit tests. +round_trip_tests = # TODO aconway 2007-01-22: RequestResponseTest + framing_tests = \ FieldTableTest \ FramingTest \ @@ -56,7 +60,8 @@ posix_tests = \ unit_tests = \ $(broker_tests) \ $(framing_tests) \ - $(misc_tests) + $(misc_tests) \ + $(round_trip_tests) noinst_PROGRAMS = $(client_exe_tests) diff --git a/cpp/tests/RequestResponseTest.cpp b/cpp/tests/RequestResponseTest.cpp new file mode 100644 index 0000000000..a6e4a4be19 --- /dev/null +++ b/cpp/tests/RequestResponseTest.cpp @@ -0,0 +1,57 @@ +/* + * + * 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 <qpid_test_plugin.h> +#include "BrokerSingleton.h" + +using namespace qpid::framing; +using namespace qpid::broker; + +/** + * Round trip test using in-process broker. + * Verify request/response IDs + */ +class RequestResponseTest : public CppUnit::TestCase +{ + CPPUNIT_TEST_SUITE(RequestResponseTest); + CPPUNIT_TEST(testAsRequester); + CPPUNIT_TEST(testAsResponder); + CPPUNIT_TEST_SUITE_END(); + + BrokerSingleton broker; + + public: + + void testAsRequester() { + CPPUNIT_FAIL("unfinished"); + } + void testAsResponder() { + CPPUNIT_FAIL("unfinished"); + } +}; + + +// Make this test suite a plugin. +CPPUNIT_PLUGIN_IMPLEMENT(); +CPPUNIT_TEST_SUITE_REGISTRATION(RequestResponseTest); + + + |