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 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