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' }
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', '/')
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', '/')
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', '/')
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
async def test_auth_invalid(loop): with pytest.raises(TypeError): AIOHttpConnection(http_auth=object(), loop=loop)
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
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
async def test_auth_no_auth(auto_close, loop): conn = auto_close(AIOHttpConnection(loop=loop)) assert conn.http_auth is None
async def test_default_headers(auto_close, loop): conn = auto_close(AIOHttpConnection(loop=loop)) assert conn.headers == {'Content-Type': 'application/json'}
async def test_http_compression_headers(auto_close, loop): conn = auto_close(AIOHttpConnection(loop=loop, http_compress=True)) assert conn.headers['Content-Encoding'] == 'gzip'
async def test_session_closed(loop): conn = AIOHttpConnection(loop=loop) await conn.close() assert conn.session.closed
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
async def test_default_session(auto_close, loop): conn = auto_close(AIOHttpConnection(loop=loop)) assert isinstance(conn.session, aiohttp.ClientSession)