Ejemplo n.º 1
0
 def test_from_exception(self):
     obj = nonza.StreamError.from_exception(
         errors.StreamError((namespaces.streams, "undefined-condition"),
                            text="foobar"))
     self.assertEqual((namespaces.streams, "undefined-condition"),
                      obj.condition)
     self.assertEqual("foobar", obj.text)
Ejemplo n.º 2
0
    def test_from_exception(self):
        obj = nonza.StreamError.from_exception(
            errors.StreamError(errors.StreamErrorCondition.UNDEFINED_CONDITION,
                               text="foobar"))

        self.assertEqual(errors.StreamErrorCondition.UNDEFINED_CONDITION,
                         obj.condition)

        self.assertEqual("foobar", obj.text)
Ejemplo n.º 3
0
    def test_connect_without_starttls_support_and_with_required_error(self):
        captured_features_future = None

        def capture_future(*args, features_future=None, **kwargs):
            nonlocal captured_features_future
            captured_features_future = features_future
            return base.protocol

        features = nonza.StreamFeatures()

        features_future = asyncio.Future()
        features_future.set_result(features)

        base = unittest.mock.Mock()
        base.protocol.starttls = CoroutineMock()
        base.create_starttls_connection = CoroutineMock()
        base.create_starttls_connection.return_value = (
            unittest.mock.sentinel.transport,
            base.protocol,
        )
        base.metadata.tls_required = True
        base.XMLStream.return_value = base.protocol
        base.XMLStream.side_effect = capture_future
        base.Future.return_value = features_future
        base.send_and_wait_for = CoroutineMock()
        base.send_and_wait_for.side_effect = errors.StreamError(
            condition=errors.StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, )

        error_message = (
            "STARTTLS not supported by server, but required by client")

        with contextlib.ExitStack() as stack:
            stack.enter_context(
                unittest.mock.patch(
                    "asyncio.Future",
                    new=base.Future,
                ))

            stack.enter_context(
                unittest.mock.patch(
                    "aioxmpp.ssl_transport.create_starttls_connection",
                    new=base.create_starttls_connection,
                ))

            stack.enter_context(
                unittest.mock.patch(
                    "aioxmpp.protocol.XMLStream",
                    new=base.XMLStream,
                ))

            StartTLS_nonza = stack.enter_context(
                unittest.mock.patch("aioxmpp.nonza.StartTLS", ))

            stack.enter_context(
                unittest.mock.patch(
                    "aioxmpp.protocol.send_and_wait_for",
                    new=base.send_and_wait_for,
                ))

            stack.enter_context(
                unittest.mock.patch(
                    "aioxmpp.protocol.send_stream_error_and_close",
                    new=base.send_stream_error_and_close))

            stack.enter_context(
                unittest.mock.patch(
                    "asyncio.ensure_future",
                    new=base.async_,
                ))

            stack.enter_context(
                unittest.mock.patch("aioxmpp.connector.timedelta", ))

            with self.assertRaisesRegex(errors.TLSUnavailable, error_message):
                run_coroutine(
                    self.c.connect(
                        unittest.mock.sentinel.loop,
                        base.metadata,
                        unittest.mock.sentinel.domain,
                        unittest.mock.sentinel.host,
                        unittest.mock.sentinel.port,
                        unittest.mock.sentinel.timeout,
                    ))

        self.assertSequenceEqual(base.mock_calls, [
            unittest.mock.call.Future(loop=unittest.mock.sentinel.loop, ),
            unittest.mock.call.XMLStream(
                to=unittest.mock.sentinel.domain,
                features_future=features_future,
                base_logger=None,
            ),
            unittest.mock.call.create_starttls_connection(
                unittest.mock.sentinel.loop,
                unittest.mock.ANY,
                host=unittest.mock.sentinel.host,
                port=unittest.mock.sentinel.port,
                peer_hostname=unittest.mock.sentinel.host,
                server_hostname=unittest.mock.sentinel.domain,
                use_starttls=True,
            ),
            unittest.mock.call.send_and_wait_for(base.protocol, [
                StartTLS_nonza(),
            ], [
                nonza.StartTLSFailure,
                nonza.StartTLSProceed,
            ])
        ])