From 5b5d67d1ffd98b31eb8fb30417152cb05af6fc97 Mon Sep 17 00:00:00 2001 From: Miguel Grinberg Date: Sun, 13 Oct 2024 19:34:07 +0100 Subject: [PATCH] run tests with mocked eventlet to avoid 3.13 failures --- src/engineio/async_drivers/eventlet.py | 2 +- tests/common/test_async_eventlet.py | 36 -------------------------- tests/common/test_server.py | 18 ++++++++++++- tox.ini | 1 - 4 files changed, 18 insertions(+), 39 deletions(-) delete mode 100644 tests/common/test_async_eventlet.py diff --git a/src/engineio/async_drivers/eventlet.py b/src/engineio/async_drivers/eventlet.py index 4dfdc1ef..b27eb144 100644 --- a/src/engineio/async_drivers/eventlet.py +++ b/src/engineio/async_drivers/eventlet.py @@ -25,7 +25,7 @@ def join(self): return self.g.wait() -class WebSocketWSGI(_WebSocketWSGI): +class WebSocketWSGI(_WebSocketWSGI): # pragma: no cover def __init__(self, handler, server): try: super().__init__( diff --git a/tests/common/test_async_eventlet.py b/tests/common/test_async_eventlet.py deleted file mode 100644 index f484ffb4..00000000 --- a/tests/common/test_async_eventlet.py +++ /dev/null @@ -1,36 +0,0 @@ -import logging -import unittest -from unittest import mock -import sys - -# event fails to import in Python 3.13 -try: - from engineio.async_drivers import eventlet as async_eventlet -except AttributeError: - pass -import pytest - - -@pytest.mark.skipif(sys.version_info >= (3, 13), - reason="eventlet fails on python 3.13") -class TestAsyncEventlet(unittest.TestCase): - def setUp(self): - logging.getLogger('engineio').setLevel(logging.NOTSET) - - def test_bad_environ(self): - wsgi = async_eventlet.WebSocketWSGI(None, mock.MagicMock()) - environ = {'foo': 'bar'} - start_response = 'bar' - with pytest.raises(RuntimeError): - wsgi(environ, start_response) - - @mock.patch( - 'engineio.async_drivers.eventlet._WebSocketWSGI.__call__', - return_value='data', - ) - def test_wsgi_call(self, _WebSocketWSGI): - _WebSocketWSGI.__call__ = lambda e, s: 'data' - environ = {'eventlet.input': mock.MagicMock()} - start_response = 'bar' - wsgi = async_eventlet.WebSocketWSGI(None, mock.MagicMock()) - assert wsgi(environ, start_response) == 'data' diff --git a/tests/common/test_server.py b/tests/common/test_server.py index adddea1b..dcf4fa6e 100644 --- a/tests/common/test_server.py +++ b/tests/common/test_server.py @@ -111,6 +111,14 @@ def test_async_mode_threading(self): del sys.modules['engineio.async_drivers.threading'] def test_async_mode_eventlet(self): + sys.modules['eventlet'] = mock.MagicMock() + sys.modules['eventlet'].green = mock.MagicMock() + sys.modules['eventlet.green'] = sys.modules['eventlet'].green + sys.modules['eventlet.green'].threading = mock.MagicMock() + sys.modules['eventlet.green.threading'] = \ + sys.modules['eventlet.green'].threading + sys.modules['eventlet'].websocket = mock.MagicMock() + sys.modules['eventlet.websocket'] = sys.modules['eventlet'].websocket s = server.Server(async_mode='eventlet') assert s.async_mode == 'eventlet' @@ -120,6 +128,11 @@ def test_async_mode_eventlet(self): assert s._async['thread'] == async_eventlet.EventletThread assert s._async['queue'] == queue.Queue assert s._async['websocket'] == async_eventlet.WebSocketWSGI + del sys.modules['eventlet'] + del sys.modules['eventlet.green'] + del sys.modules['eventlet.green.threading'] + del sys.modules['eventlet.websocket'] + del sys.modules['engineio.async_drivers.eventlet'] @mock.patch('importlib.import_module', side_effect=_mock_import) def test_async_mode_gevent_uwsgi(self, import_module): @@ -228,7 +241,10 @@ def test_async_mode_invalid(self, import_module): with pytest.raises(ValueError): server.Server(async_mode='foo') - @mock.patch('importlib.import_module', side_effect=[_mock_async]) + @mock.patch( + 'importlib.import_module', + side_effect=[_mock_async], + ) def test_async_mode_auto_eventlet(self, import_module): s = server.Server() assert s.async_mode == 'eventlet' diff --git a/tox.ini b/tox.ini index 8e0cd318..b0bec189 100644 --- a/tox.ini +++ b/tox.ini @@ -19,7 +19,6 @@ commands= deps= pytest pytest-cov - eventlet aiohttp tornado requests