From 05dbf6ce3717eb549551a781fe041ea010618c13 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Mon, 21 Dec 2015 17:57:29 +0100 Subject: [PATCH] Test libpurple backend with prosody --- .travis.yml | 3 +- backends/libpurple/main.cpp | 8 ++- spectrum/src/tests/irc_test.cfg | 2 +- spectrum/src/tests/irc_test2.cfg | 2 +- spectrum/src/tests/jabber_test.cfg | 44 ++++++++++++ .../src/tests/localhost/accounts/client.dat | 3 + .../tests/localhost/accounts/responder.dat | 3 + spectrum/src/tests/manager.conf | 9 +++ spectrum/src/tests/start.py | 68 ++++++++++++++++--- src/User.cpp | 1 + 10 files changed, 127 insertions(+), 16 deletions(-) create mode 100644 spectrum/src/tests/jabber_test.cfg create mode 100644 spectrum/src/tests/localhost/accounts/client.dat create mode 100644 spectrum/src/tests/localhost/accounts/responder.dat create mode 100644 spectrum/src/tests/manager.conf diff --git a/.travis.yml b/.travis.yml index 2228c94e..627bd720 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,8 +9,9 @@ before_script: - curl -k https://swift.im/keys/packages.key | sudo apt-key add - - echo "deb http://swift.im/packages/ubuntu/trusty development main" | sudo tee -a /etc/apt/sources.list - echo "deb http://packages.spectrum.im/spectrum2/ trusty main" | sudo tee -a /etc/apt/sources.list + - echo " deb http://packages.prosody.im/debian trusty main" | sudo tee -a /etc/apt/sources.list - sudo apt-get update -qq - - sudo apt-get install -y --force-yes ngircd python-sleekxmpp libswiften-dev libprotobuf-dev protobuf-compiler pidgin-dev liblog4cxx10-dev libpopt-dev libboost-dev libboost-signals-dev libboost-system-dev libboost-thread-dev libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev libboost-date-time-dev libcppunit-dev libcommuni-dev + - sudo apt-get install -y --force-yes prosody ngircd python-sleekxmpp libswiften-dev libprotobuf-dev protobuf-compiler pidgin-dev liblog4cxx10-dev libpopt-dev libboost-dev libboost-signals-dev libboost-system-dev libboost-thread-dev libboost-filesystem-dev libboost-program-options-dev libboost-regex-dev libboost-date-time-dev libcppunit-dev libcommuni-dev install: "pip install --user sleekxmpp" script: - cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTS=ON . && make && ./src/libtransport_test && cd ./spectrum/src/tests && python -V && python start.py diff --git a/backends/libpurple/main.cpp b/backends/libpurple/main.cpp index f1c94128..a1db06d5 100644 --- a/backends/libpurple/main.cpp +++ b/backends/libpurple/main.cpp @@ -1124,10 +1124,14 @@ static void conv_write_im(PurpleConversation *conv, const char *who, const char if (purple_conversation_get_type_wrapped(conv) == PURPLE_CONV_TYPE_IM) { std::string w = purple_normalize_wrapped(account, who); + std::string n; size_t pos = w.find("/"); - if (pos != std::string::npos) + if (pos != std::string::npos) { + n = w.substr((int) pos + 1, w.length() - (int) pos); w.erase((int) pos, w.length() - (int) pos); - np->handleMessage(np->m_accounts[account], w, message_, "", xhtml_, timestamp); + } + LOG4CXX_INFO(logger, "Received message body='" << message_ << "' name='" << w); + np->handleMessage(np->m_accounts[account], w, message_, n, xhtml_, timestamp); } else { LOG4CXX_INFO(logger, "Received message body='" << message_ << "' name='" << purple_conversation_get_name_wrapped(conv) << "' " << who); diff --git a/spectrum/src/tests/irc_test.cfg b/spectrum/src/tests/irc_test.cfg index 10a34606..9fa7a14b 100644 --- a/spectrum/src/tests/irc_test.cfg +++ b/spectrum/src/tests/irc_test.cfg @@ -2,7 +2,7 @@ jid = localhost password = secret server = 127.0.0.1 -port = 5222 +port = 5223 server_mode = 1 backend_host=127.0.0.1 pidfile=./test.pid diff --git a/spectrum/src/tests/irc_test2.cfg b/spectrum/src/tests/irc_test2.cfg index ae48e354..2bb4e3f9 100644 --- a/spectrum/src/tests/irc_test2.cfg +++ b/spectrum/src/tests/irc_test2.cfg @@ -2,7 +2,7 @@ jid = localhost password = secret server = 127.0.0.1 -port = 5222 +port = 5223 server_mode = 1 backend_host=127.0.0.1 pidfile=./test.pid diff --git a/spectrum/src/tests/jabber_test.cfg b/spectrum/src/tests/jabber_test.cfg new file mode 100644 index 00000000..08f4ac38 --- /dev/null +++ b/spectrum/src/tests/jabber_test.cfg @@ -0,0 +1,44 @@ +[service] +jid = localhostxmpp +password = secret +server = 0.0.0.0 +port = 5223 +server_mode = 1 +backend_host=127.0.0.1 +pidfile=./test.pid +# < this option doesn't work yet +#backend_port=10001 +admin_jid=admin +admin_password=test +#cert=server.pfx #patch to PKCS#12 certificate +#cert_password=test #password to that certificate if any +users_per_backend=10 +#backend=../..//backends/swiften/spectrum2_swiften_backend +#backend=../../../backends/twitter/spectrum2_twitter_backend +backend=../../../backends/libpurple/spectrum2_libpurple_backend +protocol=prpl-jabber +#protocol=prpl-msn +#protocol=any +#protocol=prpl-icq +working_dir=./ +portfile=./$jid.port +irc_server=localhost + +[backend] +#default_avatar=catmelonhead.jpg +#no_vcard_fetch=true + +[logging] +#config=logging.cfg # log4cxx/log4j logging configuration file +#backend_config=/home/hanzz/code/libtransport/spectrum/src/backend-logging.cfg # log4cxx/log4j logging configuration file for backends + +[database] +type=sqlite3 # or "none" without database backend +database=users.sqlite +prefix=twitter +#type = mysql # or "none" without database backend....................................................................................................................... +#database = test +#prefix= +#user=root +#password=yourrootsqlpassword +#encryption_key=hanzzik diff --git a/spectrum/src/tests/localhost/accounts/client.dat b/spectrum/src/tests/localhost/accounts/client.dat new file mode 100644 index 00000000..07e54946 --- /dev/null +++ b/spectrum/src/tests/localhost/accounts/client.dat @@ -0,0 +1,3 @@ +return { + ["password"] = "password"; +}; diff --git a/spectrum/src/tests/localhost/accounts/responder.dat b/spectrum/src/tests/localhost/accounts/responder.dat new file mode 100644 index 00000000..07e54946 --- /dev/null +++ b/spectrum/src/tests/localhost/accounts/responder.dat @@ -0,0 +1,3 @@ +return { + ["password"] = "password"; +}; diff --git a/spectrum/src/tests/manager.conf b/spectrum/src/tests/manager.conf new file mode 100644 index 00000000..122b74b1 --- /dev/null +++ b/spectrum/src/tests/manager.conf @@ -0,0 +1,9 @@ +[service] +admin_username=admin +admin_password=test +config_directory=./ + +[servers] +server=localhostxmpp +#server=icq.spectrum.im +#server=msn.spectrum.im \ No newline at end of file diff --git a/spectrum/src/tests/start.py b/spectrum/src/tests/start.py index 3dba667e..2ab379c8 100644 --- a/spectrum/src/tests/start.py +++ b/spectrum/src/tests/start.py @@ -7,30 +7,49 @@ import os import sleekxmpp import imp +def registerXMPPAccount(user, password): + responder = sleekxmpp.ClientXMPP(user, password) + responder.register_plugin('xep_0030') # Service Discovery + responder.register_plugin('xep_0077') + responder['feature_mechanisms'].unencrypted_plain = True + + if responder.connect(("127.0.0.1", 5222)): + responder.process(block=False) + else: + print "connect() failed" + sys.exit(1) + class BaseTest: def __init__(self, config, server_mode, room): self.config = config self.server_mode = server_mode self.room = room + self.responder_jid = "responder@localhost" + self.client_jid = "client@localhost" + + def skip_test(self, test): + return False def start(self, Client, Responder): - self.pre_test() os.system("../spectrum2 -n ./" + self.config + " > spectrum2.log &") + self.pre_test() time.sleep(1) - responder = Responder("responder@localhost", "password", self.room, "responder") + responder = Responder(self.responder_jid, "password", self.room, "responder") responder.register_plugin('xep_0030') # Service Discovery responder.register_plugin('xep_0045') # Multi-User Chat responder.register_plugin('xep_0199') # XMPP Ping responder['feature_mechanisms'].unencrypted_plain = True - if responder.connect(): + if responder.connect(("127.0.0.1", 5223)): responder.process(block=False) else: print "connect() failed" + os.system("killall spectrum2") + self.post_test() sys.exit(1) - client = Client("client@localhost", "password", self.room, "client") + client = Client(self.client_jid, "password", self.room, "client") client.register_plugin('xep_0030') # Service Discovery client.register_plugin('xep_0045') # Multi-User Chat client.register_plugin('xep_0199') # XMPP Ping @@ -38,10 +57,12 @@ class BaseTest: time.sleep(2) - if client.connect(): + if client.connect(("127.0.0.1", 5223)): client.process(block=False) else: print "connect() failed" + os.system("killall spectrum2") + self.post_test() sys.exit(1) max_time = 60 @@ -92,9 +113,31 @@ class LibcommuniServerModeConf(BaseTest): os.system("killall ngircd 2>/dev/null") os.system("killall spectrum2_libcommuni_backend 2>/dev/null") +class JabberServerModeConf(BaseTest): + def __init__(self): + BaseTest.__init__(self, "jabber_test.cfg", True, "room%conference.localhost@localhostxmpp") + self.client_jid = "client%localhost@localhostxmpp" + self.responder_jid = "responder%localhost@localhostxmpp" + + def skip_test(self, test): + if test in ["muc_whois.py", "muc_change_topic.py"]: + return True + return False + + def pre_test(self): + os.system("prosody --config prosody.cfg.lua >prosody.log &") + time.sleep(3) + os.system("../../../spectrum_manager/src/spectrum2_manager -c manager.conf localhostxmpp register client%localhost@localhostxmpp client@localhost password 2>/dev/null >/dev/null") + os.system("../../../spectrum_manager/src/spectrum2_manager -c manager.conf localhostxmpp register responder%localhost@localhostxmpp responder@localhost password 2>/dev/null >/dev/null") + + def post_test(self): + os.system("killall lua-5.1 2>/dev/null") + os.system("killall spectrum2_libpurple_backend 2>/dev/null") + configurations = [] -configurations.append(LibcommuniServerModeSingleServerConf()) -configurations.append(LibcommuniServerModeConf()) +#configurations.append(LibcommuniServerModeSingleServerConf()) +#configurations.append(LibcommuniServerModeConf()) +configurations.append(JabberServerModeConf()) exitcode = 0 @@ -108,10 +151,13 @@ for conf in configurations: print conf.__class__.__name__ + ": Starting " + f + " test ..." test = imp.load_source('test', './' + f) - try: - ret = conf.start(test.Client, test.Responder) - except: - ret = False + if conf.skip_test(f): + print "Skipped." + continue + #try: + ret = conf.start(test.Client, test.Responder) + #except: + #ret = False if not ret: exitcode = -1 diff --git a/src/User.cpp b/src/User.cpp index 1bf6a6e6..ce420755 100644 --- a/src/User.cpp +++ b/src/User.cpp @@ -60,6 +60,7 @@ User::User(const Swift::JID &jid, UserInfo &userInfo, Component *component, User m_ignoreDisconnect = false; m_resources = 0; m_reconnectCounter = 0; + m_reconnectLimit = 3; m_reconnectTimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(5000); m_reconnectTimer->onTick.connect(boost::bind(&User::onConnectingTimeout, this));