def DoHandshake(self, resource_prefix, resource, username, initial_stream_domain, auth_domain, auth_stream_domain): self.Reset() handshake_task = (xmppserver.HandshakeTask(self, resource_prefix, True)) stream_xml = xmppserver.ParseXml('<stream:stream xmlns:stream="foo"/>') stream_xml.setAttribute('to', initial_stream_domain) self.assertEqual(self.data_received, 0) handshake_task.FeedStanza(stream_xml) self.assertEqual(self.data_received, 2) if auth_domain: username_domain = '%s@%s' % (username, auth_domain) else: username_domain = username auth_string = base64.b64encode('\0%s\0bar' % username_domain) auth_xml = xmppserver.ParseXml('<auth>%s</auth>' % auth_string) handshake_task.FeedStanza(auth_xml) self.assertEqual(self.data_received, 3) stream_xml = xmppserver.ParseXml('<stream:stream xmlns:stream="foo"/>') stream_xml.setAttribute('to', auth_stream_domain) handshake_task.FeedStanza(stream_xml) self.assertEqual(self.data_received, 5) bind_xml = xmppserver.ParseXml( '<iq type="set"><bind><resource>%s</resource></bind></iq>' % resource) handshake_task.FeedStanza(bind_xml) self.assertEqual(self.data_received, 6) self.assertFalse(self.handshake_done) session_xml = xmppserver.ParseXml( '<iq type="set"><session></session></iq>') handshake_task.FeedStanza(session_xml) self.assertEqual(self.data_received, 7) self.assertTrue(self.handshake_done) self.assertEqual(self.jid.username, username) self.assertEqual( self.jid.domain, auth_stream_domain or auth_domain or initial_stream_domain) self.assertEqual(self.jid.resource, '%s.%s' % (resource_prefix, resource)) handshake_task.FeedStanza('<ignored/>') self.assertEqual(self.data_received, 7)
def testCloneXml(self): xml = xmppserver.ParseXml('<foo/>') xml_clone = xmppserver.CloneXml(xml) xml_clone.setAttribute('bar', 'baz') self.assertEqual(xml, xml) self.assertEqual(xml_clone, xml_clone) self.assertNotEqual(xml, xml_clone)
def testCloneXmlUnlink(self): xml_text = '<foo/>' xml = xmppserver.ParseXml(xml_text) xml_clone = xmppserver.CloneXml(xml) xml.unlink() self.assertEqual(xml.parentNode, None) self.assertNotEqual(xml_clone.parentNode, None) self.assertEqual(xml_clone.toxml(), xml_text)
def DoHandshakeUnauthenticated(self, resource_prefix, resource, username, initial_stream_domain): self.Reset() handshake_task = (xmppserver.HandshakeTask(self, resource_prefix, False)) stream_xml = xmppserver.ParseXml('<stream:stream xmlns:stream="foo"/>') stream_xml.setAttribute('to', initial_stream_domain) self.assertEqual(self.data_received, 0) handshake_task.FeedStanza(stream_xml) self.assertEqual(self.data_received, 2) self.assertFalse(self.handshake_done) auth_string = base64.b64encode('\0%s\0bar' % username) auth_xml = xmppserver.ParseXml('<auth>%s</auth>' % auth_string) handshake_task.FeedStanza(auth_xml) self.assertEqual(self.data_received, 3) self.assertTrue(self.handshake_done) self.assertEqual(self.jid, None) handshake_task.FeedStanza('<ignored/>') self.assertEqual(self.data_received, 3)
def testParseXml(self): xml_text = """<foo xmlns=""><bar xmlns=""><baz/></bar></foo>""" xml = xmppserver.ParseXml(xml_text) self.assertEqual(xml.toxml(), xml_text)