def test_bind_resource(self): handler = EventRecorder() handlers = [ResourceBindingHandler(), handler] processor = StanzaProcessor() self.start_transport(handlers) self.stream = StreamBase(u"jabber:client", processor, handlers) processor.uplink = self.stream self.stream.receive(self.transport, self.addr[0]) self.stream.set_peer_authenticated(JID("[email protected]")) processor.setup_stanza_handlers(handlers, "post-auth") self.client.write(C2S_CLIENT_STREAM_HEAD) features = self.wait( expect = re.compile(br".*<stream:features>" br"(.*<bind.*urn:ietf:params:xml:ns:xmpp-bind.*)" br"</stream:features>")) self.assertIsNotNone(features) self.client.write(BIND_PROVIDED_REQUEST) resource = self.wait( expect = re.compile(br".*<iq.*id=(?:\"42\"|'42').*>" br"<bind.*<jid>[email protected]/(.*)</jid>.*</bind>")) self.assertEqual(resource, b"Provided") self.client.write(STREAM_TAIL) self.client.disconnect() self.wait() event_classes = [e.__class__ for e in handler.events_received] self.assertEqual(event_classes, [AuthenticatedEvent, StreamConnectedEvent, AuthorizedEvent, DisconnectedEvent])
def test_bind_no_resource(self): handler = AuthorizedEventHandler() handlers = [ResourceBindingHandler(), handler] processor = StanzaProcessor() processor.setup_stanza_handlers(handlers, "post-auth") self.stream = StreamBase(u"jabber:client", processor, handlers) processor.uplink = self.stream self.stream.me = JID("[email protected]") self.start_transport([handler]) self.stream.initiate(self.transport) self.connect_transport() self.server.write(C2S_SERVER_STREAM_HEAD) self.wait_short(1) self.server.write(BIND_FEATURES) req_id = self.wait(1, expect = re.compile(br".*<iq[^>]*id=[\"']([^\"']*)[\"']")) self.assertIsNotNone(req_id) req_id = req_id.decode("utf-8") self.server.write(BIND_GENERATED_RESPONSE.format(req_id) .encode("utf-8")) self.wait() self.assertFalse(self.stream.is_connected()) event_classes = [e.__class__ for e in handler.events_received] self.assertEqual(event_classes, [ConnectingEvent, ConnectedEvent, StreamConnectedEvent, GotFeaturesEvent, BindingResourceEvent, AuthorizedEvent, DisconnectedEvent])
def test_bind_resource(self): handler = EventRecorder() handlers = [ResourceBindingHandler(), handler] processor = StanzaProcessor() self.start_transport(handlers) self.stream = StreamBase(u"jabber:client", processor, handlers) processor.uplink = self.stream self.stream.receive(self.transport, self.addr[0]) self.stream.set_peer_authenticated(JID("[email protected]")) processor.setup_stanza_handlers(handlers, "post-auth") self.client.write(C2S_CLIENT_STREAM_HEAD) features = self.wait( expect=re.compile(br".*<stream:features>" br"(.*<bind.*urn:ietf:params:xml:ns:xmpp-bind.*)" br"</stream:features>")) self.assertIsNotNone(features) self.client.write(BIND_PROVIDED_REQUEST) resource = self.wait(expect=re.compile( br".*<iq.*id=(?:\"42\"|'42').*>" br"<bind.*<jid>[email protected]/(.*)</jid>.*</bind>")) self.assertEqual(resource, b"Provided") self.client.write(STREAM_TAIL) self.client.disconnect() self.wait() event_classes = [e.__class__ for e in handler.events_received] self.assertEqual(event_classes, [ AuthenticatedEvent, StreamConnectedEvent, AuthorizedEvent, DisconnectedEvent ])
def test_bind_no_resource(self): handler = AuthorizedEventHandler() handlers = [ResourceBindingHandler(), handler] processor = StanzaProcessor() processor.setup_stanza_handlers(handlers, "post-auth") self.stream = StreamBase(u"jabber:client", processor, handlers) processor.uplink = self.stream self.stream.me = JID("[email protected]") self.start_transport([handler]) self.stream.initiate(self.transport) self.connect_transport() self.server.write(C2S_SERVER_STREAM_HEAD) self.wait_short(1) self.server.write(BIND_FEATURES) req_id = self.wait( 1, expect=re.compile(br".*<iq[^>]*id=[\"']([^\"']*)[\"']")) self.assertIsNotNone(req_id) req_id = req_id.decode("utf-8") self.server.write( BIND_GENERATED_RESPONSE.format(req_id).encode("utf-8")) self.wait() self.assertFalse(self.stream.is_connected()) event_classes = [e.__class__ for e in handler.events_received] self.assertEqual(event_classes, [ ConnectingEvent, ConnectedEvent, StreamConnectedEvent, GotFeaturesEvent, BindingResourceEvent, AuthorizedEvent, DisconnectedEvent ])
def setUp(self): self.handlers_called = [] self.stanzas_sent = [] self.proc = StanzaProcessor() self.proc.me = JID("[email protected]/xx") self.proc.peer = JID("[email protected]/yy") self.proc.send = self.send self.proc.initiator = True
def __init__(self, jid, handlers, settings=None, main_loop=None): self._ml_handlers = [] self._base_handlers = [] self.jid = jid self.handlers = handlers self.settings = settings if settings else XMPPSettings() StanzaProcessor.__init__(self, self.settings[u"default_stanza_timeout"]) self.roster_client = self.roster_client_factory() self.main_loop = main_loop self.stream = None
def __init__(self, transport, avatars): StanzaProcessor.__init__(self) logger.debug('-- New connection') self.avatars = avatars self.settings = XMPPSettings() self.handlers = [self, ResourceBindingHandler(self.settings)] self.stream = StreamBase(u"jabber:client", self, self.handlers, self.settings) self.stream.set_authenticated(JID(domain='tlen.pl')) self.tlen = None self.transport = transport self.stream.receive(self.transport, 'tlen.pl') self.uplink = self.stream self.stream.set_authenticated(JID(domain='tlen.pl'))
def __init__(self, handlers): StanzaProcessor.__init__(self) self.setup_stanza_handlers(handlers, "post-auth") self.stanzas_sent = []
class TestStanzaProcessor(unittest.TestCase): # pylint: disable=R0904 def setUp(self): self.handlers_called = [] self.stanzas_sent = [] self.proc = StanzaProcessor() self.proc.me = JID("[email protected]/xx") self.proc.peer = JID("[email protected]/yy") self.proc.send = self.send self.proc.initiator = True def send(self, stanza): self.stanzas_sent.append(stanza) def process_stanzas(self, xml_elements): for xml in xml_elements: stanza = stanza_factory(ElementTree.XML(xml)) self.proc.process_stanza(stanza) def ignore_iq_get(self, stanza): self.handlers_called.append("ignore_iq_get") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "get") return True def ignore_iq_set(self, stanza): self.handlers_called.append("ignore_iq_set") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "set") return True def reply_iq_get(self, stanza): self.handlers_called.append("reply_iq_get") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "get") reply = stanza.make_result_response() element = ElementTree.Element( "{http://pyxmpp.jajcus.net/xmlns/test}payload") ElementTree.SubElement(element, "{http://pyxmpp.jajcus.net/xmlns/test}abc") reply.set_payload(element) return reply def reply_iq_set(self, stanza): self.handlers_called.append("reply_iq_set") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "set") reply = stanza.make_result_response() return reply def echo_message(self, stanza): self.handlers_called.append("echo_message") self.assertIsInstance(stanza, Message) self.assertNotEqual(stanza.stanza_type, "error") message = Message(to_jid=stanza.from_jid, from_jid=stanza.to_jid, stanza_type=stanza.stanza_type, thread=stanza.thread, subject=stanza.subject, body=stanza.body) return message def eat1(self, stanza): # pylint: disable=W0613 self.handlers_called.append("eat1") return True def eat2(self, stanza): # pylint: disable=W0613 self.handlers_called.append("eat2") return True def pass1(self, stanza): # pylint: disable=W0613 self.handlers_called.append("pass1") def pass2(self, stanza): # pylint: disable=W0613 self.handlers_called.append("pass2") def test_iq_ignore_handlers(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @iq_get_stanza_handler( XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler1(self, stanza): return parent.ignore_iq_get(stanza) @iq_set_stanza_handler( XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler2(self, stanza): return parent.ignore_iq_set(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(ALL_STANZAS) self.assertEqual(self.handlers_called, ["ignore_iq_get", "ignore_iq_set"]) self.assertFalse(self.stanzas_sent) def test_iq_reply_handlers(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @iq_get_stanza_handler( XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler1(self, stanza): return parent.reply_iq_get(stanza) @iq_set_stanza_handler( XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler2(self, stanza): return parent.reply_iq_set(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(ALL_STANZAS) self.assertEqual(self.handlers_called, ["reply_iq_get", "reply_iq_set"]) self.assertEqual(len(self.stanzas_sent), 2) stanza1 = self.stanzas_sent[0] self.assertTrue( xml_elements_equal(stanza1.as_xml(), ElementTree.XML(IQ2), True)) stanza2 = self.stanzas_sent[1] self.assertTrue( xml_elements_equal(stanza2.as_xml(), ElementTree.XML(IQ4), True)) def test_no_handlers(self): self.process_stanzas(ALL_STANZAS) self.assertEqual(self.handlers_called, []) self.assertFalse(self.handlers_called) self.assertEqual(len(self.stanzas_sent), 2) stanza1 = self.stanzas_sent[0] self.assertIsInstance(stanza1, Iq) self.assertEqual(stanza1.stanza_type, u"error") self.assertEqual(stanza1.error.condition_name, u"service-unavailable") self.assertEqual(stanza1.stanza_id, u"1") self.assertEqual(stanza1.to_jid, JID(u"[email protected]/res")) stanza2 = self.stanzas_sent[1] self.assertIsInstance(stanza2, Iq) self.assertEqual(stanza2.stanza_type, u"error") self.assertEqual(stanza2.error.condition_name, u"service-unavailable") self.assertEqual(stanza2.stanza_id, u"2") self.assertEqual(stanza2.to_jid, JID(u"[email protected]/res")) def test_message_handler(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.echo_message(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["echo_message", "echo_message", "echo_message"]) self.assertEqual(len(self.stanzas_sent), 3) stanza1 = self.stanzas_sent[0] self.assertIsInstance(stanza1, Message) self.assertEqual(stanza1.stanza_type, u"normal") stanza2 = self.stanzas_sent[1] self.assertIsInstance(stanza2, Message) self.assertEqual(stanza2.stanza_type, None) stanza2 = self.stanzas_sent[2] self.assertIsInstance(stanza2, Message) self.assertEqual(stanza2.stanza_type, u"chat") def test_message_pass1_pass2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual( self.handlers_called, ["pass1", "pass2", "pass1", "pass2", "pass1", "pass2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_pass2_pass1(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers2(), Handlers1()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual( self.handlers_called, ["pass2", "pass1", "pass2", "pass1", "pass2", "pass1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_eat1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.eat1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["eat1", "eat1", "eat1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_pass1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "eat2", "pass1", "eat2", "pass1", "eat2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_chat_handler(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler("chat") def handler1(self, stanza): return parent.pass1(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_pass1_pass2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "pass2", "pass1", "pass2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_pass2_pass1(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers2(), Handlers1()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass2", "pass1", "pass2", "pass1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_eat1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.eat1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["eat1", "eat1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_pass1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "eat2", "pass1", "eat2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_subscribe_handler(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler("subscribe") def handler1(self, stanza): return parent.pass1(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1"]) self.assertEqual(len(self.stanzas_sent), 0)
class TestStanzaProcessor(unittest.TestCase): # pylint: disable=R0904 def setUp(self): self.handlers_called = [] self.stanzas_sent = [] self.proc = StanzaProcessor() self.proc.me = JID("[email protected]/xx") self.proc.peer = JID("[email protected]/yy") self.proc.send = self.send self.proc.initiator = True def send(self, stanza): self.stanzas_sent.append(stanza) def process_stanzas(self, xml_elements): for xml in xml_elements: stanza = stanza_factory(ElementTree.XML(xml)) self.proc.process_stanza(stanza) def ignore_iq_get(self, stanza): self.handlers_called.append("ignore_iq_get") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "get") return True def ignore_iq_set(self, stanza): self.handlers_called.append("ignore_iq_set") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "set") return True def reply_iq_get(self, stanza): self.handlers_called.append("reply_iq_get") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "get") reply = stanza.make_result_response() element = ElementTree.Element( "{http://pyxmpp.jajcus.net/xmlns/test}payload") ElementTree.SubElement(element, "{http://pyxmpp.jajcus.net/xmlns/test}abc") reply.set_payload(element) return reply def reply_iq_set(self, stanza): self.handlers_called.append("reply_iq_set") self.assertIsInstance(stanza, Iq) self.assertEqual(stanza.stanza_type, "set") reply = stanza.make_result_response() return reply def echo_message(self, stanza): self.handlers_called.append("echo_message") self.assertIsInstance(stanza, Message) self.assertNotEqual(stanza.stanza_type, "error") message = Message(to_jid = stanza.from_jid, from_jid = stanza.to_jid, stanza_type = stanza.stanza_type, thread = stanza.thread, subject = stanza.subject, body = stanza.body) return message def eat1(self, stanza): # pylint: disable=W0613 self.handlers_called.append("eat1") return True def eat2(self, stanza): # pylint: disable=W0613 self.handlers_called.append("eat2") return True def pass1(self, stanza): # pylint: disable=W0613 self.handlers_called.append("pass1") def pass2(self, stanza): # pylint: disable=W0613 self.handlers_called.append("pass2") def test_iq_ignore_handlers(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @iq_get_stanza_handler(XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler1(self, stanza): return parent.ignore_iq_get(stanza) @iq_set_stanza_handler(XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler2(self, stanza): return parent.ignore_iq_set(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(ALL_STANZAS) self.assertEqual(self.handlers_called, ["ignore_iq_get", "ignore_iq_set"]) self.assertFalse(self.stanzas_sent) def test_iq_reply_handlers(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @iq_get_stanza_handler(XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler1(self, stanza): return parent.reply_iq_get(stanza) @iq_set_stanza_handler(XMLPayload, "{http://pyxmpp.jajcus.net/xmlns/test}payload") def handler2(self, stanza): return parent.reply_iq_set(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(ALL_STANZAS) self.assertEqual(self.handlers_called, ["reply_iq_get", "reply_iq_set"]) self.assertEqual(len(self.stanzas_sent), 2) stanza1 = self.stanzas_sent[0] self.assertTrue(xml_elements_equal(stanza1.as_xml(), ElementTree.XML(IQ2), True)) stanza2 = self.stanzas_sent[1] self.assertTrue(xml_elements_equal(stanza2.as_xml(), ElementTree.XML(IQ4), True)) def test_no_handlers(self): self.process_stanzas(ALL_STANZAS) self.assertEqual(self.handlers_called, []) self.assertFalse(self.handlers_called) self.assertEqual(len(self.stanzas_sent), 2) stanza1 = self.stanzas_sent[0] self.assertIsInstance(stanza1, Iq) self.assertEqual(stanza1.stanza_type, u"error") self.assertEqual(stanza1.error.condition_name, u"service-unavailable") self.assertEqual(stanza1.stanza_id, u"1") self.assertEqual(stanza1.to_jid, JID(u"[email protected]/res")) stanza2 = self.stanzas_sent[1] self.assertIsInstance(stanza2, Iq) self.assertEqual(stanza2.stanza_type, u"error") self.assertEqual(stanza2.error.condition_name, u"service-unavailable") self.assertEqual(stanza2.stanza_id, u"2") self.assertEqual(stanza2.to_jid, JID(u"[email protected]/res")) def test_message_handler(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.echo_message(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["echo_message", "echo_message", "echo_message"]) self.assertEqual(len(self.stanzas_sent), 3) stanza1 = self.stanzas_sent[0] self.assertIsInstance(stanza1, Message) self.assertEqual(stanza1.stanza_type, u"normal") stanza2 = self.stanzas_sent[1] self.assertIsInstance(stanza2, Message) self.assertEqual(stanza2.stanza_type, None) stanza2 = self.stanzas_sent[2] self.assertIsInstance(stanza2, Message) self.assertEqual(stanza2.stanza_type, u"chat") def test_message_pass1_pass2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "pass2", "pass1", "pass2", "pass1", "pass2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_pass2_pass1(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers2(), Handlers1()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass2", "pass1", "pass2", "pass1", "pass2", "pass1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_eat1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.eat1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["eat1", "eat1", "eat1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_pass1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "eat2", "pass1", "eat2", "pass1", "eat2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_message_chat_handler(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @message_stanza_handler("chat") def handler1(self, stanza): return parent.pass1(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_pass1_pass2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "pass2", "pass1", "pass2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_pass2_pass1(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass2(stanza) self.proc.setup_stanza_handlers([Handlers2(), Handlers1()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass2", "pass1", "pass2", "pass1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_eat1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.eat1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["eat1", "eat1"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_pass1_eat2(self): parent = self class Handlers1(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.pass1(stanza) class Handlers2(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler() def handler1(self, stanza): return parent.eat2(stanza) self.proc.setup_stanza_handlers([Handlers1(), Handlers2()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1", "eat2", "pass1", "eat2"]) self.assertEqual(len(self.stanzas_sent), 0) def test_presence_subscribe_handler(self): parent = self class Handlers(XMPPFeatureHandler): # pylint: disable=W0232,R0201,R0903 @presence_stanza_handler("subscribe") def handler1(self, stanza): return parent.pass1(stanza) self.proc.setup_stanza_handlers([Handlers()], "post-auth") self.process_stanzas(NON_IQ_STANZAS) self.assertEqual(self.handlers_called, ["pass1"]) self.assertEqual(len(self.stanzas_sent), 0)