fix async run, add tests

This commit is contained in:
Raphael Deem 2017-01-28 15:26:44 -08:00
parent 7257e5794f
commit 41da793b5a
4 changed files with 46 additions and 1 deletions

View File

@ -297,7 +297,8 @@ def serve(host, port, request_handler, error_handler, before_start=None,
:param protocol: Subclass of asyncio protocol class
:return: Nothing
"""
loop = async_loop.new_event_loop()
loop = loop or async_loop.new_event_loop()
asyncio.set_event_loop_policy(async_loop.EventLoopPolicy())
asyncio.set_event_loop(loop)
if debug:

25
tests/test_async_run.py Normal file
View File

@ -0,0 +1,25 @@
from sanic import Sanic
from sanic.response import json
import asyncio
import requests
from threading import Thread
import pytest
import sys
@pytest.mark.skipif(sys.version_info < (3, 6),
reason="fails on python 3.5 with travis")
def test_async_run():
app = Sanic(__name__)
@app.route("/")
async def test(request):
return json({"answer": "42"})
server = app.create_server(host="0.0.0.0", port=8001)
task = asyncio.ensure_future(server)
loop = asyncio.get_event_loop()
t = Thread(target=loop.run_forever)
t.start()
res = requests.get('http://localhost:8001')
loop.stop()
assert res.json()['answer'] == '42'

18
tests/test_loop_policy.py Normal file
View File

@ -0,0 +1,18 @@
from sanic import Sanic
from sanic.response import text
from sanic.utils import sanic_endpoint_test
import asyncio
import uvloop
def test_loop_policy():
app = Sanic('test_loop_policy')
@app.route('/')
def test(request):
return text("OK")
server = app.create_server()
request, response = sanic_endpoint_test(app)
assert isinstance(asyncio.get_event_loop_policy(),
uvloop.EventLoopPolicy)

View File

@ -14,6 +14,7 @@ deps =
aiohttp
pytest
beautifulsoup4
requests
commands =
pytest tests {posargs}