diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-05-27 13:24:44 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-05-27 17:34:56 (GMT) |
commit | 109e50103d757d880e7ce390482951111dad1e22 (patch) | |
tree | cbb9cdb9f63eda164727a24653c8ef8bdf283a46 /Swiften/QA/ReconnectTest | |
parent | 0bdb45be4aa66dcc478d5f061096b1adbaa3ab2c (diff) | |
download | swift-109e50103d757d880e7ce390482951111dad1e22.zip swift-109e50103d757d880e7ce390482951111dad1e22.tar.bz2 |
Cleaning up code paths for rapid disconnect/reconnect.
This includes a fix in OpensSSLContext that stops assert failures when
more data is received on a connection after a write has failed. It's
worth investigating why this happens, stopping it doing so, and re-instate
the assert.
Resolves: #402
Diffstat (limited to 'Swiften/QA/ReconnectTest')
-rw-r--r-- | Swiften/QA/ReconnectTest/ReconnectTest.cpp | 73 | ||||
-rw-r--r-- | Swiften/QA/ReconnectTest/SConscript | 24 |
2 files changed, 97 insertions, 0 deletions
diff --git a/Swiften/QA/ReconnectTest/ReconnectTest.cpp b/Swiften/QA/ReconnectTest/ReconnectTest.cpp new file mode 100644 index 0000000..f630dd8 --- /dev/null +++ b/Swiften/QA/ReconnectTest/ReconnectTest.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <boost/bind.hpp> +#include <boost/thread.hpp> + +#include "Swiften/Client/Client.h" +#include "Swiften/Network/BoostTimer.h" +#include "Swiften/EventLoop/MainEventLoop.h" +#include "Swiften/EventLoop/SimpleEventLoop.h" +#include "Swiften/Queries/Requests/GetRosterRequest.h" +#include "Swiften/Client/ClientXMLTracer.h" +#include "Swiften/Network/BoostIOServiceThread.h" +#include "Swiften/Network/MainBoostIOServiceThread.h" + +using namespace Swift; + +using namespace Swift; + +bool connecting_ = false; +Client* client_; +SimpleEventLoop eventLoop_; +int count = 0; + +void handleTick(boost::shared_ptr<BoostTimer> timer) { + std::cout << "Count " << count++ << std::endl; + if (timer) { + timer->stop(); + } + if (connecting_) { + client_->disconnect(); + } else { + if (count > 60) { + eventLoop_.stop(); + return; + } + client_->connect(); + } + connecting_ = !connecting_; + + int delay = 500; +// int delay = 0; + boost::shared_ptr<BoostTimer> newTimer(new BoostTimer(delay, &MainBoostIOServiceThread::getInstance().getIOService())); + newTimer->onTick.connect(boost::bind(&handleTick, timer)); + newTimer->start(); +} + +int main(int, char**) { + char* jidChars = getenv("SWIFT_CLIENTTEST_JID"); + if (!jidChars) { + std::cerr << "Please set the SWIFT_CLIENTTEST_JID environment variable" << std::endl; + return -1; + } + char* passChars = getenv("SWIFT_CLIENTTEST_PASS"); + if (!passChars) { + std::cerr << "Please set the SWIFT_CLIENTTEST_PASS environment variable" << std::endl; + return -1; + } + + JID jid(jidChars); + String pass(passChars); + + client_ = new Swift::Client(jid, pass); + handleTick(boost::shared_ptr<BoostTimer>()); + eventLoop_.run(); + + delete client_; + return 0; + +} diff --git a/Swiften/QA/ReconnectTest/SConscript b/Swiften/QA/ReconnectTest/SConscript new file mode 100644 index 0000000..8e6a0fc --- /dev/null +++ b/Swiften/QA/ReconnectTest/SConscript @@ -0,0 +1,24 @@ +import os + +Import("env") + +if env["TEST"] : + myenv = env.Clone() + myenv.MergeFlags(myenv["SWIFTEN_FLAGS"]) + myenv.MergeFlags(myenv["CPPUNIT_FLAGS"]) + myenv.MergeFlags(myenv["LIBIDN_FLAGS"]) + myenv.MergeFlags(myenv["BOOST_FLAGS"]) + myenv.MergeFlags(myenv.get("SQLITE_FLAGS", "")) + myenv.MergeFlags(myenv["ZLIB_FLAGS"]) + myenv.MergeFlags(myenv["OPENSSL_FLAGS"]) + myenv.MergeFlags(myenv.get("LIBXML_FLAGS", "")) + myenv.MergeFlags(myenv.get("EXPAT_FLAGS", "")) +# myenv.Append(LIBPATH = ["/opt/local/lib"]) +# myenv.Append(LIBS = ["efence"]) + + for i in ["SWIFT_CLIENTTEST_JID", "SWIFT_CLIENTTEST_PASS"]: + if os.environ.get(i, "") : + myenv["ENV"][i] = os.environ[i] + + tester = myenv.Program("ReconnectTest", ["ReconnectTest.cpp"]) + myenv.Test(tester, "system") |