summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-05-27 13:24:44 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-05-27 17:34:56 (GMT)
commit109e50103d757d880e7ce390482951111dad1e22 (patch)
treecbb9cdb9f63eda164727a24653c8ef8bdf283a46 /Swiften/QA/ReconnectTest
parent0bdb45be4aa66dcc478d5f061096b1adbaa3ab2c (diff)
downloadswift-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.cpp73
-rw-r--r--Swiften/QA/ReconnectTest/SConscript24
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")