diff --git a/.travis.yml b/.travis.yml index 2e32b158..60938d8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,6 @@ before_script: - 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 install: "pip install --user sleekxmpp" script: - - cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTS=ON . && make && ./src/libtransport_test && make spectrum2 && cd ./spectrum/src/tests && python -V && python irc_test.py + - cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_TESTS=ON . && make && ./src/libtransport_test && make spectrum2 && cd ./spectrum/src/tests && python -V && python start.py notifications: slack: spectrum2:CIlYHtxGMAaxs3qVHfwBzCuy diff --git a/spectrum/src/tests/irc_test.py b/spectrum/src/tests/irc_test.py deleted file mode 100644 index 8416dce8..00000000 --- a/spectrum/src/tests/irc_test.py +++ /dev/null @@ -1,95 +0,0 @@ -import optparse -import sys -import time -import subprocess -import os - -import sleekxmpp - - -class Responder(sleekxmpp.ClientXMPP): - def __init__(self, jid, password, room, nick): - sleekxmpp.ClientXMPP.__init__(self, jid, password) - self.room = room - self.nick = nick - self.add_event_handler("session_start", self.start) - self.add_event_handler("groupchat_message", self.muc_message) - - def muc_message(self, msg): - if msg['mucnick'] != self.nick: - self.send_message(mto=msg['from'].bare, - mbody="echo %s" % msg['body'], - mtype='groupchat') - - def start(self, event): - self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True) - #time.sleep(1) - #self.send_message(mto=self.room, mbody=self.message, mtype='groupchat') - #time.sleep(10) - #self.disconnect() - -class Client(sleekxmpp.ClientXMPP): - def __init__(self, jid, password, room, nick): - sleekxmpp.ClientXMPP.__init__(self, jid, password) - self.room = room - self.nick = nick - self.echo_received = False - self.add_event_handler("session_start", self.start) - self.add_event_handler("groupchat_message", self.muc_message) - - def muc_message(self, msg): - if msg['mucnick'] != self.nick: - if msg['body'] == "echo abc": - self.echo_received = True - - def start(self, event): - self.getRoster() - self.sendPresence() - self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True) - self.send_message(mto=self.room, mbody="abc", mtype='groupchat') - #time.sleep(10) - #self.disconnect() - -if __name__ == '__main__': - os.system("../spectrum2 -n ./irc_test.cfg &") - os.system("ngircd -f ngircd.conf &") - time.sleep(1) - responder = Responder("responder@localhost", "password", "#channel@localhost", "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(): - responder.process(block=False) - else: - print "connect() failed" - sys.exit(1) - - client = Client("client@localhost", "password", "#channel@localhost", "client") - client.register_plugin('xep_0030') # Service Discovery - client.register_plugin('xep_0045') # Multi-User Chat - client.register_plugin('xep_0199') # XMPP Ping - client['feature_mechanisms'].unencrypted_plain = True - - time.sleep(2) - - if client.connect(): - client.process(block=False) - else: - print "connect() failed" - sys.exit(1) - - time.sleep(10) - client.disconnect() - responder.disconnect() - - os.system("killall spectrum2") - os.system("killall ngircd") - os.system("killall spectrum2_libcommuni_backend") - - if client.echo_received == False: - print "ERROR: 'echo abc' not received." - sys.exit(1) - - print "ALL TESTS PASSED" diff --git a/spectrum/src/tests/muc_echo.py b/spectrum/src/tests/muc_echo.py new file mode 100644 index 00000000..0075a9c0 --- /dev/null +++ b/spectrum/src/tests/muc_echo.py @@ -0,0 +1,51 @@ +import optparse +import sys +import time +import subprocess +import os + +import sleekxmpp + + +class Responder(sleekxmpp.ClientXMPP): + def __init__(self, jid, password, room, nick): + sleekxmpp.ClientXMPP.__init__(self, jid, password) + self.room = room + self.nick = nick + self.add_event_handler("session_start", self.start) + self.add_event_handler("groupchat_message", self.muc_message) + + self.tests = {} + + def muc_message(self, msg): + if msg['mucnick'] != self.nick: + self.send_message(mto=msg['from'].bare, + mbody="echo %s" % msg['body'], + mtype='groupchat') + + def start(self, event): + self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True) + +class Client(sleekxmpp.ClientXMPP): + def __init__(self, jid, password, room, nick): + sleekxmpp.ClientXMPP.__init__(self, jid, password) + self.room = room + self.nick = nick + self.add_event_handler("session_start", self.start) + self.add_event_handler("groupchat_message", self.muc_message) + self.finished = False + + self.tests = {} + self.tests["echo_received"] = ["libcommuni: Send and receive messages", False] + + def muc_message(self, msg): + if msg['mucnick'] != self.nick: + if msg['body'] == "echo abc": + self.tests["echo_received"][1] = True + self.finished = True + + def start(self, event): + self.getRoster() + self.sendPresence() + self.plugin['xep_0045'].joinMUC(self.room, self.nick, wait=True) + self.send_message(mto=self.room, mbody="abc", mtype='groupchat') diff --git a/spectrum/src/tests/start.py b/spectrum/src/tests/start.py new file mode 100644 index 00000000..55b9d419 --- /dev/null +++ b/spectrum/src/tests/start.py @@ -0,0 +1,76 @@ +import optparse +import sys +import time +import subprocess +import os + +import sleekxmpp +import imp + +def single_test(Client, Responder): + os.system("../spectrum2 -n ./irc_test.cfg > spectrum2.log &") + os.system("ngircd -f ngircd.conf &") + time.sleep(1) + responder = Responder("responder@localhost", "password", "#channel@localhost", "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(): + responder.process(block=False) + else: + print "connect() failed" + sys.exit(1) + + client = Client("client@localhost", "password", "#channel@localhost", "client") + client.register_plugin('xep_0030') # Service Discovery + client.register_plugin('xep_0045') # Multi-User Chat + client.register_plugin('xep_0199') # XMPP Ping + client['feature_mechanisms'].unencrypted_plain = True + + time.sleep(2) + + if client.connect(): + client.process(block=False) + else: + print "connect() failed" + sys.exit(1) + + max_time = 60 + while not client.finished and max_time > 0: + time.sleep(1) + max_time -= 1 + client.disconnect() + responder.disconnect() + + os.system("killall spectrum2") + os.system("killall ngircd") + os.system("killall spectrum2_libcommuni_backend 2>/dev/null") + + ret = True + for v in client.tests.values(): + if v[1]: + print v[0] + ": PASSED" + else: + print v[0] + ": FAILED" + ret = False + + if not ret: + os.system("cat spectrum2.log") + + return ret + +exitcode = 0 +for f in os.listdir("."): + if not f.endswith(".py") or f == "start.py": + continue + + print "Starting " + f + " test ..." + test = imp.load_source('test', './' + f) + ret = single_test(test.Client, test.Responder) + if not ret: + exitcode = -1 + +sys.exit(exitcode) +