Skip to content

Commit 362d100

Browse files
authored
Add more awaits for pending kernel in unit tests (#654)
* all pending kernel actions require await * backwards compatibility in tests * Update jupyter_server/tests/services/kernels/test_api.py
1 parent f3b6340 commit 362d100

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

jupyter_server/tests/services/kernels/test_api.py

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,27 @@
1111
from jupyter_server.utils import url_path_join
1212

1313

14-
class TestMappingKernelManager(AsyncMappingKernelManager):
14+
class DummyMappingKernelManager(AsyncMappingKernelManager):
1515
"""A no-op subclass to use in a fixture"""
1616

1717

18+
@pytest.fixture
19+
def pending_kernel_is_ready(jp_serverapp):
20+
async def _(kernel_id):
21+
km = jp_serverapp.kernel_manager
22+
if getattr(km, "use_pending_kernels", False):
23+
kernel = km.get_kernel(kernel_id)
24+
if getattr(kernel, "ready"):
25+
await kernel.ready
26+
27+
return _
28+
29+
1830
@pytest.fixture(
19-
params=["MappingKernelManager", "AsyncMappingKernelManager", "TestMappingKernelManager"]
31+
params=["MappingKernelManager", "AsyncMappingKernelManager", "DummyMappingKernelManager"]
2032
)
2133
def jp_argv(request):
22-
if request.param == "TestMappingKernelManager":
34+
if request.param == "DummyMappingKernelManager":
2335
extra = []
2436
if hasattr(AsyncMappingKernelManager, "use_pending_kernels"):
2537
extra = ["--AsyncMappingKernelManager.use_pending_kernels=True"]
@@ -54,7 +66,9 @@ async def test_default_kernels(jp_fetch, jp_base_url, jp_cleanup_subprocesses):
5466
await jp_cleanup_subprocesses()
5567

5668

57-
async def test_main_kernel_handler(jp_fetch, jp_base_url, jp_cleanup_subprocesses, jp_serverapp):
69+
async def test_main_kernel_handler(
70+
jp_fetch, jp_base_url, jp_cleanup_subprocesses, jp_serverapp, pending_kernel_is_ready
71+
):
5872
# Start the first kernel
5973
r = await jp_fetch(
6074
"api", "kernels", method="POST", body=json.dumps({"name": NATIVE_KERNEL_NAME})
@@ -93,16 +107,14 @@ async def test_main_kernel_handler(jp_fetch, jp_base_url, jp_cleanup_subprocesse
93107
assert len(kernel_list) == 2
94108

95109
# Interrupt a kernel
110+
await pending_kernel_is_ready(kernel2["id"])
96111
r = await jp_fetch(
97112
"api", "kernels", kernel2["id"], "interrupt", method="POST", allow_nonstandard_methods=True
98113
)
99114
assert r.code == 204
100115

101116
# Restart a kernel
102-
kernel = jp_serverapp.kernel_manager.get_kernel(kernel2["id"])
103-
if hasattr(kernel, "ready"):
104-
await kernel.ready
105-
117+
await pending_kernel_is_ready(kernel2["id"])
106118
r = await jp_fetch(
107119
"api", "kernels", kernel2["id"], "restart", method="POST", allow_nonstandard_methods=True
108120
)
@@ -122,7 +134,7 @@ async def test_main_kernel_handler(jp_fetch, jp_base_url, jp_cleanup_subprocesse
122134
await jp_cleanup_subprocesses()
123135

124136

125-
async def test_kernel_handler(jp_fetch, jp_cleanup_subprocesses):
137+
async def test_kernel_handler(jp_fetch, jp_cleanup_subprocesses, pending_kernel_is_ready):
126138
# Create a kernel
127139
r = await jp_fetch(
128140
"api", "kernels", method="POST", body=json.dumps({"name": NATIVE_KERNEL_NAME})
@@ -142,6 +154,7 @@ async def test_kernel_handler(jp_fetch, jp_cleanup_subprocesses):
142154
assert expected_http_error(e, 404)
143155

144156
# Delete kernel with id.
157+
await pending_kernel_is_ready(kernel_id)
145158
r = await jp_fetch(
146159
"api",
147160
"kernels",
@@ -151,6 +164,11 @@ async def test_kernel_handler(jp_fetch, jp_cleanup_subprocesses):
151164
assert r.code == 204
152165

153166
# Get list of kernels
167+
try:
168+
await pending_kernel_is_ready(kernel_id)
169+
# If the kernel is already deleted, no need to await.
170+
except tornado.web.HTTPError:
171+
pass
154172
r = await jp_fetch("api", "kernels", method="GET")
155173
kernel_list = json.loads(r.body.decode())
156174
assert kernel_list == []

0 commit comments

Comments
 (0)