From 2cb410705d4f60c5810ebfbc0a4ab6701531102d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=2E=20K=C3=A4rkk=C3=A4inen?= Date: Tue, 31 Mar 2020 17:53:18 +0300 Subject: [PATCH] Add test for auto_reload (coverage not working unfortunately). --- tests/test_auto_reload.py | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 tests/test_auto_reload.py diff --git a/tests/test_auto_reload.py b/tests/test_auto_reload.py new file mode 100644 index 00000000..7a63249f --- /dev/null +++ b/tests/test_auto_reload.py @@ -0,0 +1,46 @@ +import os +import subprocess +import secrets +import sys + +from tempfile import TemporaryDirectory +from textwrap import dedent + +import pytest + +def write_app(filename, **runargs): + text = secrets.token_urlsafe() + with open(filename, "w") as f: + f.write(dedent(f"""\ + from sanic import Sanic + from sanic.response import text + + app = Sanic(__name__) + + @app.listener("after_server_start") + def complete(*args): + print("complete", {text!r}) + + kwargs = {runargs!r} + app.run(port=42101, **kwargs) + """ + )) + return text + +@pytest.mark.parametrize("runargs", [ + dict(auto_reload=True), + dict(debug=True), +]) +async def test_reloader_live(runargs): + with TemporaryDirectory() as tmpdir: + filename = os.path.join(tmpdir, "reloaderapp.py") + text = write_app(filename, **runargs) + with subprocess.Popen([sys.executable, filename], stdout=subprocess.PIPE) as proc: + line = (l.decode() for l in proc.stdout if l.startswith(b"complete")) + try: + assert next(line) == f"complete {text}\n" + # Edit source code and try again + text = write_app(filename) + assert next(line) == f"complete {text}\n" + finally: + proc.terminate()