diff options
author | Gordon Sim <gsim@apache.org> | 2008-11-14 16:40:22 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2008-11-14 16:40:22 +0000 |
commit | 072c135f13cd287224ccc9b754a6c2b83940b6cd (patch) | |
tree | 485163f392741b72485b8e7959ed66737fcd21b3 /cpp/src/tests/sender.cpp | |
parent | 23482177f452ebdf3023534988efe60d41e8c826 (diff) | |
download | qpid-python-072c135f13cd287224ccc9b754a6c2b83940b6cd.tar.gz |
Added some failover capable tests
Added grantCredit() method to subscription to allow simpler control of message delivery
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@714065 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/tests/sender.cpp')
-rw-r--r-- | cpp/src/tests/sender.cpp | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/cpp/src/tests/sender.cpp b/cpp/src/tests/sender.cpp new file mode 100644 index 0000000000..2da1990041 --- /dev/null +++ b/cpp/src/tests/sender.cpp @@ -0,0 +1,100 @@ +/* + * + * 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/client/FailoverManager.h> +#include <qpid/client/Session.h> +#include <qpid/client/AsyncSession.h> +#include <qpid/client/Message.h> +#include <qpid/client/MessageReplayTracker.h> +#include <qpid/Exception.h> +#include "TestOptions.h" + +#include <iostream> + +using namespace qpid; +using namespace qpid::client; +using namespace qpid::framing; + +using namespace std; + +struct Args : public qpid::TestOptions +{ + string destination; + string key; + bool sendEos; + + Args() : key("test-queue"), sendEos(false) + { + addOptions() + ("exchange", qpid::optValue(destination, "EXCHANGE"), "Exchange to send messages to") + ("routing-key", qpid::optValue(key, "KEY"), "Routing key to add to messages") + ("send-eos", qpid::optValue(sendEos), "Send EOS message to mark end of input"); + } +}; + +const string EOS("eos"); + +class Sender : public FailoverManager::Command +{ + public: + Sender(const std::string& destination, const std::string& key, bool sendEos); + void execute(AsyncSession& session, bool isRetry); + private: + MessageReplayTracker sender; + Message message; + const bool sendEos; + uint sent; +}; + +Sender::Sender(const std::string& destination, const std::string& key, bool eos) : + sender(10), message(destination, key), sendEos(eos), sent(0) {} + +void Sender::execute(AsyncSession& session, bool isRetry) +{ + if (isRetry) sender.replay(session); + else sender.init(session); + string data; + while (std::cin >> data) { + message.setData(data); + message.getHeaders().setInt("sn", ++sent); + sender.send(message); + } + if (sendEos) { + message.setData(EOS); + sender.send(message); + } +} + +int main(int argc, char ** argv) +{ + Args opts; + try { + opts.parse(argc, argv); + FailoverManager connection(opts.con); + Sender sender(opts.destination, opts.key, opts.sendEos); + connection.execute(sender); + connection.close(); + return 0; + } catch(const std::exception& error) { + std::cout << "Failed: " << error.what() << std::endl; + } + return 1; +} |