コード例 #1
0
ファイル: test_ux.py プロジェクト: hikari-py/hikari
    async def test_when_no_new_available_releases(self, http_settings,
                                                  proxy_settings):
        data = {
            "releases": {
                "0.1.0": [{
                    "yanked": False
                }],
                "1.0.0": [{
                    "yanked": False
                }],
                "1.0.0.dev1": [{
                    "yanked": False
                }],
                "1.0.1": [{
                    "yanked": True
                }],
            }
        }
        _request = hikari_test_helpers.AsyncContextManagerMock()
        _request.json = mock.AsyncMock(return_value=data)
        _client_session = hikari_test_helpers.AsyncContextManagerMock()
        _client_session.get = mock.Mock(return_value=_request)
        stack = contextlib.ExitStack()
        logger = stack.enter_context(mock.patch.object(ux, "_LOGGER"))
        create_client_session = stack.enter_context(
            mock.patch.object(net,
                              "create_client_session",
                              return_value=_client_session))
        create_tcp_connector = stack.enter_context(
            mock.patch.object(net, "create_tcp_connector"))
        stack.enter_context(
            mock.patch.object(_about, "__version__", new="1.0.0"))
        stack.enter_context(
            mock.patch.object(_about, "__git_sha1__", new="1234567890"))

        with stack:
            await ux.check_for_updates(http_settings=http_settings,
                                       proxy_settings=proxy_settings)

        logger.debug.assert_not_called()
        logger.info.assert_not_called()
        create_tcp_connector.assert_called_once_with(
            dns_cache=False, limit=1, http_settings=http_settings)
        create_client_session.assert_called_once_with(
            connector=create_tcp_connector(),
            connector_owner=True,
            http_settings=http_settings,
            raise_for_status=True,
            trust_env=proxy_settings.trust_env,
        )
        _client_session.get.assert_called_once_with(
            "https://pypi.org/pypi/hikari/json",
            allow_redirects=http_settings.max_redirects is not None,
            max_redirects=http_settings.max_redirects,
            proxy=proxy_settings.url,
            proxy_headers=proxy_settings.all_headers,
        )
コード例 #2
0
    async def test_connect_when_error_connecting(self, http_settings,
                                                 proxy_settings):
        mock_client_session = hikari_test_helpers.AsyncContextManagerMock()
        mock_client_session.ws_connect = mock.MagicMock(
            side_effect=aiohttp.ClientConnectionError("some error"))

        stack = contextlib.ExitStack()
        sleep = stack.enter_context(mock.patch.object(asyncio, "sleep"))
        stack.enter_context(
            mock.patch.object(aiohttp,
                              "ClientSession",
                              return_value=mock_client_session))
        stack.enter_context(mock.patch.object(aiohttp, "TCPConnector"))
        stack.enter_context(mock.patch.object(aiohttp, "ClientTimeout"))
        stack.enter_context(
            pytest.raises(
                errors.GatewayError,
                match=
                r"Failed to connect to Discord: ClientConnectionError\('some error'\)"
            ))
        logger = mock.Mock()
        log_filterer = mock.Mock()

        with stack:
            async with shard._GatewayTransport.connect(
                    http_settings=http_settings,
                    proxy_settings=proxy_settings,
                    logger=logger,
                    url="https://some.url",
                    log_filterer=log_filterer,
            ):
                pass

        sleep.assert_awaited_once_with(0.25)
        mock_client_session.assert_used_once()
コード例 #3
0
    async def test_connect_when_unexpected_error_after_connecting(
            self, http_settings, proxy_settings):
        class MockWS(hikari_test_helpers.AsyncContextManagerMock,
                     shard._GatewayTransport):
            closed = False
            send_close = mock.AsyncMock()
            sent_close = False

            def __init__(self):
                pass

        mock_websocket = MockWS()
        mock_client_session = hikari_test_helpers.AsyncContextManagerMock()
        mock_client_session.ws_connect = mock.MagicMock(
            return_value=mock_websocket)

        stack = contextlib.ExitStack()
        sleep = stack.enter_context(mock.patch.object(asyncio, "sleep"))
        stack.enter_context(
            mock.patch.object(aiohttp,
                              "ClientSession",
                              return_value=mock_client_session))
        stack.enter_context(mock.patch.object(aiohttp, "TCPConnector"))
        stack.enter_context(mock.patch.object(aiohttp, "ClientTimeout"))
        stack.enter_context(
            pytest.raises(errors.GatewayError,
                          match="Unexpected ValueError: testing"))
        logger = mock.Mock()
        log_filterer = mock.Mock()

        with stack:
            async with shard._GatewayTransport.connect(
                    http_settings=http_settings,
                    proxy_settings=proxy_settings,
                    logger=logger,
                    url="https://some.url",
                    log_filterer=log_filterer,
            ):
                hikari_test_helpers.raiser(ValueError("testing"))

        mock_websocket.send_close.assert_awaited_once_with(
            code=errors.ShardCloseCode.UNEXPECTED_CONDITION,
            message=b"unexpected fatal client error :-(")

        sleep.assert_awaited_once_with(0.25)
        mock_client_session.assert_used_once()
        mock_websocket.assert_used_once()
