sanic/tests/test_server_events.py

92 lines
2.4 KiB
Python
Raw Normal View History

import signal
import pytest
2018-03-15 21:28:52 -07:00
from sanic.testing import HOST, PORT
AVAILABLE_LISTENERS = [
2018-12-30 13:18:06 +02:00
"before_server_start",
"after_server_start",
"before_server_stop",
"after_server_stop",
]
2018-09-29 13:54:47 -04:00
skipif_no_alarm = pytest.mark.skipif(
2018-12-30 13:18:06 +02:00
not hasattr(signal, "SIGALRM"),
reason="SIGALRM is not implemented for this platform, we have to come "
"up with another timeout strategy to test these",
2018-09-29 13:54:47 -04:00
)
def create_listener(listener_name, in_list):
async def _listener(app, loop):
2018-12-30 13:18:06 +02:00
print("DEBUG MESSAGE FOR PYTEST for {}".format(listener_name))
in_list.insert(0, app.name + listener_name)
2018-12-30 13:18:06 +02:00
return _listener
def start_stop_app(random_name_app, **run_kwargs):
def stop_on_alarm(signum, frame):
2018-12-30 13:18:06 +02:00
raise KeyboardInterrupt("SIGINT for sanic to stop gracefully")
signal.signal(signal.SIGALRM, stop_on_alarm)
signal.alarm(1)
try:
2018-03-15 21:28:52 -07:00
random_name_app.run(HOST, PORT, **run_kwargs)
except KeyboardInterrupt:
pass
2018-09-29 13:54:47 -04:00
@skipif_no_alarm
2018-12-30 13:18:06 +02:00
@pytest.mark.parametrize("listener_name", AVAILABLE_LISTENERS)
2018-08-26 16:43:14 +02:00
def test_single_listener(app, listener_name):
"""Test that listeners on their own work"""
2018-08-26 16:43:14 +02:00
output = []
# Register listener
2018-12-30 13:18:06 +02:00
app.listener(listener_name)(create_listener(listener_name, output))
2018-08-26 16:43:14 +02:00
start_stop_app(app)
assert app.name + listener_name == output.pop()
2018-09-29 13:54:47 -04:00
@skipif_no_alarm
2018-12-30 13:18:06 +02:00
@pytest.mark.parametrize("listener_name", AVAILABLE_LISTENERS)
2018-08-26 16:43:14 +02:00
def test_register_listener(app, listener_name):
"""
Test that listeners on their own work with
app.register_listener method
"""
2018-08-26 16:43:14 +02:00
output = []
# Register listener
listener = create_listener(listener_name, output)
2018-09-29 13:54:47 -04:00
app.register_listener(listener, event=listener_name)
2018-08-26 16:43:14 +02:00
start_stop_app(app)
assert app.name + listener_name == output.pop()
2018-09-29 13:54:47 -04:00
@skipif_no_alarm
2018-08-26 16:43:14 +02:00
def test_all_listeners(app):
output = []
for listener_name in AVAILABLE_LISTENERS:
listener = create_listener(listener_name, output)
2018-08-26 16:43:14 +02:00
app.listener(listener_name)(listener)
start_stop_app(app)
for listener_name in AVAILABLE_LISTENERS:
2018-08-26 16:43:14 +02:00
assert app.name + listener_name == output.pop()
2017-08-08 22:21:40 -07:00
2019-06-04 10:58:00 +03:00
@pytest.mark.asyncio
2018-08-26 16:43:14 +02:00
async def test_trigger_before_events_create_server(app):
2017-08-08 22:21:40 -07:00
class MySanicDb:
pass
2018-12-30 13:18:06 +02:00
@app.listener("before_server_start")
2017-08-08 22:21:40 -07:00
async def init_db(app, loop):
app.db = MySanicDb()
await app.create_server(debug=True, return_asyncio_server=True, port=PORT)
2017-08-08 22:21:40 -07:00
assert hasattr(app, "db")
assert isinstance(app.db, MySanicDb)