summaryrefslogtreecommitdiff
path: root/qpid/cpp/tests/InProcessBroker.h
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/tests/InProcessBroker.h')
-rw-r--r--qpid/cpp/tests/InProcessBroker.h65
1 files changed, 27 insertions, 38 deletions
diff --git a/qpid/cpp/tests/InProcessBroker.h b/qpid/cpp/tests/InProcessBroker.h
index e2b426347b..56bce7d54a 100644
--- a/qpid/cpp/tests/InProcessBroker.h
+++ b/qpid/cpp/tests/InProcessBroker.h
@@ -18,10 +18,6 @@
* limitations under the License.
*
*/
-#include <vector>
-#include <iostream>
-#include <algorithm>
-
#include "AMQP_HighestVersion.h"
#include "framing/AMQFrame.h"
#include "broker/Broker.h"
@@ -29,21 +25,14 @@
#include "client/Connector.h"
#include "client/Connection.h"
+#include <vector>
+#include <iostream>
+#include <algorithm>
+
+
namespace qpid {
namespace broker {
-/** Make a copy of a frame body. Inefficient, only intended for tests. */
-// TODO aconway 2007-01-29: from should be const, need to fix
-// AMQPFrame::encode as const.
-framing::AMQFrame copy(framing::AMQFrame& from) {
- framing::Buffer buffer(from.size());
- from.encode(buffer);
- buffer.flip();
- framing::AMQFrame result;
- result.decode(buffer);
- return result;
-}
-
/**
* A broker that implements client::Connector allowing direct
* in-process connection of client to broker. Used to write round-trip
@@ -56,20 +45,22 @@ framing::AMQFrame copy(framing::AMQFrame& from) {
class InProcessBroker : public client::Connector {
public:
enum Sender {CLIENT,BROKER};
-
- struct Frame : public framing::AMQFrame {
- Frame(Sender e, const AMQFrame& f) : AMQFrame(f), from(e) {}
- bool fromBroker() const { return from == BROKER; }
- bool fromClient() const { return from == CLIENT; }
+
+ /** A frame tagged with the sender */
+ struct TaggedFrame {
+ TaggedFrame(Sender e, framing::AMQFrame* f) : frame(f), sender(e) {}
+ bool fromBroker() const { return sender == BROKER; }
+ bool fromClient() const { return sender == CLIENT; }
template <class MethodType>
MethodType* asMethod() {
- return dynamic_cast<MethodType*>(getBody().get());
+ return dynamic_cast<MethodType*>(frame->getBody().get());
}
-
- Sender from;
+ shared_ptr<framing::AMQFrame> frame;
+ Sender sender;
};
- typedef std::vector<Frame> Conversation;
+
+ typedef std::vector<TaggedFrame> Conversation;
InProcessBroker(framing::ProtocolVersion ver=
framing::highestProtocolVersion
@@ -105,18 +96,18 @@ class InProcessBroker : public client::Connector {
/** OutputHandler that forwards data to an InputHandler */
struct OutputToInputHandler : public sys::ConnectionOutputHandler {
OutputToInputHandler(
- Sender from_, Conversation& conversation_,
+ Sender sender_, Conversation& conversation_,
framing::InputHandler* ih=0
- ) : from(from_), conversation(conversation_), in(ih) {}
+ ) : sender(sender_), conversation(conversation_), in(ih) {}
void send(framing::AMQFrame* frame) {
- conversation.push_back(Frame(from, copy(*frame)));
+ conversation.push_back(TaggedFrame(sender, frame));
in->received(frame);
}
void close() {}
- Sender from;
+ Sender sender;
Conversation& conversation;
framing::InputHandler* in;
};
@@ -129,24 +120,22 @@ class InProcessBroker : public client::Connector {
};
std::ostream& operator<<(
- std::ostream& out, const InProcessBroker::Frame& frame)
+ std::ostream& out, const InProcessBroker::TaggedFrame& frame)
{
- return out << (frame.fromBroker()? "BROKER: ":"CLIENT: ") <<
- static_cast<const framing::AMQFrame&>(frame);
+ return out << (frame.fromBroker()? "BROKER: ":"CLIENT: ") << frame;
}
+
std::ostream& operator<<(
std::ostream& out, const InProcessBroker::Conversation& conv)
-{
- for (InProcessBroker::Conversation::const_iterator i = conv.begin();
- i != conv.end(); ++i)
- {
- out << *i << std::endl;
- }
+{
+ copy(conv.begin(), conv.end(),
+ std::ostream_iterator<InProcessBroker::TaggedFrame>(out, "\n"));
return out;
}
} // namespace broker
+
namespace client {
/** An in-process client+broker all in one. */
class InProcessBrokerClient : public client::Connection {