diff --git a/jupyter_server/tests/extension/test_app.py b/jupyter_server/tests/extension/test_app.py index 1f262560ef..58fa38cda2 100644 --- a/jupyter_server/tests/extension/test_app.py +++ b/jupyter_server/tests/extension/test_app.py @@ -99,7 +99,7 @@ def test_stop_extension(jp_serverapp, caplog): # load extensions (make sure we only have the one extension loaded jp_serverapp.extension_manager.load_all_extensions() - extension_name = 'jupyter_server.tests.extension.mockextensions' + extension_name = "jupyter_server.tests.extension.mockextensions" assert list(jp_serverapp.extension_manager.extension_apps) == [extension_name] # add a stop_extension method for the extension app diff --git a/jupyter_server/tests/extension/test_manager.py b/jupyter_server/tests/extension/test_manager.py index 2b76af33cd..148b6ea6d9 100644 --- a/jupyter_server/tests/extension/test_manager.py +++ b/jupyter_server/tests/extension/test_manager.py @@ -1,4 +1,5 @@ import os +import unittest.mock as mock import pytest from jupyter_core.paths import jupyter_config_path @@ -78,7 +79,7 @@ def test_extension_manager_api(jp_serverapp): jpserver_extensions = {"jupyter_server.tests.extension.mockextensions": True} manager = ExtensionManager(serverapp=jp_serverapp) assert manager.config_manager - expected = _normalize_path(os.path.join(jupyter_config_path()[0], 'serverconfig')) + expected = _normalize_path(os.path.join(jupyter_config_path()[0], "serverconfig")) assert _normalize_path(manager.config_manager.read_config_path[0]) == expected manager.from_jpserver_extensions(jpserver_extensions) assert len(manager.extensions) == 1 @@ -91,3 +92,41 @@ def test_extension_manager_linked_extensions(jp_serverapp): manager.add_extension(name, enabled=True) manager.link_extension(name) assert name in manager.linked_extensions + + +def test_extension_manager_fail_add(jp_serverapp): + name = "jupyter_server.tests.extension.notanextension" + manager = ExtensionManager(serverapp=jp_serverapp) + manager.add_extension(name, enabled=True) # should only warn + jp_serverapp.reraise_server_extension_failures = True + with pytest.raises(ExtensionModuleNotFound): + manager.add_extension(name, enabled=True) + + +def test_extension_manager_fail_link(jp_serverapp): + name = "jupyter_server.tests.extension.mockextensions.app" + with mock.patch( + "jupyter_server.tests.extension.mockextensions.app.MockExtensionApp.parse_command_line", + side_effect=RuntimeError, + ): + manager = ExtensionManager(serverapp=jp_serverapp) + manager.add_extension(name, enabled=True) + manager.link_extension(name) # should only warn + jp_serverapp.reraise_server_extension_failures = True + with pytest.raises(RuntimeError): + manager.link_extension(name) + + +def test_extension_manager_fail_load(jp_serverapp): + name = "jupyter_server.tests.extension.mockextensions.app" + with mock.patch( + "jupyter_server.tests.extension.mockextensions.app.MockExtensionApp.initialize_handlers", + side_effect=RuntimeError, + ): + manager = ExtensionManager(serverapp=jp_serverapp) + manager.add_extension(name, enabled=True) + manager.link_extension(name) + manager.load_extension(name) # should only warn + jp_serverapp.reraise_server_extension_failures = True + with pytest.raises(RuntimeError): + manager.load_extension(name) diff --git a/jupyter_server/tests/services/kernels/test_cull.py b/jupyter_server/tests/services/kernels/test_cull.py index 029ea0ba57..ad61b55ba4 100644 --- a/jupyter_server/tests/services/kernels/test_cull.py +++ b/jupyter_server/tests/services/kernels/test_cull.py @@ -15,7 +15,7 @@ def jp_argv(request): ] -CULL_TIMEOUT = 10 if platform.python_implementation() == "PyPy" else 5 +CULL_TIMEOUT = 30 if platform.python_implementation() == "PyPy" else 5 CULL_INTERVAL = 1 diff --git a/jupyter_server/tests/test_terminal.py b/jupyter_server/tests/test_terminal.py index 0f41ece269..78da12b423 100644 --- a/jupyter_server/tests/test_terminal.py +++ b/jupyter_server/tests/test_terminal.py @@ -28,7 +28,7 @@ def terminal_path(tmp_path): shutil.rmtree(str(subdir), ignore_errors=True) -CULL_TIMEOUT = 2 +CULL_TIMEOUT = 10 CULL_INTERVAL = 3 @@ -128,7 +128,7 @@ async def test_terminal_create_with_cwd(jp_fetch, jp_ws_fetch, terminal_path): message_stdout = "" while True: try: - message = await asyncio.wait_for(ws.read_message(), timeout=1.0) + message = await asyncio.wait_for(ws.read_message(), timeout=5.0) except asyncio.TimeoutError: break @@ -164,7 +164,7 @@ async def test_culling(jp_server_config, jp_fetch): last_activity = term["last_activity"] culled = False - for i in range(10): # Culling should occur in a few seconds + for i in range(CULL_TIMEOUT + CULL_INTERVAL): try: resp = await jp_fetch( "api",