# HG changeset patch # User souliane # Date 1418985403 -3600 # Node ID 7fbc858cd1cd7a6807010e9b08d73d583c60094b # Parent 2308f8405ffb30eeff98d675eb2fe15cda93e828 test: fixes tests for XEP-0033 diff -r 2308f8405ffb -r 7fbc858cd1cd src/test/test_plugin_xep_0033.py --- a/src/test/test_plugin_xep_0033.py Fri Dec 19 11:36:00 2014 +0100 +++ b/src/test/test_plugin_xep_0033.py Fri Dec 19 11:36:43 2014 +0100 @@ -31,13 +31,16 @@ from twisted.words.protocols.jabber.jid import JID from logging import ERROR -PROFILE = Const.PROFILE[0] +PROFILE_INDEX = 0 +PROFILE = Const.PROFILE[PROFILE_INDEX] JID_STR_FROM = Const.JID_STR[1] JID_STR_TO = Const.PROFILE_DICT[PROFILE].host JID_STR_X_TO = Const.JID_STR[0] JID_STR_X_CC = Const.JID_STR[1] JID_STR_X_BCC = Const.JID_STR[2] +ADDRS = ('to', JID_STR_X_TO, 'cc', JID_STR_X_CC, 'bcc', JID_STR_X_BCC) + class XEP_0033Test(helpers.SatTestCase): @@ -70,27 +73,29 @@ treatments.addCallback(cb) treatments.callback(data) - def test_sendMessageTrigger(self): + def get_mess_data(self): mess_data = {"to": JID(JID_STR_TO), "type": "chat", "message": "content", "extra": {} } - addresses = ('to', JID_STR_X_TO, 'cc', JID_STR_X_CC, 'bcc', JID_STR_X_BCC) - mess_data["extra"]["address"] = '%s:%s\n%s:%s\n%s:%s\n' % addresses + mess_data["extra"]["address"] = '%s:%s\n%s:%s\n%s:%s\n' % ADDRS original_stanza = u""" content """ % (JID_STR_FROM, JID_STR_TO) mess_data['xml'] = parseXml(original_stanza.encode("utf-8")) - expected = deepcopy(mess_data['xml']) + return mess_data + + def test_sendMessageTrigger(self): + expected = self.get_mess_data()['xml'] addresses_extra = """
- """ % addresses + """ % ADDRS addresses_element = parseXml(addresses_extra.encode('utf-8')) expected.addChild(addresses_element) @@ -109,13 +114,9 @@ /!\ see the comments in XEP_0033.sendAndStoreMessage""" sent = [] stored = [] - for to_s in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): - to_jid = JID(to_s) - host = JID(to_jid.host) - logger = getLogger() - level = logger.getEffectiveLevel() - logger.setLevel(ERROR) # remove log.warning pollution - entities = yield self.host.findFeaturesSet([plugin.NS_ADDRESS], jid_=host, profile_key=PROFILE) + d_list = [] + + def cb(entities, to_jid, logger, level): if host in entities: if host not in sent: # send the message to the entity offering the feature sent.append(host) @@ -125,9 +126,24 @@ sent.append(to_jid) stored.append(to_jid) logger.setLevel(level) - msg = "/!\ see the comments in XEP_0033.sendAndStoreMessage" - self.assertEqualUnsortedList(self.host.sent_messages, sent, msg) - self.assertEqualUnsortedList(self.host.stored_messages, stored, msg) + + for to_s in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): + to_jid = JID(to_s) + host = JID(to_jid.host) + logger = getLogger() + level = logger.getEffectiveLevel() + logger.setLevel(ERROR) # remove log.warning pollution + d = self.host.findFeaturesSet([plugin.NS_ADDRESS], jid_=host, profile_key=PROFILE) + d.addCallback(cb, to_jid, logger, level) + d_list.append(d) + + def cb_list(dummy): + msg = "/!\ see the comments in XEP_0033.sendAndStoreMessage" + sent_recipients = [JID(elt['to']) for elt in self.host.getSentMessages(PROFILE_INDEX)] + self.assertEqualUnsortedList(sent_recipients, sent, msg) + self.assertEqualUnsortedList(self.host.stored_messages, stored, msg) + + return defer.DeferredList(d_list).addCallback(cb_list) def trigger(data, exception): """Execute self.plugin.sendMessageTrigger with a different logging @@ -146,34 +162,36 @@ post_treatments.callback(data) logger.setLevel(level) post_treatments.addCallbacks(assertAddresses, lambda failure: sendMessageErrback(failure, exception)) + return post_treatments # feature is not supported, abort the message - data = deepcopy(mess_data) - trigger(data, CancelError) self.host.memory.reinit() + data = self.get_mess_data() + d = trigger(data, CancelError) # feature is supported by the main target server self.host.reinit() self.host.addFeature(JID(JID_STR_TO), plugin.NS_ADDRESS, PROFILE) - data = deepcopy(mess_data) - trigger(data, CancelError) - checkSentAndStored() + data = self.get_mess_data() + d.addCallback(lambda dummy: trigger(data, CancelError)) + d.addCallback(lambda dummy: checkSentAndStored()) # feature is supported by all target servers self.host.reinit() self.host.addFeature(JID(JID_STR_TO), plugin.NS_ADDRESS, PROFILE) for dest in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): self.host.addFeature(JID(JID(dest).host), plugin.NS_ADDRESS, PROFILE) - data = deepcopy(mess_data) - trigger(data, CancelError) - checkSentAndStored() + data = self.get_mess_data() + d.addCallback(lambda dummy: trigger(data, CancelError)) + d.addCallback(lambda dummy: checkSentAndStored()) # check that a wrong recipient entity is fixed by the backend self.host.reinit() self.host.addFeature(JID(JID_STR_TO), plugin.NS_ADDRESS, PROFILE) for dest in (JID_STR_X_TO, JID_STR_X_CC, JID_STR_X_BCC): self.host.addFeature(JID(JID(dest).host), plugin.NS_ADDRESS, PROFILE) - data = deepcopy(mess_data) + data = self.get_mess_data() data["to"] = JID(JID_STR_X_TO) - trigger(data, CancelError) - checkSentAndStored() + d.addCallback(lambda dummy: trigger(data, CancelError)) + d.addCallback(lambda dummy: checkSentAndStored()) + return d