コード例 #4
0
    async def test_connect_when_no_error_and_not_closing(
            self, http_settings, proxy_settings):
        class MockWS(hikari_test_helpers.AsyncContextManagerMock,
                     shard._GatewayTransport):
            closed = False
            _closing = False
            sent_close = False
            send_close = mock.AsyncMock()

            def __init__(self):
                pass

        mock_websocket = MockWS()
        mock_client_session = hikari_test_helpers.AsyncContextManagerMock()
        mock_client_session.ws_connect = mock.MagicMock(
            return_value=mock_websocket)

        stack = contextlib.ExitStack()
        sleep = stack.enter_context(mock.patch.object(asyncio, "sleep"))
        stack.enter_context(
            mock.patch.object(aiohttp,
                              "ClientSession",
                              return_value=mock_client_session))
        stack.enter_context(mock.patch.object(aiohttp, "TCPConnector"))
        stack.enter_context(mock.patch.object(aiohttp, "ClientTimeout"))
        logger = mock.Mock()
        log_filterer = mock.Mock()

        with stack:
            async with shard._GatewayTransport.connect(
                    http_settings=http_settings,
                    proxy_settings=proxy_settings,
                    logger=logger,
                    url="https://some.url",
                    log_filterer=log_filterer,
            ):
                pass

        mock_websocket.send_close.assert_awaited_once_with(
            code=shard._RESUME_CLOSE_CODE, message=b"client is shutting down")

        sleep.assert_awaited_once_with(0.25)
        mock_client_session.assert_used_once()
        mock_websocket.assert_used_once()
コード例 #5
0
    async def test_connect_when_handshake_error_with_unknown_reason(
            self, http_settings, proxy_settings):
        mock_client_session = hikari_test_helpers.AsyncContextManagerMock()
        mock_client_session.ws_connect = mock.MagicMock(
            side_effect=aiohttp.WSServerHandshakeError(status=123,
                                                       message="some error",
                                                       request_info=None,
                                                       history=None))

        stack = contextlib.ExitStack()
        sleep = stack.enter_context(mock.patch.object(asyncio, "sleep"))
        stack.enter_context(
            mock.patch.object(aiohttp,
                              "ClientSession",
                              return_value=mock_client_session))
        stack.enter_context(mock.patch.object(aiohttp, "TCPConnector"))
        stack.enter_context(mock.patch.object(aiohttp, "ClientTimeout"))
        stack.enter_context(
            pytest.raises(
                errors.GatewayError,
                match=
                (r"Failed to connect to Discord: "
                 r"WSServerHandshakeError\(None, None, status=123, message='some error'\)"
                 ),
            ))
        logger = mock.Mock()
        log_filterer = mock.Mock()

        with stack:
            async with shard._GatewayTransport.connect(
                    http_settings=http_settings,
                    proxy_settings=proxy_settings,
                    logger=logger,
                    url="https://some.url",
                    log_filterer=log_filterer,
            ):
                pass

        sleep.assert_awaited_once_with(0.25)
        mock_client_session.assert_used_once()
コード例 #6
0
    async def test_connect_yields_websocket(self, http_settings,
                                            proxy_settings):
        class MockWS(hikari_test_helpers.AsyncContextManagerMock,
                     shard._GatewayTransport):
            closed = True
            send_close = mock.AsyncMock()
            sent_close = False

            def __init__(self):
                pass

        mock_websocket = MockWS()
        mock_client_session = hikari_test_helpers.AsyncContextManagerMock()
        mock_client_session.ws_connect = mock.MagicMock(
            return_value=mock_websocket)

        stack = contextlib.ExitStack()
        sleep = stack.enter_context(mock.patch.object(asyncio, "sleep"))
        client_session = stack.enter_context(
            mock.patch.object(aiohttp,
                              "ClientSession",
                              return_value=mock_client_session))
        tcp_connector = stack.enter_context(
            mock.patch.object(aiohttp, "TCPConnector"))
        client_timeout = stack.enter_context(
            mock.patch.object(aiohttp, "ClientTimeout"))
        logger = mock.Mock()
        log_filterer = mock.Mock()

        with stack:
            async with shard._GatewayTransport.connect(
                    http_settings=http_settings,
                    proxy_settings=proxy_settings,
                    logger=logger,
                    url="https://some.url",
                    log_filterer=log_filterer,
            ) as ws:
                assert ws.logger is logger

        tcp_connector.assert_called_once_with(
            limit=1,
            ttl_dns_cache=10,
            use_dns_cache=False,
            ssl_context=http_settings.ssl,
            enable_cleanup_closed=http_settings.enable_cleanup_closed,
            force_close=http_settings.force_close_transports,
        )
        client_timeout.assert_called_once_with(
            total=http_settings.timeouts.total,
            connect=http_settings.timeouts.acquire_and_connect,
            sock_read=http_settings.timeouts.request_socket_read,
            sock_connect=http_settings.timeouts.request_socket_connect,
        )
        client_session.assert_called_once_with(
            connector=tcp_connector(),
            connector_owner=True,
            raise_for_status=True,
            timeout=client_timeout(),
            trust_env=proxy_settings.trust_env,
            version=aiohttp.HttpVersion11,
            ws_response_class=shard._GatewayTransport,
        )
        mock_client_session.ws_connect.assert_called_once_with(
            max_msg_size=0,
            proxy=proxy_settings.url,
            proxy_headers=proxy_settings.headers,
            url="https://some.url",
        )
        mock_client_session.assert_used_once()
        mock_websocket.assert_used_once()
        sleep.assert_awaited_once_with(0.25)