Fix Ctrl+C and tests on Windows. (#1808)
* Fix Ctrl+C on Windows.
* Disable testing of a function N/A on Windows.
* Add test for coverage, avoid crash on missing _stopping.
* Initialise StreamingHTTPResponse.protocol = None
* Improved comments.
* Reduce amount of data in test_request_stream to avoid failures on Windows.
* The Windows test doesn't work on Windows :(
* Use port numbers more likely to be free than 8000.
* Disable the other signal tests on Windows as well.
* Windows doesn't properly support SO_REUSEADDR, so that's disabled in Python, and thus rebinding fails. For successful testing, reuse port instead.
* app.run argument handling: added server kwargs (alike create_server), added warning on extra kwargs, made auto_reload explicit argument. Another go at Windows tests
* Revert "app.run argument handling: added server kwargs (alike create_server), added warning on extra kwargs, made auto_reload explicit argument. Another go at Windows tests"
This reverts commit dc5d682448.
* Use random test server port on most tests. Should avoid port/addr reuse issues.
* Another test to random port instead of 8000.
* Fix deprecation warnings about missing name on Sanic() in tests.
* Linter and typing
* Increase test coverage
* Rewrite test for ctrlc_windows_workaround
* py36 compat
* py36 compat
* py36 compat
* Don't rely on loop internals but add a stopping flag to app.
* App may be restarted.
* py36 compat
* Linter
* Add a constant for OS checking.
Co-authored-by: L. Kärkkäinen <tronic@users.noreply.github.com>
			
			
This commit is contained in:
		| @@ -12,7 +12,7 @@ from sanic.response import text | ||||
|  | ||||
| ASGI_HOST = "mockserver" | ||||
| HOST = "127.0.0.1" | ||||
| PORT = 42101 | ||||
| PORT = None | ||||
|  | ||||
|  | ||||
| class SanicTestClient: | ||||
| @@ -95,7 +95,7 @@ class SanicTestClient: | ||||
|  | ||||
|         if self.port: | ||||
|             server_kwargs = dict( | ||||
|                 host=host or self.host, port=self.port, **server_kwargs | ||||
|                 host=host or self.host, port=self.port, **server_kwargs, | ||||
|             ) | ||||
|             host, port = host or self.host, self.port | ||||
|         else: | ||||
| @@ -103,6 +103,7 @@ class SanicTestClient: | ||||
|             sock.bind((host or self.host, 0)) | ||||
|             server_kwargs = dict(sock=sock, **server_kwargs) | ||||
|             host, port = sock.getsockname() | ||||
|             self.port = port | ||||
|  | ||||
|         if uri.startswith( | ||||
|             ("http:", "https:", "ftp:", "ftps://", "//", "ws:", "wss:") | ||||
| @@ -114,6 +115,9 @@ class SanicTestClient: | ||||
|             url = "{scheme}://{host}:{port}{uri}".format( | ||||
|                 scheme=scheme, host=host, port=port, uri=uri | ||||
|             ) | ||||
|         # Tests construct URLs using PORT = None, which means random port not | ||||
|         # known until this function is called, so fix that here | ||||
|         url = url.replace(":None/", f":{port}/") | ||||
|  | ||||
|         @self.app.listener("after_server_start") | ||||
|         async def _collect_response(sanic, loop): | ||||
| @@ -203,7 +207,7 @@ class SanicASGITestClient(httpx.AsyncClient): | ||||
|  | ||||
|         self.app = app | ||||
|  | ||||
|         dispatch = SanicASGIDispatch(app=app, client=(ASGI_HOST, PORT)) | ||||
|         dispatch = SanicASGIDispatch(app=app, client=(ASGI_HOST, PORT or 0)) | ||||
|         super().__init__(dispatch=dispatch, base_url=base_url) | ||||
|  | ||||
|         self.last_request = None | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 L. Kärkkäinen
					L. Kärkkäinen