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_serialize1(self): for xml in (STANZA0, STANZA1, STANZA2, STANZA3, STANZA4, STANZA5): stanza = Stanza(ElementTree.XML(xml)) element1 = ElementTree.XML(re.sub(r" xmlns='jabber:[^'\":]*'", "", xml)) element2 = ElementTree.XML(stanza.serialize()) self.assertTrue(xml_elements_equal(element1, element2, True))
def test_serialize2(self): stanza = Stanza("presence", from_jid = JID('[email protected]/d'), to_jid = JID('[email protected]/h'), stanza_id = '666', stanza_type = 'unavailable') xml = stanza.serialize() self.assertTrue(xml_elements_equal(ElementTree.XML(xml), ElementTree.XML(STANZA3.replace(" xmlns='jabber:client'",""))))
def test_stanza_get_custom_payload(self): stanza6 = Stanza(ElementTree.XML(STANZA6)) payload = stanza6.get_payload(TestPayload) self.assertIsInstance(payload, TestPayload) self.assertIsNone(payload.data) # pylint: disable=E1103 self.assertTrue(xml_elements_equal(ElementTree.XML(STANZA6)[0], payload.as_xml()))
def test_stanza_get_custom_payload(self): stanza6 = Stanza(ElementTree.XML(STANZA6)) payload = stanza6.get_payload(TestPayload) self.assertIsInstance(payload, TestPayload) self.assertIsNone(payload.data) # pylint: disable=E1103 self.assertTrue( xml_elements_equal(ElementTree.XML(STANZA6)[0], payload.as_xml()))
def test_stanza_as_xml(self): # STANZA1 and STANZA2 won't match as have no namespace for xml in (STANZA0, STANZA3, STANZA4, STANZA5): stanza = Stanza(ElementTree.XML(xml)) self.assertTrue( xml_elements_equal(stanza.as_xml(), ElementTree.XML(xml), True))
def test_serialize1(self): for xml in (STANZA0, STANZA1, STANZA2, STANZA3, STANZA4, STANZA5): stanza = Stanza(ElementTree.XML(xml)) element1 = ElementTree.XML( re.sub(r" xmlns='jabber:[^'\":]*'", "", xml)) element2 = ElementTree.XML(stanza.serialize()) self.assertTrue(xml_elements_equal(element1, element2, True))
def test_emit_stanza(self): serializer = XMPPSerializer("jabber:client") output = serializer.emit_head("from", "to") stanza = ElementTree.XML("<message xmlns='jabber:client'>" "<body>Body</body>" "<sub xmlns='http://example.org/ns'>" "<sub1 />" "<sub2 xmlns='http://example.org/ns2' />" "</sub>" "</message>") output += serializer.emit_stanza(stanza) output += serializer.emit_tail() xml = ElementTree.XML(output) self.assertEqual(len(xml), 1) self.assertEqual(len(xml[0]), 2) self.assertTrue(xml_elements_equal(xml[0], stanza)) # no prefix for stanza elements self.assertTrue("<message><body>" in output) # no prefix for stanza child self.assertTrue("<sub " in output) # ...and its same-namespace child self.assertTrue("<sub1/" in output or "<sub1 " in output) # prefix for other namespace child self.assertTrue("<sub2" in output)
def match(self, event, node): if self.event != event: return False if event == "end": return True if not xml_elements_equal(self.xml, node): return False return True
def test_stanza_build(self): stanza = Stanza("presence", from_jid=JID('[email protected]/d'), to_jid=JID('[email protected]/h'), stanza_id='666', stanza_type='unavailable') self.assertTrue( xml_elements_equal(stanza.as_xml(), ElementTree.XML(STANZA3)))
def test_stanza_payload(self): stanza5 = Stanza(ElementTree.XML(STANZA5)) payload = stanza5.get_all_payload() self.assertEqual(len(payload), 1) payload = payload[0] self.assertIsInstance(payload, StanzaPayload) self.assertIsInstance(payload, XMLPayload) self.assertEqual(payload.xml_element_name, "{jabber:iq:version}query") self.assertTrue( xml_elements_equal(ElementTree.XML(STANZA5)[0], payload.element))
def test_stanza_set_custom_payload(self): stanza7 = Stanza("iq", from_jid = JID('[email protected]/d'), to_jid = JID('[email protected]/h'), stanza_id = '666', stanza_type='get') payload = TestPayload(data = u"Test") stanza7.set_payload(payload) payload1 = stanza7.get_payload(TestPayload) self.assertTrue(payload1 is payload) self.assertTrue(xml_elements_equal(ElementTree.XML(STANZA7), stanza7.as_xml(), True))
def test_stanza_payload(self): stanza5 = Stanza(ElementTree.XML(STANZA5)) payload = stanza5.get_all_payload() self.assertEqual(len(payload), 1) payload = payload[0] self.assertIsInstance(payload, StanzaPayload) self.assertIsInstance(payload, XMLPayload) self.assertEqual(payload.xml_element_name, "{jabber:iq:version}query") self.assertTrue(xml_elements_equal( ElementTree.XML(STANZA5)[0], payload.element))
def test_serialize2(self): stanza = Stanza("presence", from_jid=JID('[email protected]/d'), to_jid=JID('[email protected]/h'), stanza_id='666', stanza_type='unavailable') xml = stanza.serialize() self.assertTrue( xml_elements_equal( ElementTree.XML(xml), ElementTree.XML(STANZA3.replace(" xmlns='jabber:client'", ""))))
def test_stanza_set_custom_payload(self): stanza7 = Stanza("iq", from_jid=JID('[email protected]/d'), to_jid=JID('[email protected]/h'), stanza_id='666', stanza_type='get') payload = TestPayload(data=u"Test") stanza7.set_payload(payload) payload1 = stanza7.get_payload(TestPayload) self.assertTrue(payload1 is payload) self.assertTrue( xml_elements_equal(ElementTree.XML(STANZA7), stanza7.as_xml(), True))
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 do_test(self, chunk_length): while 1: data = self.file.read(chunk_length) if not data: self.reader.feed('') break self.chunk_end += len(data) self.reader.feed(data) if not data: self.event("end", None) break self.chunk_start = self.chunk_end root1 = self.whole_stream.getroot() self.assertIsNotNone(root1) root2 = whole_stream.getroot() if not xml_elements_equal(root1, root2, True): self.fail("Whole stream invalid. Got: %r, Expected: %r" % (ElementTree.tostring(root1), ElementTree.tostring(root2)))
def do_test(self, chunk_length): while 1: data = self.file.read(chunk_length) if not data: self.reader.feed('') break self.chunk_end += len(data) self.reader.feed(data) if not data: self.event("end", None) break self.chunk_start = self.chunk_end root1 = self.whole_stream.getroot() self.assertIsNotNone(root1) root2 = whole_stream.getroot() if not xml_elements_equal(root1, root2, True): self.fail( "Whole stream invalid. Got: %r, Expected: %r" % (ElementTree.tostring(root1), ElementTree.tostring(root2)))
def test_stanza_as_xml(self): # STANZA1 and STANZA2 won't match as have no namespace for xml in (STANZA0, STANZA3, STANZA4, STANZA5): stanza = Stanza(ElementTree.XML(xml)) self.assertTrue(xml_elements_equal(stanza.as_xml(), ElementTree.XML(xml), True))
def test_stanza_build(self): stanza = Stanza("presence", from_jid = JID('[email protected]/d'), to_jid = JID('[email protected]/h'), stanza_id = '666', stanza_type = 'unavailable') self.assertTrue(xml_elements_equal(stanza.as_xml(), ElementTree.XML(STANZA3)))