示例#1
0
    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
        )
示例#2
0
    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)))
示例#3
0
 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")
示例#4
0
 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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
    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")
示例#8
0
    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)
示例#9
0
    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)))
示例#10
0
    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)
示例#11
0
    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)
示例#12
0
    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)
示例#13
0
    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)
示例#14
0
    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)
示例#15
0
    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)