Merge pull request #369 from r0fls/fix-async-run
fix async run, add tests
This commit is contained in:
		| @@ -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
									
								
							
							
						
						
									
										25
									
								
								tests/test_async_run.py
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										18
									
								
								tests/test_loop_policy.py
									
									
									
									
									
										Normal 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) | ||||
		Reference in New Issue
	
	Block a user
	 Eli Uriegas
					Eli Uriegas