From c55ac5927323e2b4f0862a05971dd190e98a3b01 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 11:25:15 +0100 Subject: [PATCH 01/12] Speed up test suite with pytest-xdist --- pyproject.toml | 2 +- requirements.txt | 2 ++ scripts/test | 2 ++ tests/test_server.py | 6 ++++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6f809030e..d402f4924 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ disallow_untyped_defs = false check_untyped_defs = true [tool.pytest.ini_options] -addopts = "-rxXs --strict-config --strict-markers" +addopts = "-rxXs --strict-config --strict-markers -n 8" xfail_strict = true filterwarnings = [ "error", diff --git a/requirements.txt b/requirements.txt index b3a464c0b..a29acbc1b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,6 +17,7 @@ twine==6.0.1 ruff==0.8.3 pytest==8.3.4 pytest-mock==3.14.0 +pytest-xdist[psutil]==3.6.0 mypy==1.13.0 types-click==7.1.8 types-pyyaml==6.0.12.20240917 @@ -26,6 +27,7 @@ cryptography==44.0.0 coverage==7.6.1; python_version < '3.9' coverage==7.6.9; python_version >= '3.9' coverage-conditional-plugin==0.9.0 +coverage-enable-subprocess==1.0 httpx==0.28.1 # Documentation diff --git a/scripts/test b/scripts/test index ed2bdd01a..64ccdd0da 100755 --- a/scripts/test +++ b/scripts/test @@ -11,6 +11,8 @@ if [ -z $GITHUB_ACTIONS ]; then scripts/check fi +export COVERAGE_PROCESS_START=$(pwd)/pyproject.toml + ${PREFIX}coverage run --debug config -m pytest "$@" if [ -z $GITHUB_ACTIONS ]; then diff --git a/tests/test_server.py b/tests/test_server.py index c650be290..563bbcb74 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -62,7 +62,9 @@ async def app(scope: Scope, receive: ASGIReceiveCallable, send: ASGISendCallable @pytest.mark.parametrize("exception_signal", signals) @pytest.mark.parametrize("capture_signal", signal_captures) async def test_server_interrupt( - exception_signal: signal.Signals, capture_signal: Callable[[signal.Signals], ContextManager[None]] + exception_signal: signal.Signals, + capture_signal: Callable[[signal.Signals], ContextManager[None]], + unused_tcp_port: int, ): # pragma: py-win32 """Test interrupting a Server that is run explicitly inside asyncio""" @@ -71,7 +73,7 @@ async def interrupt_running(srv: Server): await asyncio.sleep(0.01) signal.raise_signal(exception_signal) - server = Server(Config(app=dummy_app, loop="asyncio")) + server = Server(Config(app=dummy_app, loop="asyncio", port=unused_tcp_port)) asyncio.create_task(interrupt_running(server)) with capture_signal(exception_signal) as witness: await server.serve() From 6dd2eeb5f054d55370ef6a393ab56dc6443c1ef7 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 11:43:53 +0100 Subject: [PATCH 02/12] add combine --- .gitignore | 1 + pyproject.toml | 1 + scripts/coverage | 1 + 3 files changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index a92a445ac..ed8bcf67e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .cache .coverage +.coverage.* .mypy_cache/ __pycache__/ uvicorn.egg-info/ diff --git a/pyproject.toml b/pyproject.toml index d402f4924..c2032ed8e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -96,6 +96,7 @@ filterwarnings = [ ] [tool.coverage.run] +parallel = true source_pkgs = ["uvicorn", "tests"] plugins = ["coverage_conditional_plugin"] omit = ["uvicorn/workers.py", "uvicorn/__main__.py"] diff --git a/scripts/coverage b/scripts/coverage index c93e45e85..2d6ea60ee 100755 --- a/scripts/coverage +++ b/scripts/coverage @@ -8,4 +8,5 @@ export SOURCE_FILES="uvicorn tests" set -x +${PREFIX}coverage combine ${PREFIX}coverage report From 92a8658013790b8c59e6cea58c59eecf32ea4ef2 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 11:58:06 +0100 Subject: [PATCH 03/12] Check if loadgroup solves windows issues --- pyproject.toml | 2 +- tests/supervisors/test_reload.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index c2032ed8e..67c74e260 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ disallow_untyped_defs = false check_untyped_defs = true [tool.pytest.ini_options] -addopts = "-rxXs --strict-config --strict-markers -n 8" +addopts = "-rxXs --strict-config --strict-markers -n 8 --dist loadgroup" xfail_strict = true filterwarnings = [ "error", diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index c4ad76acb..e83cd280b 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -22,6 +22,7 @@ except ImportError: # pragma: no cover WatchFilesReload = None # type: ignore[misc,assignment] +pytestmark = pytest.mark.xdist_group(name="reloader") # TODO: Investigate why this is flaky on MacOS M1. skip_if_m1 = pytest.mark.skipif( From 8bee6d361317315a817b49e794c19be7b07a34a6 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 12:01:45 +0100 Subject: [PATCH 04/12] Add xdist group to multiprocess tests --- tests/supervisors/test_multiprocess.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/supervisors/test_multiprocess.py b/tests/supervisors/test_multiprocess.py index e1f594efe..4b2ee1f46 100644 --- a/tests/supervisors/test_multiprocess.py +++ b/tests/supervisors/test_multiprocess.py @@ -15,6 +15,8 @@ from uvicorn.supervisors import Multiprocess from uvicorn.supervisors.multiprocess import Process +pytestmark = pytest.mark.xdist_group(name="multiprocess") + def new_console_in_windows(test_function: Callable[[], Any]) -> Callable[[], Any]: # pragma: no cover if os.name != "nt": From aa994a82aae873bd1f46f3c3dc0b3901663c1047 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 23:37:16 +0100 Subject: [PATCH 05/12] Skip reload tests on windows and mac --- pyproject.toml | 2 +- tests/supervisors/test_multiprocess.py | 2 -- tests/supervisors/test_reload.py | 18 ++++++++---------- 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 67c74e260..c2032ed8e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ disallow_untyped_defs = false check_untyped_defs = true [tool.pytest.ini_options] -addopts = "-rxXs --strict-config --strict-markers -n 8 --dist loadgroup" +addopts = "-rxXs --strict-config --strict-markers -n 8" xfail_strict = true filterwarnings = [ "error", diff --git a/tests/supervisors/test_multiprocess.py b/tests/supervisors/test_multiprocess.py index 4b2ee1f46..e1f594efe 100644 --- a/tests/supervisors/test_multiprocess.py +++ b/tests/supervisors/test_multiprocess.py @@ -15,8 +15,6 @@ from uvicorn.supervisors import Multiprocess from uvicorn.supervisors.multiprocess import Process -pytestmark = pytest.mark.xdist_group(name="multiprocess") - def new_console_in_windows(test_function: Callable[[], Any]) -> Callable[[], Any]: # pragma: no cover if os.name != "nt": diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index e83cd280b..fdaf8f0f7 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -22,12 +22,10 @@ except ImportError: # pragma: no cover WatchFilesReload = None # type: ignore[misc,assignment] -pytestmark = pytest.mark.xdist_group(name="reloader") - -# TODO: Investigate why this is flaky on MacOS M1. -skip_if_m1 = pytest.mark.skipif( - sys.platform == "darwin" and platform.processor() == "arm", - reason="Flaky on MacOS M1", +# TODO: Investigate why this is flaky on MacOS M1, and Windows. +pytestmark = pytest.mark.skipif( + (sys.platform == "darwin" and platform.processor() == "arm") or sys.platform == "win32", + reason="Flaky on MacOS M1, and Windows", ) @@ -153,7 +151,7 @@ def test_reload_when_pattern_matched_file_is_changed(self, result: bool, touch_s reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_if_m1)]) + @pytest.mark.parametrize("reloader_class", [WatchFilesReload]) def test_should_not_reload_when_exclude_pattern_match_file_is_changed( self, touch_soon: Callable[[Path], None] ): # pragma: py-darwin @@ -210,7 +208,7 @@ def test_should_reload_when_directories_have_same_prefix(self, touch_soon: Calla @pytest.mark.parametrize( "reloader_class", - [StatReload, pytest.param(WatchFilesReload, marks=skip_if_m1)], + [StatReload, pytest.param(WatchFilesReload)], ) def test_should_not_reload_when_only_subdirectory_is_watched(self, touch_soon: Callable[[Path], None]): app_dir = self.reload_path / "app" @@ -229,7 +227,7 @@ def test_should_not_reload_when_only_subdirectory_is_watched(self, touch_soon: C reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_if_m1)]) + @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload)]) def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-darwin dotted_file = self.reload_path / ".dotted" dotted_dir_file = self.reload_path / ".dotted_dir" / "file.txt" @@ -251,7 +249,7 @@ def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_if_m1)]) + @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload)]) def test_explicit_paths(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-darwin dotted_file = self.reload_path / ".dotted" non_dotted_file = self.reload_path / "ext" / "ext.jpg" From e47210fb7d51233490c52cb3357f303f6643ae83 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 23:42:41 +0100 Subject: [PATCH 06/12] skip non linux --- tests/supervisors/test_reload.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index fdaf8f0f7..561744838 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -22,10 +22,11 @@ except ImportError: # pragma: no cover WatchFilesReload = None # type: ignore[misc,assignment] + # TODO: Investigate why this is flaky on MacOS M1, and Windows. -pytestmark = pytest.mark.skipif( - (sys.platform == "darwin" and platform.processor() == "arm") or sys.platform == "win32", - reason="Flaky on MacOS M1, and Windows", +skip_non_linux = pytest.mark.skipif( + (sys.platform == "darwin" and platform.processor() != "arm") or sys.platform == "win32", + reason="Flaky on Windows and MacOS M1", ) @@ -151,7 +152,7 @@ def test_reload_when_pattern_matched_file_is_changed(self, result: bool, touch_s reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [WatchFilesReload]) + @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_non_linux)]) def test_should_not_reload_when_exclude_pattern_match_file_is_changed( self, touch_soon: Callable[[Path], None] ): # pragma: py-darwin @@ -208,7 +209,7 @@ def test_should_reload_when_directories_have_same_prefix(self, touch_soon: Calla @pytest.mark.parametrize( "reloader_class", - [StatReload, pytest.param(WatchFilesReload)], + [StatReload, pytest.param(WatchFilesReload, marks=skip_non_linux)], ) def test_should_not_reload_when_only_subdirectory_is_watched(self, touch_soon: Callable[[Path], None]): app_dir = self.reload_path / "app" @@ -227,7 +228,7 @@ def test_should_not_reload_when_only_subdirectory_is_watched(self, touch_soon: C reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload)]) + @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_non_linux)]) def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-darwin dotted_file = self.reload_path / ".dotted" dotted_dir_file = self.reload_path / ".dotted_dir" / "file.txt" @@ -249,7 +250,7 @@ def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload)]) + @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_non_linux)]) def test_explicit_paths(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-darwin dotted_file = self.reload_path / ".dotted" non_dotted_file = self.reload_path / "ext" / "ext.jpg" From 561b119c704574c9e70a09d85f76b7988476d1a2 Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 23:44:59 +0100 Subject: [PATCH 07/12] skip non linux --- tests/supervisors/test_reload.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index 561744838..d7c2e19fa 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -1,6 +1,5 @@ from __future__ import annotations -import platform import signal import socket import sys @@ -23,11 +22,8 @@ WatchFilesReload = None # type: ignore[misc,assignment] -# TODO: Investigate why this is flaky on MacOS M1, and Windows. -skip_non_linux = pytest.mark.skipif( - (sys.platform == "darwin" and platform.processor() != "arm") or sys.platform == "win32", - reason="Flaky on Windows and MacOS M1", -) +# TODO: Investigate why this is flaky on MacOS, and Windows. +skip_non_linux = pytest.mark.skipif(sys.platform in ("darwin", "win32"), reason="Flaky on Windows and MacOS M1") def run(sockets: list[socket.socket] | None) -> None: From 462ec859d00d6a39c1bed647594e14cb6737fe6e Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 23:50:46 +0100 Subject: [PATCH 08/12] add not linux --- pyproject.toml | 1 + tests/supervisors/test_reload.py | 14 +++++++++----- uvicorn/config.py | 2 +- uvicorn/server.py | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c2032ed8e..d1e8f1c4f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -127,6 +127,7 @@ exclude_lines = [ py-win32 = "sys_platform == 'win32'" py-not-win32 = "sys_platform != 'win32'" py-linux = "sys_platform == 'linux'" +py-not-linux = "sys_platform != 'linux'" py-darwin = "sys_platform == 'darwin'" py-gte-38 = "sys_version_info >= (3, 8)" py-lt-38 = "sys_version_info < (3, 8)" diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index d7c2e19fa..31c0837b1 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -183,8 +183,10 @@ def test_should_not_reload_when_dot_file_is_changed(self, touch_soon: Callable[[ reloader.shutdown() - @pytest.mark.parametrize("reloader_class", [StatReload, WatchFilesReload]) - def test_should_reload_when_directories_have_same_prefix(self, touch_soon: Callable[[Path], None]): + @pytest.mark.parametrize("reloader_class", [StatReload, pytest.param(WatchFilesReload, marks=skip_non_linux)]) + def test_should_reload_when_directories_have_same_prefix( + self, touch_soon: Callable[[Path], None] + ): # pragma: py-not-linux app_dir = self.reload_path / "app" app_file = app_dir / "src" / "main.py" app_first_dir = self.reload_path / "app_first" @@ -207,7 +209,9 @@ def test_should_reload_when_directories_have_same_prefix(self, touch_soon: Calla "reloader_class", [StatReload, pytest.param(WatchFilesReload, marks=skip_non_linux)], ) - def test_should_not_reload_when_only_subdirectory_is_watched(self, touch_soon: Callable[[Path], None]): + def test_should_not_reload_when_only_subdirectory_is_watched( + self, touch_soon: Callable[[Path], None] + ): # pragma: py-not-linux app_dir = self.reload_path / "app" app_dir_file = self.reload_path / "app" / "src" / "main.py" root_file = self.reload_path / "main.py" @@ -225,7 +229,7 @@ def test_should_not_reload_when_only_subdirectory_is_watched(self, touch_soon: C reloader.shutdown() @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_non_linux)]) - def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-darwin + def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-not-linux dotted_file = self.reload_path / ".dotted" dotted_dir_file = self.reload_path / ".dotted_dir" / "file.txt" python_file = self.reload_path / "main.py" @@ -247,7 +251,7 @@ def test_override_defaults(self, touch_soon: Callable[[Path], None]) -> None: # reloader.shutdown() @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_non_linux)]) - def test_explicit_paths(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-darwin + def test_explicit_paths(self, touch_soon: Callable[[Path], None]) -> None: # pragma: py-not-linux dotted_file = self.reload_path / ".dotted" non_dotted_file = self.reload_path / "ext" / "ext.jpg" python_file = self.reload_path / "main.py" diff --git a/uvicorn/config.py b/uvicorn/config.py index b08a8426b..9ac43a265 100644 --- a/uvicorn/config.py +++ b/uvicorn/config.py @@ -137,7 +137,7 @@ def resolve_reload_patterns(patterns_list: list[str], directories_list: list[str # Special case for the .* pattern, otherwise this would only match # hidden directories which is probably undesired if pattern == ".*": - continue # pragma: py-darwin + continue # pragma: py-not-linux patterns.append(pattern) if is_dir(Path(pattern)): directories.append(Path(pattern)) diff --git a/uvicorn/server.py b/uvicorn/server.py index f14026f16..5a6464d25 100644 --- a/uvicorn/server.py +++ b/uvicorn/server.py @@ -118,7 +118,7 @@ def create_protocol( def _share_socket( sock: socket.SocketType, - ) -> socket.SocketType: # pragma py-linux pragma: py-darwin + ) -> socket.SocketType: # pragma py-not-win32 # Windows requires the socket be explicitly shared across # multiple workers (processes). from socket import fromshare # type: ignore[attr-defined] From 937c5374570ce0b06f25762d7016ca5ddd92e6cf Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sat, 14 Dec 2024 23:53:20 +0100 Subject: [PATCH 09/12] add last not linux --- tests/supervisors/test_reload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index 31c0837b1..150e1d570 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -151,7 +151,7 @@ def test_reload_when_pattern_matched_file_is_changed(self, result: bool, touch_s @pytest.mark.parametrize("reloader_class", [pytest.param(WatchFilesReload, marks=skip_non_linux)]) def test_should_not_reload_when_exclude_pattern_match_file_is_changed( self, touch_soon: Callable[[Path], None] - ): # pragma: py-darwin + ): # pragma: py-not-linux python_file = self.reload_path / "app" / "src" / "main.py" css_file = self.reload_path / "app" / "css" / "main.css" js_file = self.reload_path / "app" / "js" / "main.js" From 251d7293aac0ab7ef3ef6dbc5b1bcef81e7045be Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sun, 15 Dec 2024 00:31:54 +0100 Subject: [PATCH 10/12] skip another --- tests/supervisors/test_reload.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index 150e1d570..ad56a8ec6 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -136,8 +136,12 @@ def test_should_not_reload_when_python_file_in_excluded_subdir_is_changed(self, reloader.shutdown() - @pytest.mark.parametrize("reloader_class, result", [(StatReload, False), (WatchFilesReload, True)]) - def test_reload_when_pattern_matched_file_is_changed(self, result: bool, touch_soon: Callable[[Path], None]): + @pytest.mark.parametrize( + "reloader_class, result", [(StatReload, False), pytest.param((WatchFilesReload, True), marks=skip_non_linux)] + ) + def test_reload_when_pattern_matched_file_is_changed( + self, result: bool, touch_soon: Callable[[Path], None] + ): # pragma: py-not-linux file = self.reload_path / "app" / "js" / "main.js" with as_cwd(self.reload_path): From 6ff0e62017e563704b816bcc389c887f784fd51c Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sun, 15 Dec 2024 00:34:12 +0100 Subject: [PATCH 11/12] skip another --- tests/supervisors/test_reload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index ad56a8ec6..cc3eecb0c 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -137,7 +137,7 @@ def test_should_not_reload_when_python_file_in_excluded_subdir_is_changed(self, reloader.shutdown() @pytest.mark.parametrize( - "reloader_class, result", [(StatReload, False), pytest.param((WatchFilesReload, True), marks=skip_non_linux)] + "reloader_class, result", [(StatReload, False), pytest.param(WatchFilesReload, True, marks=skip_non_linux)] ) def test_reload_when_pattern_matched_file_is_changed( self, result: bool, touch_soon: Callable[[Path], None] From 3975448557ffdb199977f584df1dea3cb6656cee Mon Sep 17 00:00:00 2001 From: Marcelo Trylesinski Date: Sun, 15 Dec 2024 09:09:17 +0100 Subject: [PATCH 12/12] Update tests/supervisors/test_reload.py --- tests/supervisors/test_reload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/supervisors/test_reload.py b/tests/supervisors/test_reload.py index cc3eecb0c..03c681c02 100644 --- a/tests/supervisors/test_reload.py +++ b/tests/supervisors/test_reload.py @@ -23,7 +23,7 @@ # TODO: Investigate why this is flaky on MacOS, and Windows. -skip_non_linux = pytest.mark.skipif(sys.platform in ("darwin", "win32"), reason="Flaky on Windows and MacOS M1") +skip_non_linux = pytest.mark.skipif(sys.platform in ("darwin", "win32"), reason="Flaky on Windows and MacOS") def run(sockets: list[socket.socket] | None) -> None: