a15ee3ad06
Before fix, it raises error like: ``` tests/test_utils.py F ================================= FAILURES ================================= ______________________________ test_redirect _______________________________ app = <sanic.sanic.Sanic object at 0x1045fda20>, method = 'get', uri = '/1', gather_request = True, debug = False server_kwargs = {}, request_args = (), request_kwargs = {} _collect_request = <function sanic_endpoint_test.<locals>._collect_request at 0x1045ec950> _collect_response = <function sanic_endpoint_test.<locals>._collect_response at 0x1045ec7b8> def sanic_endpoint_test(app, method='get', uri='/', gather_request=True, debug=False, server_kwargs={}, *request_args, **request_kwargs): results = [] exceptions = [] if gather_request: def _collect_request(request): results.append(request) app.request_middleware.appendleft(_collect_request) async def _collect_response(sanic, loop): try: response = await local_request(method, uri, *request_args, **request_kwargs) results.append(response) except Exception as e: exceptions.append(e) app.stop() app.run(host=HOST, debug=debug, port=PORT, after_start=_collect_response, **server_kwargs) if exceptions: raise ValueError("Exception during request: {}".format(exceptions)) if gather_request: try: > request, response = results E ValueError: too many values to unpack (expected 2) sanic/utils.py:47: ValueError During handling of the above exception, another exception occurred: utils_app = <sanic.sanic.Sanic object at 0x1045fda20> def test_redirect(utils_app): """Test sanic_endpoint_test is working for redirection""" > request, response = sanic_endpoint_test(utils_app, uri='/1') tests/test_utils.py:33: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ app = <sanic.sanic.Sanic object at 0x1045fda20>, method = 'get', uri = '/1', gather_request = True, debug = False server_kwargs = {}, request_args = (), request_kwargs = {} _collect_request = <function sanic_endpoint_test.<locals>._collect_request at 0x1045ec950> _collect_response = <function sanic_endpoint_test.<locals>._collect_response at 0x1045ec7b8> def sanic_endpoint_test(app, method='get', uri='/', gather_request=True, debug=False, server_kwargs={}, *request_args, **request_kwargs): results = [] exceptions = [] if gather_request: def _collect_request(request): results.append(request) app.request_middleware.appendleft(_collect_request) async def _collect_response(sanic, loop): try: response = await local_request(method, uri, *request_args, **request_kwargs) results.append(response) except Exception as e: exceptions.append(e) app.stop() app.run(host=HOST, debug=debug, port=PORT, after_start=_collect_response, **server_kwargs) if exceptions: raise ValueError("Exception during request: {}".format(exceptions)) if gather_request: try: request, response = results return request, response except: raise ValueError( "Request and response object expected, got ({})".format( > results)) E ValueError: Request and response object expected, got ([{}, {}, {}, <ClientResponse(http://127.0.0.1:42101/3) [200 OK]> E <CIMultiDictProxy('Content-Type': 'text/plain; charset=utf-8', 'Content-Length': '2', 'Connection': 'keep-alive', 'Keep-Alive': 'timeout=1')> E ]) sanic/utils.py:52: ValueError ```
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
import aiohttp
|
|
from sanic.log import log
|
|
|
|
HOST = '127.0.0.1'
|
|
PORT = 42101
|
|
|
|
|
|
async def local_request(method, uri, cookies=None, *args, **kwargs):
|
|
url = 'http://{host}:{port}{uri}'.format(host=HOST, port=PORT, uri=uri)
|
|
log.info(url)
|
|
async with aiohttp.ClientSession(cookies=cookies) as session:
|
|
async with getattr(
|
|
session, method.lower())(url, *args, **kwargs) as response:
|
|
response.text = await response.text()
|
|
response.body = await response.read()
|
|
return response
|
|
|
|
|
|
def sanic_endpoint_test(app, method='get', uri='/', gather_request=True,
|
|
debug=False, server_kwargs={},
|
|
*request_args, **request_kwargs):
|
|
results = [None, None]
|
|
exceptions = []
|
|
|
|
if gather_request:
|
|
def _collect_request(request):
|
|
if results[0] is None:
|
|
results[0] = request
|
|
app.request_middleware.appendleft(_collect_request)
|
|
|
|
async def _collect_response(sanic, loop):
|
|
try:
|
|
response = await local_request(method, uri, *request_args,
|
|
**request_kwargs)
|
|
results[-1] = response
|
|
except Exception as e:
|
|
exceptions.append(e)
|
|
app.stop()
|
|
|
|
app.run(host=HOST, debug=debug, port=PORT,
|
|
after_start=_collect_response, **server_kwargs)
|
|
|
|
if exceptions:
|
|
raise ValueError("Exception during request: {}".format(exceptions))
|
|
|
|
if gather_request:
|
|
try:
|
|
request, response = results
|
|
return request, response
|
|
except:
|
|
raise ValueError(
|
|
"Request and response object expected, got ({})".format(
|
|
results))
|
|
else:
|
|
try:
|
|
return results[-1]
|
|
except:
|
|
raise ValueError(
|
|
"Request object expected, got ({})".format(results))
|