11
11
from jupyter_server .utils import url_path_join
12
12
13
13
14
- class TestMappingKernelManager (AsyncMappingKernelManager ):
14
+ class DummyMappingKernelManager (AsyncMappingKernelManager ):
15
15
"""A no-op subclass to use in a fixture"""
16
16
17
17
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
+
18
30
@pytest .fixture (
19
- params = ["MappingKernelManager" , "AsyncMappingKernelManager" , "TestMappingKernelManager " ]
31
+ params = ["MappingKernelManager" , "AsyncMappingKernelManager" , "DummyMappingKernelManager " ]
20
32
)
21
33
def jp_argv (request ):
22
- if request .param == "TestMappingKernelManager " :
34
+ if request .param == "DummyMappingKernelManager " :
23
35
extra = []
24
36
if hasattr (AsyncMappingKernelManager , "use_pending_kernels" ):
25
37
extra = ["--AsyncMappingKernelManager.use_pending_kernels=True" ]
@@ -54,7 +66,9 @@ async def test_default_kernels(jp_fetch, jp_base_url, jp_cleanup_subprocesses):
54
66
await jp_cleanup_subprocesses ()
55
67
56
68
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
+ ):
58
72
# Start the first kernel
59
73
r = await jp_fetch (
60
74
"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
93
107
assert len (kernel_list ) == 2
94
108
95
109
# Interrupt a kernel
110
+ await pending_kernel_is_ready (kernel2 ["id" ])
96
111
r = await jp_fetch (
97
112
"api" , "kernels" , kernel2 ["id" ], "interrupt" , method = "POST" , allow_nonstandard_methods = True
98
113
)
99
114
assert r .code == 204
100
115
101
116
# 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" ])
106
118
r = await jp_fetch (
107
119
"api" , "kernels" , kernel2 ["id" ], "restart" , method = "POST" , allow_nonstandard_methods = True
108
120
)
@@ -122,7 +134,7 @@ async def test_main_kernel_handler(jp_fetch, jp_base_url, jp_cleanup_subprocesse
122
134
await jp_cleanup_subprocesses ()
123
135
124
136
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 ):
126
138
# Create a kernel
127
139
r = await jp_fetch (
128
140
"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):
142
154
assert expected_http_error (e , 404 )
143
155
144
156
# Delete kernel with id.
157
+ await pending_kernel_is_ready (kernel_id )
145
158
r = await jp_fetch (
146
159
"api" ,
147
160
"kernels" ,
@@ -151,6 +164,11 @@ async def test_kernel_handler(jp_fetch, jp_cleanup_subprocesses):
151
164
assert r .code == 204
152
165
153
166
# 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
154
172
r = await jp_fetch ("api" , "kernels" , method = "GET" )
155
173
kernel_list = json .loads (r .body .decode ())
156
174
assert kernel_list == []
0 commit comments