예제 #1
0
async def test_http_compression(auto_close, loop):
    session = aiohttp.ClientSession(loop=loop, auto_decompress=False)
    conn = AIOHttpConnection(session=session, loop=loop)
    with pytest.raises(UnicodeDecodeError) as excinfo:
        await conn.perform_request("GET", "index")
    assert str(excinfo.value).startswith("'utf-8' codec can't decode byte")
    await session.close()
async def test_custom_headers(auto_close, loop):
    conn = auto_close(
        AIOHttpConnection(headers={'X-Custom': 'value'}, loop=loop))
    assert conn.headers == {
        'Content-Type': 'application/json',
        'X-Custom': 'value'
    }
예제 #3
0
async def test_perform_connection_error(auto_close, loop):
    session = aiohttp.ClientSession(loop=loop)

    @asyncio.coroutine
    def request(*args, **kwargs):
        raise aiohttp.ClientError('Other')

    session._request = request

    conn = auto_close(
        AIOHttpConnection(session=session, loop=loop, use_ssl=True))
    with pytest.raises(ConnectionError):
        await conn.perform_request('HEAD', '/')
예제 #4
0
async def test_perform_request_bad_cert2(auto_close, loop):
    session = aiohttp.ClientSession(loop=loop)

    @asyncio.coroutine
    def request(*args, **kwargs):
        raise aiohttp.ClientError('SSL: CERTIFICATE_VERIFY_FAILED')

    session._request = request

    conn = auto_close(
        AIOHttpConnection(session=session, loop=loop, use_ssl=True))
    with pytest.raises(SSLError):
        await conn.perform_request('HEAD', '/')
예제 #5
0
async def test_perform_request_bad_cert(auto_close, loop):
    session = aiohttp.ClientSession(loop=loop)

    @asyncio.coroutine
    def request(*args, **kwargs):
        raise ssl.CertificateError()

    session._request = request

    conn = auto_close(
        AIOHttpConnection(session=session, loop=loop, use_ssl=True))
    with pytest.raises(SSLError):
        await conn.perform_request('HEAD', '/')
async def test_perform_request_ssl_error(auto_close, loop):
    for exc, expected in [
        (aiohttp.ClientConnectorCertificateError(mock.Mock(), mock.Mock()), SSLError),  # noqa
        (aiohttp.ClientConnectorSSLError(mock.Mock(), mock.Mock()), SSLError),
        (aiohttp.ClientSSLError(mock.Mock(), mock.Mock()), SSLError),
        (aiohttp.ClientError('Other'), ConnectionError),
        (asyncio.TimeoutError, ConnectionTimeout),
    ]:
        session = aiohttp.ClientSession(loop=loop)

        session._request = make_mocked_coro(raise_exception=exc)

        conn = auto_close(AIOHttpConnection(session=session, loop=loop,
                                            use_ssl=True))
        with pytest.raises(expected):
            await conn.perform_request('HEAD', '/')
예제 #7
0
async def test_explicit_session(auto_close, loop):
    session = aiohttp.ClientSession(loop=loop)
    conn = auto_close(AIOHttpConnection(session=session, loop=loop))
    assert conn.session is session
예제 #8
0
async def test_auth_invalid(loop):
    with pytest.raises(TypeError):
        AIOHttpConnection(http_auth=object(), loop=loop)
예제 #9
0
async def test_auth_basicauth(auto_close, loop):
    auth = aiohttp.BasicAuth('user', 'pass')
    conn = auto_close(AIOHttpConnection(http_auth=auth, loop=loop))
    assert conn.http_auth == auth
예제 #10
0
async def test_ssl_context(auto_close, loop):
    context = ssl.create_default_context()
    conn = auto_close(
        AIOHttpConnection(loop=loop, verify_certs=True, ssl_context=context)
    )
    assert conn.session.connector._ssl is context
예제 #11
0
async def test_auth_no_auth(auto_close, loop):
    conn = auto_close(AIOHttpConnection(loop=loop))
    assert conn.http_auth is None
예제 #12
0
async def test_default_headers(auto_close, loop):
    conn = auto_close(AIOHttpConnection(loop=loop))
    assert conn.headers == {'Content-Type': 'application/json'}
예제 #13
0
async def test_http_compression_headers(auto_close, loop):
        conn = auto_close(AIOHttpConnection(loop=loop, http_compress=True))
        assert conn.headers['Content-Encoding'] == 'gzip'
예제 #14
0
async def test_session_closed(loop):
    conn = AIOHttpConnection(loop=loop)
    await conn.close()
    assert conn.session.closed
예제 #15
0
async def test_explicit_session_not_closed(loop):
    session = aiohttp.ClientSession(loop=loop)
    conn = AIOHttpConnection(session=session, loop=loop)
    await conn.close()
    assert not conn.session.closed and not session.closed
예제 #16
0
async def test_default_session(auto_close, loop):
    conn = auto_close(AIOHttpConnection(loop=loop))
    assert isinstance(conn.session, aiohttp.ClientSession)