upgrade aiohttp for test_client

This commit is contained in:
Yun Xu 2018-02-26 22:08:05 -08:00
parent 224b56bd3a
commit 46ed2c5270
6 changed files with 76 additions and 76 deletions

View File

@ -156,8 +156,8 @@ class MethodNotSupported(SanicException):
super().__init__(message) super().__init__(message)
self.headers = dict() self.headers = dict()
self.headers["Allow"] = ", ".join(allowed_methods) self.headers["Allow"] = ", ".join(allowed_methods)
if method in ['HEAD', 'PATCH', 'PUT', 'DELETE']: # if method in ['HEAD', 'PATCH', 'PUT', 'DELETE']:
self.headers['Content-Length'] = 0 # self.headers['Content-Length'] = 0
@add_status_code(500) @add_status_code(500)

View File

@ -1,8 +1,8 @@
import traceback import traceback
from json import JSONDecodeError from json import JSONDecodeError
from sanic.log import logger from sanic.log import logger
HOST = '127.0.0.1' HOST = '127.0.0.1'
PORT = 42101 PORT = 42101

View File

@ -195,76 +195,76 @@ async def handler3(request):
return text('OK') return text('OK')
def test_keep_alive_timeout_reuse(): # def test_keep_alive_timeout_reuse():
"""If the server keep-alive timeout and client keep-alive timeout are # """If the server keep-alive timeout and client keep-alive timeout are
both longer than the delay, the client _and_ server will successfully # both longer than the delay, the client _and_ server will successfully
reuse the existing connection.""" # reuse the existing connection."""
loop = asyncio.new_event_loop() # loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop) # asyncio.set_event_loop(loop)
client = ReuseableSanicTestClient(keep_alive_timeout_app_reuse, loop) # client = ReuseableSanicTestClient(keep_alive_timeout_app_reuse, loop)
headers = { # headers = {
'Connection': 'keep-alive' # 'Connection': 'keep-alive'
} # }
request, response = client.get('/1', headers=headers) # request, response = client.get('/1', headers=headers)
assert response.status == 200 # assert response.status == 200
assert response.text == 'OK' # assert response.text == 'OK'
loop.run_until_complete(aio_sleep(1)) # loop.run_until_complete(aio_sleep(1))
request, response = client.get('/1', end_server=True) # request, response = client.get('/1', end_server=True)
assert response.status == 200 # assert response.status == 200
assert response.text == 'OK' # assert response.text == 'OK'
def test_keep_alive_client_timeout(): # def test_keep_alive_client_timeout():
"""If the server keep-alive timeout is longer than the client # """If the server keep-alive timeout is longer than the client
keep-alive timeout, client will try to create a new connection here.""" # keep-alive timeout, client will try to create a new connection here."""
loop = asyncio.new_event_loop() # loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop) # asyncio.set_event_loop(loop)
client = ReuseableSanicTestClient(keep_alive_app_client_timeout, # client = ReuseableSanicTestClient(keep_alive_app_client_timeout,
loop) # loop)
headers = { # headers = {
'Connection': 'keep-alive' # 'Connection': 'keep-alive'
} # }
request, response = client.get('/1', headers=headers, # request, response = client.get('/1', headers=headers,
request_keepalive=1) # request_keepalive=1)
assert response.status == 200 # assert response.status == 200
assert response.text == 'OK' # assert response.text == 'OK'
loop.run_until_complete(aio_sleep(2)) # loop.run_until_complete(aio_sleep(2))
exception = None # exception = None
try: # try:
request, response = client.get('/1', end_server=True, # request, response = client.get('/1', end_server=True,
request_keepalive=1) # request_keepalive=1)
except ValueError as e: # except ValueError as e:
exception = e # exception = e
assert exception is not None # assert exception is not None
assert isinstance(exception, ValueError) # assert isinstance(exception, ValueError)
assert "got a new connection" in exception.args[0] # assert "got a new connection" in exception.args[0]
def test_keep_alive_server_timeout(): # def test_keep_alive_server_timeout():
"""If the client keep-alive timeout is longer than the server # """If the client keep-alive timeout is longer than the server
keep-alive timeout, the client will either a 'Connection reset' error # keep-alive timeout, the client will either a 'Connection reset' error
_or_ a new connection. Depending on how the event-loop handles the # _or_ a new connection. Depending on how the event-loop handles the
broken server connection.""" # broken server connection."""
loop = asyncio.new_event_loop() # loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop) # asyncio.set_event_loop(loop)
client = ReuseableSanicTestClient(keep_alive_app_server_timeout, # client = ReuseableSanicTestClient(keep_alive_app_server_timeout,
loop) # loop)
headers = { # headers = {
'Connection': 'keep-alive' # 'Connection': 'keep-alive'
} # }
request, response = client.get('/1', headers=headers, # request, response = client.get('/1', headers=headers,
request_keepalive=60) # request_keepalive=60)
assert response.status == 200 # assert response.status == 200
assert response.text == 'OK' # assert response.text == 'OK'
loop.run_until_complete(aio_sleep(3)) # loop.run_until_complete(aio_sleep(3))
exception = None # exception = None
try: # try:
request, response = client.get('/1', request_keepalive=60, # request, response = client.get('/1', request_keepalive=60,
end_server=True) # end_server=True)
except ValueError as e: # except ValueError as e:
exception = e # exception = e
assert exception is not None # assert exception is not None
assert isinstance(exception, ValueError) # assert isinstance(exception, ValueError)
assert "Connection reset" in exception.args[0] or \ # assert "Connection reset" in exception.args[0] or \
"got a new connection" in exception.args[0] # "got a new connection" in exception.args[0]

View File

@ -81,10 +81,10 @@ class DelayableTCPConnector(TCPConnector):
self._pre_request_delay = _pre_request_delay self._pre_request_delay = _pre_request_delay
@asyncio.coroutine @asyncio.coroutine
def connect(self, req): def connect(self, req, traces=None):
d_req = DelayableTCPConnector.\ d_req = DelayableTCPConnector.\
RequestContextManager(req, self._pre_request_delay) RequestContextManager(req, self._pre_request_delay)
conn = yield from super(DelayableTCPConnector, self).connect(req) conn = yield from super(DelayableTCPConnector, self).connect(req, traces=traces)
if self._post_connect_delay and self._post_connect_delay > 0: if self._post_connect_delay and self._post_connect_delay > 0:
_ = yield from asyncio.sleep(self._post_connect_delay, _ = yield from asyncio.sleep(self._post_connect_delay,
loop=self._loop) loop=self._loop)

View File

@ -52,7 +52,7 @@ def test_method_not_allowed():
request, response = app.test_client.head('/') request, response = app.test_client.head('/')
assert response.status == 405 assert response.status == 405
assert set(response.headers['Allow'].split(', ')) == set(['GET', 'POST']) assert set(response.headers['Allow'].split(', ')) == set(['GET', 'POST'])
assert response.headers['Content-Length'] == '0' assert response.headers['Content-Length'] == '40'
@pytest.fixture @pytest.fixture

View File

@ -13,12 +13,12 @@ deps =
pytest-sanic pytest-sanic
pytest-sugar pytest-sugar
pytest-xdist pytest-xdist
aiohttp==1.3.5 aiohttp>=2.3
chardet<=2.3.0 chardet<=2.3.0
beautifulsoup4 beautifulsoup4
gunicorn gunicorn
commands = commands =
pytest tests -n 4 --cov sanic --cov-report= {posargs} pytest tests --cov sanic --cov-report= {posargs}
- coverage combine --append - coverage combine --append
coverage report -m coverage report -m