Here are the examples of the python api aiohttp.helpers.create_future taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
75 Examples
3
Example 1
@asyncio.coroutine
def test_text(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
return fut
response.headers = {
'Content-Type': 'application/json;charset=cp1251'}
content = response.content = mock.Mock()
content.read.side_effect = side_effect
res = yield from response.text()
assert res == '{"тест": "пройден"}'
assert response._connection is None
3
Example 2
@asyncio.coroutine
def test_receive_cancelled(make_request, loop, reader):
req = make_request('GET', '/')
ws = WebSocketResponse()
yield from ws.prepare(req)
res = helpers.create_future(loop)
res.set_exception(asyncio.CancelledError())
reader.read = make_mocked_coro(res)
with pytest.raises(asyncio.CancelledError):
yield from ws.receive()
3
Example 3
def test_read_nowait_waiter(self):
stream = self._make_one()
stream.feed_data(b'line\n')
stream._waiter = helpers.create_future(self.loop)
self.assertRaises(RuntimeError, stream.read_nowait)
3
Example 4
@asyncio.coroutine
def test_connect_with_limit_release_waiters(loop):
def check_with_exc(err):
conn = aiohttp.BaseConnector(limit=1, loop=loop)
conn._create_connection = unittest.mock.Mock()
conn._create_connection.return_value = \
helpers.create_future(loop)
conn._create_connection.return_value.set_exception(err)
with pytest.raises(Exception):
req = unittest.mock.Mock()
yield from conn.connect(req)
key = (req.host, req.port, req.ssl)
assert not conn._waiters[key]
check_with_exc(OSError(1, 'permission error'))
check_with_exc(RuntimeError())
check_with_exc(asyncio.TimeoutError())
3
Example 5
@asyncio.coroutine
def test_read_and_release_connection_with_error(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
content = response.content = mock.Mock()
content.read.return_value = helpers.create_future(loop)
content.read.return_value.set_exception(ValueError)
with pytest.raises(ValueError):
yield from response.read()
assert response._closed
3
Example 6
@asyncio.coroutine
def test_connect_timeout(loop):
conn = aiohttp.BaseConnector(loop=loop)
conn._create_connection = unittest.mock.Mock()
conn._create_connection.return_value = helpers.create_future(loop)
conn._create_connection.return_value.set_exception(
asyncio.TimeoutError())
with pytest.raises(aiohttp.ClientTimeoutError):
req = unittest.mock.Mock()
yield from conn.connect(req)
3
Example 7
def test_static_handle_again(loop):
fake_loop = mock.Mock()
with mock.patch('aiohttp.file_sender.os') as m_os:
out_fd = 30
in_fd = 31
fut = helpers.create_future(loop)
m_os.sendfile.side_effect = BlockingIOError()
file_sender = FileSender()
file_sender._sendfile_cb(fut, out_fd, in_fd, 0, 100, fake_loop, False)
m_os.sendfile.assert_called_with(out_fd, in_fd, 0, 100)
assert not fut.done()
fake_loop.add_writer.assert_called_with(out_fd,
file_sender._sendfile_cb,
fut, out_fd, in_fd, 0, 100,
fake_loop, True)
assert not fake_loop.remove_writer.called
3
Example 8
def test_create_future_with_new_loop():
# We should use the new create_future() if it's available.
mock_loop = mock.Mock()
expected = 'hello'
mock_loop.create_future.return_value = expected
assert expected == helpers.create_future(mock_loop)
3
Example 9
def test_handle_request_futures(self):
def wsgi_app(env, start):
start('200 OK', [('Content-Type', 'text/plain')])
f1 = helpers.create_future(self.loop)
f1.set_result(b'data')
fut = helpers.create_future(self.loop)
fut.set_result([f1])
return fut
srv = self._make_srv(wsgi_app)
self.loop.run_until_complete(
srv.handle_request(self.message, self.payload))
content = b''.join(
[c[1][0] for c in self.writer.write.mock_calls])
self.assertTrue(content.startswith(b'HTTP/1.0 200 OK'))
self.assertTrue(content.endswith(b'data'))
3
Example 10
def test_static_handle_exception(loop):
fake_loop = mock.Mock()
with mock.patch('aiohttp.file_sender.os') as m_os:
out_fd = 30
in_fd = 31
fut = helpers.create_future(loop)
exc = OSError()
m_os.sendfile.side_effect = exc
file_sender = FileSender()
file_sender._sendfile_cb(fut, out_fd, in_fd, 0, 100, fake_loop, False)
m_os.sendfile.assert_called_with(out_fd, in_fd, 0, 100)
assert fut.done()
assert exc is fut.exception()
assert not fake_loop.add_writer.called
assert not fake_loop.remove_writer.called
3
Example 11
def test___repr__waiter(self):
stream = self._make_one()
stream._waiter = helpers.create_future(self.loop)
self.assertRegex(
repr(stream),
"<StreamReader w=<Future pending[\S ]*>>")
stream._waiter.set_result(None)
self.loop.run_until_complete(stream._waiter)
stream._waiter = None
self.assertEqual("<StreamReader>", repr(stream))
3
Example 12
@asyncio.coroutine
def test_receive_client_disconnected(make_request, loop, reader):
req = make_request('GET', '/')
ws = WebSocketResponse()
yield from ws.prepare(req)
exc = errors.ClientDisconnectedError()
res = helpers.create_future(loop)
res.set_exception(exc)
reader.read = make_mocked_coro(res)
msg = yield from ws.receive()
assert ws.closed
assert msg.type == WSMsgType.CLOSE
assert msg.type is msg.tp
assert msg.data is None
assert ws.exception() is None
3
Example 13
@asyncio.coroutine
def test_release(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
fut = helpers.create_future(loop)
fut.set_result(b'')
content = response.content = mock.Mock()
content.readany.return_value = fut
yield from response.release()
assert response._connection is None
3
Example 14
@asyncio.coroutine
def test_connect_oserr(loop):
conn = aiohttp.BaseConnector(loop=loop)
conn._create_connection = unittest.mock.Mock()
conn._create_connection.return_value = helpers.create_future(loop)
err = OSError(1, 'permission error')
conn._create_connection.return_value.set_exception(err)
with pytest.raises(aiohttp.ClientOSError) as ctx:
req = unittest.mock.Mock()
yield from conn.connect(req)
assert 1 == ctx.value.errno
assert ctx.value.strerror.startswith('Cannot connect to')
assert ctx.value.strerror.endswith('[permission error]')
3
Example 15
@asyncio.coroutine
def test_text_after_read(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
return fut
response.headers = {
'Content-Type': 'application/json;charset=cp1251'}
content = response.content = mock.Mock()
content.read.side_effect = side_effect
res = yield from response.text()
assert res == '{"тест": "пройден"}'
assert response._connection is None
3
Example 16
Project: aiohttp
License: View license
Source File: test_server.py
Function: test_keep_alive_close_existing
License: View license
Source File: test_server.py
Function: test_keep_alive_close_existing
def test_keep_alive_close_existing(make_srv, loop):
transport = mock.Mock()
srv = make_srv(keepalive_timeout=15)
srv.connection_made(transport)
srv.handle_request = mock.Mock()
srv.handle_request.return_value = helpers.create_future(loop)
srv.handle_request.return_value.set_result(1)
srv.data_received(
b'GET / HTTP/1.0\r\n'
b'HOST: example.com\r\n\r\n')
loop.run_until_complete(srv._request_handler)
assert transport.close.called
3
Example 17
def test_create_future_with_old_loop(mocker):
MockFuture = mocker.patch('asyncio.Future')
# The old loop (without create_future()) should just have a Future object
# wrapped around it.
mock_loop = mock.Mock()
del mock_loop.create_future
expected = 'hello'
MockFuture.return_value = expected
future = helpers.create_future(mock_loop)
MockFuture.assert_called_with(loop=mock_loop)
assert expected == future
3
Example 18
def test__sendfile_cb_return_on_cancelling(loop):
fake_loop = mock.Mock()
with mock.patch('aiohttp.file_sender.os') as m_os:
out_fd = 30
in_fd = 31
fut = helpers.create_future(loop)
fut.cancel()
file_sender = FileSender()
file_sender._sendfile_cb(fut, out_fd, in_fd, 0, 100, fake_loop, False)
assert fut.done()
assert not fake_loop.add_writer.called
assert not fake_loop.remove_writer.called
assert not m_os.sendfile.called
3
Example 19
@asyncio.coroutine
def test_receive_timeouterror(make_request, loop, reader):
req = make_request('GET', '/')
ws = WebSocketResponse()
yield from ws.prepare(req)
res = helpers.create_future(loop)
res.set_exception(asyncio.TimeoutError())
reader.read = make_mocked_coro(res)
with pytest.raises(asyncio.TimeoutError):
yield from ws.receive()
3
Example 20
@asyncio.coroutine
def test_text_detect_encoding(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
return fut
response.headers = {'Content-Type': 'text/plain'}
content = response.content = mock.Mock()
content.read.side_effect = side_effect
yield from response.read()
res = yield from response.text()
assert res == '{"тест": "пройден"}'
assert response._connection is None
3
Example 21
def test_static_handle_eof(loop):
fake_loop = mock.Mock()
with mock.patch('aiohttp.file_sender.os') as m_os:
out_fd = 30
in_fd = 31
fut = helpers.create_future(loop)
m_os.sendfile.return_value = 0
file_sender = FileSender()
file_sender._sendfile_cb(fut, out_fd, in_fd, 0, 100, fake_loop, False)
m_os.sendfile.assert_called_with(out_fd, in_fd, 0, 100)
assert fut.done()
assert fut.result() is None
assert not fake_loop.add_writer.called
assert not fake_loop.remove_writer.called
3
Example 22
@asyncio.coroutine
def test_read_and_release_connection(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result(b'payload')
return fut
content = response.content = mock.Mock()
content.read.side_effect = side_effect
res = yield from response.read()
assert res == b'payload'
assert response._connection is None
3
Example 23
@asyncio.coroutine
def test_app_register_coro(loop):
app = web.Application(loop=loop)
fut = helpers.create_future(loop)
@asyncio.coroutine
def cb(app):
yield from asyncio.sleep(0.001, loop=loop)
fut.set_result(123)
app.on_cleanup.append(cb)
yield from app.cleanup()
assert fut.done()
assert 123 == fut.result()
3
Example 24
@asyncio.coroutine
def test_receive_exc_in_reader(make_request, loop, reader):
req = make_request('GET', '/')
ws = WebSocketResponse()
yield from ws.prepare(req)
exc = ValueError()
res = helpers.create_future(loop)
res.set_exception(exc)
reader.read = make_mocked_coro(res)
msg = yield from ws.receive()
assert msg.type == WSMsgType.ERROR
assert msg.type is msg.tp
assert msg.data is exc
assert ws.exception() is exc
3
Example 25
@asyncio.coroutine
def test_json(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
return fut
response.headers = {
'Content-Type': 'application/json;charset=cp1251'}
content = response.content = mock.Mock()
content.read.side_effect = side_effect
res = yield from response.json()
assert res == {'тест': 'пройден'}
assert response._connection is None
3
Example 26
@asyncio.coroutine
def test_ws_connect_with_origin(key_data, loop):
resp = mock.Mock()
resp.status = 403
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
origin = 'https://example.org/page.html'
with pytest.raises(errors.WSServerHandshakeError):
yield from aiohttp.ws_connect('http://test.org',
loop=loop,
origin=origin)
assert hdrs.ORIGIN in m_req.call_args[1]["headers"]
assert m_req.call_args[1]["headers"][hdrs.ORIGIN] == origin
0
Example 27
@asyncio.coroutine
def test_ws_connect_custom_response(loop, ws_key, key_data):
class CustomResponse(ClientWebSocketResponse):
def read(self, decode=False):
return 'customized!'
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
res = yield from aiohttp.ws_connect(
'http://test.org',
ws_response_class=CustomResponse,
loop=loop)
assert res.read() == 'customized!'
0
Example 28
@asyncio.coroutine
def test_close_from_server(loop, test_client):
closed = helpers.create_future(loop)
@asyncio.coroutine
def handler(request):
ws = web.WebSocketResponse()
yield from ws.prepare(request)
try:
yield from ws.receive_bytes()
yield from ws.close()
finally:
closed.set_result(1)
return ws
app = web.Application(loop=loop)
app.router.add_route('GET', '/', handler)
client = yield from test_client(app)
resp = yield from client.ws_connect('/')
resp.send_bytes(b'ask')
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.CLOSE
assert resp.closed
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.CLOSED
yield from closed
0
Example 29
@asyncio.coroutine
def test_ws_connect_global_loop(loop, ws_key, key_data):
asyncio.set_event_loop(loop)
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
resp = yield from aiohttp.ws_connect('http://test.org')
assert resp._loop is loop
asyncio.set_event_loop(None)
0
Example 30
@asyncio.coroutine
def test_ws_connect_err_status(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 500
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
with pytest.raises(errors.WSServerHandshakeError) as ctx:
yield from aiohttp.ws_connect('http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
assert ctx.value.message == 'Invalid response status'
0
Example 31
@asyncio.coroutine
def test_data_stream_exc_chain(loop):
fut = helpers.create_future(loop)
def gen():
yield from fut
req = ClientRequest('POST', URL('http://python.org/'),
data=gen(), loop=loop)
inner_exc = ValueError()
@asyncio.coroutine
def exc():
yield from asyncio.sleep(0.01, loop=loop)
fut.set_exception(inner_exc)
helpers.ensure_future(exc(), loop=loop)
protocol = mock.Mock()
resp = req.send(mock.Mock(), protocol)
connection = mock.Mock()
resp._connection = connection
yield from req._writer
assert connection.close.called
assert protocol.set_exception.called
outer_exc = protocol.set_exception.call_args[0][0]
assert isinstance(outer_exc, aiohttp.ClientRequestError)
assert inner_exc is outer_exc.__context__
assert inner_exc is outer_exc.__cause__
yield from req.close()
0
Example 32
@asyncio.coroutine
def test_text_custom_encoding(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
return fut
response.headers = {
'Content-Type': 'application/json'}
content = response.content = mock.Mock()
content.read.side_effect = side_effect
response._get_encoding = mock.Mock()
res = yield from response.text(encoding='cp1251')
assert res == '{"тест": "пройден"}'
assert response._connection is None
assert not response._get_encoding.called
0
Example 33
@asyncio.coroutine
def test_ws_connect_err_upgrade(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: 'test',
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
with pytest.raises(errors.WSServerHandshakeError) as ctx:
yield from aiohttp.ws_connect('http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
assert ctx.value.message == 'Invalid upgrade header'
0
Example 34
@asyncio.coroutine
def test_ws_connect_err_conn(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: 'close',
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
with pytest.raises(errors.WSServerHandshakeError) as ctx:
yield from aiohttp.ws_connect('http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
assert ctx.value.message == 'Invalid connection header'
0
Example 35
@asyncio.coroutine
def test_ws_connect_err_challenge(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: 'asdfasdfasdfasdfasdfasdf'
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
with pytest.raises(errors.WSServerHandshakeError) as ctx:
yield from aiohttp.ws_connect('http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
assert ctx.value.message == 'Invalid challenge response'
0
Example 36
def test_POST_STREAM_DATA(self):
with run_server(self.loop, router=Functional) as httpd:
url = httpd.url('method', 'post')
here = os.path.dirname(__file__)
fname = os.path.join(here, 'sample.key')
with open(fname, 'rb') as f:
data = f.read()
fut = helpers.create_future(self.loop)
@asyncio.coroutine
def stream():
yield from fut
yield data
self.loop.call_later(0.01, fut.set_result, True)
r = self.loop.run_until_complete(
client.request(
'post', url, data=stream(),
headers={'Content-Length': str(len(data))},
loop=self.loop))
content = self.loop.run_until_complete(r.json())
r.close()
self.assertEqual(str(len(data)),
content['headers']['Content-Length'])
self.assertEqual('application/octet-stream',
content['headers']['Content-Type'])
0
Example 37
@asyncio.coroutine
def test_close(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.WebSocketWriter') as WebSocketWriter:
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
writer = WebSocketWriter.return_value = mock.Mock()
reader = mock.Mock()
resp.connection.reader.set_parser.return_value = reader
resp = yield from aiohttp.ws_connect('http://test.org',
loop=loop)
assert not resp.closed
msg = aiohttp.WSMessage(aiohttp.MsgType.CLOSE, b'', b'')
reader.read.return_value = helpers.create_future(loop)
reader.read.return_value.set_result(msg)
res = yield from resp.close()
writer.close.assert_called_with(1000, b'')
assert resp.closed
assert res
assert resp.exception() is None
# idempotent
res = yield from resp.close()
assert not res
assert writer.close.call_count == 1
0
Example 38
@asyncio.coroutine
def test_close_exc(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.WebSocketWriter') as WebSocketWriter:
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
WebSocketWriter.return_value = mock.Mock()
reader = mock.Mock()
resp.connection.reader.set_parser.return_value = reader
resp = yield from aiohttp.ws_connect('http://test.org',
loop=loop)
assert not resp.closed
exc = ValueError()
reader.read.return_value = helpers.create_future(loop)
reader.read.return_value.set_exception(exc)
yield from resp.close()
assert resp.closed
assert resp.exception() is exc
0
Example 39
@asyncio.coroutine
def test_close_exc2(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.WebSocketWriter') as WebSocketWriter:
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
writer = WebSocketWriter.return_value = mock.Mock()
resp.connection.reader.set_parser.return_value = mock.Mock()
resp = yield from aiohttp.ws_connect('http://test.org',
loop=loop)
assert not resp.closed
exc = ValueError()
writer.close.side_effect = exc
yield from resp.close()
assert resp.closed
assert resp.exception() is exc
resp._closed = False
writer.close.side_effect = asyncio.CancelledError()
with pytest.raises(asyncio.CancelledError):
yield from resp.close()
0
Example 40
@asyncio.coroutine
def test_send_data_after_close(ws_key, key_data, loop):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.WebSocketWriter') as WebSocketWriter:
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
WebSocketWriter.return_value = mock.Mock()
resp = yield from aiohttp.ws_connect('http://test.org',
loop=loop)
resp._closed = True
pytest.raises(RuntimeError, resp.ping)
pytest.raises(RuntimeError, resp.pong)
pytest.raises(RuntimeError, resp.send_str, 's')
pytest.raises(RuntimeError, resp.send_bytes, b'b')
pytest.raises(RuntimeError, resp.send_json, {})
0
Example 41
@asyncio.coroutine
def test_send_data_type_errors(ws_key, key_data, loop):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.WebSocketWriter') as WebSocketWriter:
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
WebSocketWriter.return_value = mock.Mock()
resp = yield from aiohttp.ws_connect('http://test.org',
loop=loop)
pytest.raises(TypeError, resp.send_str, b's')
pytest.raises(TypeError, resp.send_bytes, 'b')
pytest.raises(TypeError, resp.send_json, set())
0
Example 42
@asyncio.coroutine
def test_json_override_encoding(loop):
response = ClientResponse('get', URL('http://def-cl-resp.org'))
response._post_init(loop)
def side_effect(*args, **kwargs):
fut = helpers.create_future(loop)
fut.set_result('{"тест": "пройден"}'.encode('cp1251'))
return fut
response.headers = {
'Content-Type': 'application/json;charset=utf8'}
content = response.content = mock.Mock()
content.read.side_effect = side_effect
response._get_encoding = mock.Mock()
res = yield from response.json(encoding='cp1251')
assert res == {'тест': 'пройден'}
assert response._connection is None
assert not response._get_encoding.called
0
Example 43
@asyncio.coroutine
def test_reader_read_exception(ws_key, key_data, loop):
hresp = mock.Mock()
hresp.status = 101
hresp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
}
with mock.patch('aiohttp.client.WebSocketWriter') as WebSocketWriter:
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(hresp)
WebSocketWriter.return_value = mock.Mock()
reader = mock.Mock()
hresp.connection.reader.set_parser.return_value = reader
resp = yield from aiohttp.ws_connect('http://test.org',
loop=loop)
exc = ValueError()
reader.read.return_value = helpers.create_future(loop)
reader.read.return_value.set_exception(exc)
msg = yield from resp.receive()
assert msg.type == aiohttp.MsgType.ERROR
assert msg.type is msg.tp
assert resp.exception() is exc
0
Example 44
@asyncio.coroutine
def test_ws_connect_close_resp_on_err(loop, ws_key, key_data):
resp = mock.Mock()
resp.status = 500
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
with pytest.raises(errors.WSServerHandshakeError):
yield from aiohttp.ws_connect('http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
resp.close.assert_called_with()
0
Example 45
@asyncio.coroutine
def test_ws_connect(ws_key, loop, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
hdrs.SEC_WEBSOCKET_PROTOCOL: 'chat'
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
res = yield from aiohttp.ws_connect(
'http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
assert isinstance(res, ClientWebSocketResponse)
assert res.protocol == 'chat'
assert hdrs.ORIGIN not in m_req.call_args[1]["headers"]
0
Example 46
@asyncio.coroutine
def test_ws_connect_non_overlapped_protocols(ws_key, loop, key_data):
resp = mock.Mock()
resp.status = 101
resp.headers = {
hdrs.UPGRADE: hdrs.WEBSOCKET,
hdrs.CONNECTION: hdrs.UPGRADE,
hdrs.SEC_WEBSOCKET_ACCEPT: ws_key,
hdrs.SEC_WEBSOCKET_PROTOCOL: 'other,another'
}
with mock.patch('aiohttp.client.os') as m_os:
with mock.patch('aiohttp.client.ClientSession.get') as m_req:
m_os.urandom.return_value = key_data
m_req.return_value = helpers.create_future(loop)
m_req.return_value.set_result(resp)
res = yield from aiohttp.ws_connect(
'http://test.org',
protocols=('t1', 't2', 'chat'),
loop=loop)
assert res.protocol is None
0
Example 47
@contextlib.contextmanager
def run_server(loop, *, listen_addr=('127.0.0.1', 0),
use_ssl=False, router=None):
properties = {}
transports = []
class HttpRequestHandler:
def __init__(self, addr):
host, port = addr
self.host = host
self.port = port
self.address = addr
self._url = '{}://{}:{}'.format(
'https' if use_ssl else 'http', host, port)
def __getitem__(self, key):
return properties[key]
def __setitem__(self, key, value):
properties[key] = value
def url(self, *suffix):
return urllib.parse.urljoin(
self._url, '/'.join(str(s) for s in suffix))
class TestHttpServer(server.ServerHttpProtocol):
def connection_made(self, transport):
transports.append(transport)
super().connection_made(transport)
def handle_request(self, message, payload):
if properties.get('close', False):
return
for hdr, val in message.headers.items():
if (hdr.upper() == 'EXPECT') and (val == '100-continue'):
self.transport.write(b'HTTP/1.0 100 Continue\r\n\r\n')
break
body = yield from payload.read()
rob = router(
self, properties, self.transport, message, body)
rob.dispatch()
if use_ssl:
here = os.path.join(os.path.dirname(__file__), '..', 'tests')
keyfile = os.path.join(here, 'sample.key')
certfile = os.path.join(here, 'sample.crt')
sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
sslcontext.load_cert_chain(certfile, keyfile)
else:
sslcontext = None
def run(loop, fut):
thread_loop = asyncio.new_event_loop()
asyncio.set_event_loop(thread_loop)
host, port = listen_addr
server_coroutine = thread_loop.create_server(
lambda: TestHttpServer(keep_alive=0.5),
host, port, ssl=sslcontext)
server = thread_loop.run_until_complete(server_coroutine)
waiter = helpers.create_future(thread_loop)
loop.call_soon_threadsafe(
fut.set_result, (thread_loop, waiter,
server.sockets[0].getsockname()))
try:
thread_loop.run_until_complete(waiter)
finally:
# call pending connection_made if present
run_briefly(thread_loop)
# close opened transports
for tr in transports:
tr.close()
run_briefly(thread_loop) # call close callbacks
server.close()
thread_loop.stop()
thread_loop.close()
gc.collect()
fut = helpers.create_future(loop)
server_thread = threading.Thread(target=run, args=(loop, fut))
server_thread.start()
thread_loop, waiter, addr = loop.run_until_complete(fut)
try:
yield HttpRequestHandler(addr)
finally:
thread_loop.call_soon_threadsafe(waiter.set_result, None)
server_thread.join()
0
Example 48
@asyncio.coroutine
def test_data_stream_exc(loop):
fut = helpers.create_future(loop)
def gen():
yield b'binary data'
yield from fut
req = ClientRequest(
'POST', URL('http://python.org/'), data=gen(), loop=loop)
assert req.chunked
assert inspect.isgenerator(req.body)
assert req.headers['TRANSFER-ENCODING'] == 'chunked'
@asyncio.coroutine
def exc():
yield from asyncio.sleep(0.01, loop=loop)
fut.set_exception(ValueError)
helpers.ensure_future(exc(), loop=loop)
protocol = mock.Mock()
resp = req.send(mock.Mock(), protocol)
connection = mock.Mock()
resp._connection = connection
yield from req._writer
assert connection.close.called
assert protocol.set_exception.called
yield from req.close()
0
Example 49
Project: aiohttp
License: View license
Source File: test_client_ws_functional.py
Function: test_ping_pong
License: View license
Source File: test_client_ws_functional.py
Function: test_ping_pong
@asyncio.coroutine
def test_ping_pong(loop, test_client):
closed = helpers.create_future(loop)
@asyncio.coroutine
def handler(request):
ws = web.WebSocketResponse()
yield from ws.prepare(request)
msg = yield from ws.receive_bytes()
ws.ping()
ws.send_bytes(msg+b'/answer')
try:
yield from ws.close()
finally:
closed.set_result(1)
return ws
app = web.Application(loop=loop)
app.router.add_route('GET', '/', handler)
client = yield from test_client(app)
resp = yield from client.ws_connect('/')
resp.ping()
resp.send_bytes(b'ask')
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.BINARY
assert msg.data == b'ask/answer'
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.CLOSE
yield from resp.close()
yield from closed
0
Example 50
@asyncio.coroutine
def test_ping_pong_manual(loop, test_client):
closed = helpers.create_future(loop)
@asyncio.coroutine
def handler(request):
ws = web.WebSocketResponse()
yield from ws.prepare(request)
msg = yield from ws.receive_bytes()
ws.ping()
ws.send_bytes(msg+b'/answer')
try:
yield from ws.close()
finally:
closed.set_result(1)
return ws
app = web.Application(loop=loop)
app.router.add_route('GET', '/', handler)
client = yield from test_client(app)
resp = yield from client.ws_connect('/', autoping=False)
resp.ping()
resp.send_bytes(b'ask')
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.PONG
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.PING
resp.pong()
msg = yield from resp.receive()
assert msg.data == b'ask/answer'
msg = yield from resp.receive()
assert msg.type == aiohttp.WSMsgType.CLOSE
yield from closed