def test_close(self): closing_handler = unittest.mock.Mock() fut = self.xmlstream.error_future() obj = self.Cls() self.xmlstream.on_closing.connect(closing_handler) def handler(obj): self.xmlstream.close() self.xmlstream.stanza_parser.add_class(self.Cls, handler) run_coroutine(self.xmlstream.run_test( [ XMLStreamMock.Close(), ], stimulus=XMLStreamMock.Receive(obj) )) self.assertSequenceEqual( [ unittest.mock.call(None), ], closing_handler.mock_calls ) self.assertTrue(fut.done()) self.assertIsInstance( fut.exception(), ConnectionError )
def test_catch_missing_stanza_handler(self): obj = self.Cls() with self.assertRaisesRegex(AssertionError, "no handler registered"): run_coroutine( self.xmlstream.run_test([], stimulus=XMLStreamMock.Receive(obj)))
def test_initiate_challenge(self): state, payload = self._run_test(self.sm.initiate("foo", b"bar"), [ XMLStreamMock.Send(nonza.SASLAuth(mechanism="foo", payload=b"bar"), response=XMLStreamMock.Receive( nonza.SASLChallenge(payload=b"baz"))) ]) self.assertEqual(state, "challenge") self.assertEqual(payload, b"baz")
def test_initiate_success(self): state, payload = self._run_test(self.sm.initiate("foo", b"bar"), [ XMLStreamMock.Send(nonza.SASLAuth(mechanism="foo", payload=b"bar"), response=XMLStreamMock.Receive( nonza.SASLSuccess())) ]) self.assertEqual(state, "success") self.assertIsNone(payload)
def test_receive_stream_features_into_future(self): fut = self.xmlstream.features_future() obj = nonza.StreamFeatures() run_coroutine( self.xmlstream.run_test([], stimulus=XMLStreamMock.Receive(obj))) self.assertTrue(fut.done()) self.assertIs(fut.result(), obj)
def test_response_success(self): self.sm._state = "challenge" state, payload = self._run_test(self.sm.respond(b"bar"), [ XMLStreamMock.Send(nonza.SASLResponse(payload=b"bar"), response=XMLStreamMock.Receive( nonza.SASLSuccess())) ]) self.assertEqual(state, "success") self.assertIsNone(payload)
def test_response_challenge(self): self.sm._state = "challenge" state, payload = self._run_test(self.sm.respond(b"bar"), [ XMLStreamMock.Send(nonza.SASLResponse(payload=b"bar"), response=XMLStreamMock.Receive( nonza.SASLChallenge(payload=b"baz"))) ]) self.assertEqual(state, "challenge") self.assertEqual(payload, b"baz")
def test_initiate_failure(self): with self.assertRaises(aiosasl.SASLFailure) as ctx: self._run_test(self.sm.initiate("foo", b"bar"), [ XMLStreamMock.Send( nonza.SASLAuth(mechanism="foo", payload=b"bar"), response=XMLStreamMock.Receive( nonza.SASLFailure(condition=(namespaces.sasl, "not-authorized")))) ]) self.assertEqual("not-authorized", ctx.exception.opaque_error)
def test_reset(self): obj = self.Cls() def handler(obj): self.xmlstream.reset() self.xmlstream.stanza_parser.add_class(self.Cls, handler) run_coroutine( self.xmlstream.run_test([ XMLStreamMock.Reset(), ], stimulus=XMLStreamMock.Receive(obj)))
def test_abort_return_on_aborted_error(self): self.sm._state = "challenge" state, payload = self._run_test(self.sm.abort(), [ XMLStreamMock.Send( nonza.SASLAbort(), response=XMLStreamMock.Receive( nonza.SASLFailure(condition=(namespaces.sasl, "aborted")))) ]) self.assertEqual(state, "failure") self.assertIsNone(payload)
def test_abort_reject_non_failure(self): self.sm._state = "challenge" with self.assertRaisesRegex(aiosasl.SASLFailure, "unexpected non-failure") as ctx: self._run_test(self.sm.abort(), [ XMLStreamMock.Send(nonza.SASLAbort(), response=XMLStreamMock.Receive( nonza.SASLSuccess())) ]) self.assertEqual("aborted", ctx.exception.opaque_error)
def test_response_failure(self): self.sm._state = "challenge" with self.assertRaises(aiosasl.SASLFailure) as ctx: self._run_test(self.sm.respond(b"bar"), [ XMLStreamMock.Send( nonza.SASLResponse(payload=b"bar"), response=XMLStreamMock.Receive( nonza.SASLFailure(condition=(namespaces.sasl, "credentials-expired")))) ]) self.assertEqual("credentials-expired", ctx.exception.opaque_error)
def test_abort_re_raise_other_errors(self): self.sm._state = "challenge" with self.assertRaises(aiosasl.SASLFailure) as ctx: self._run_test(self.sm.abort(), [ XMLStreamMock.Send( nonza.SASLAbort(), response=XMLStreamMock.Receive( nonza.SASLFailure(condition=(namespaces.sasl, "mechanism-too-weak")))) ]) self.assertEqual("mechanism-too-weak", ctx.exception.opaque_error)
def test_register_stanza_handler(self): received = [] def handler(obj): nonlocal received received.append(obj) obj = self.Cls() self.xmlstream.stanza_parser.add_class(self.Cls, handler) run_coroutine( self.xmlstream.run_test([], stimulus=XMLStreamMock.Receive(obj))) self.assertSequenceEqual([obj], received)
def test_abort(self): fut = self.xmlstream.error_future() obj = self.Cls() def handler(obj): self.xmlstream.abort() self.xmlstream.stanza_parser.add_class(self.Cls, handler) run_coroutine( self.xmlstream.run_test([ XMLStreamMock.Abort(), ], stimulus=XMLStreamMock.Receive(obj))) self.assertTrue(fut.done()) self.assertIsInstance(fut.exception(), ConnectionError)