1
1
import asyncio
2
2
import json
3
+ import os
3
4
import platform
4
5
6
+ import jupyter_client
5
7
import pytest
6
8
from tornado .httpclient import HTTPClientError
7
9
from traitlets .config import Config
8
10
9
11
10
- @pytest .fixture (params = ["MappingKernelManager" , "AsyncMappingKernelManager" ])
11
- def jp_argv (request ):
12
- return [
13
- "--ServerApp.kernel_manager_class=jupyter_server.services.kernels.kernelmanager."
14
- + request .param
15
- ]
16
-
17
-
18
12
CULL_TIMEOUT = 30 if platform .python_implementation () == "PyPy" else 5
19
13
CULL_INTERVAL = 1
20
14
21
15
22
- @pytest .fixture
23
- def jp_server_config ():
24
- return Config (
25
- {
26
- "ServerApp" : {
27
- "MappingKernelManager" : {
28
- "cull_idle_timeout" : CULL_TIMEOUT ,
29
- "cull_interval" : CULL_INTERVAL ,
30
- "cull_connected" : False ,
16
+ @pytest .mark .parametrize (
17
+ "jp_server_config" ,
18
+ [
19
+ # Test the synchronous case
20
+ Config (
21
+ {
22
+ "ServerApp" : {
23
+ "kernel_manager_class" : "jupyter_server.services.kernels.kernelmanager.MappingKernelManager" ,
24
+ "MappingKernelManager" : {
25
+ "cull_idle_timeout" : CULL_TIMEOUT ,
26
+ "cull_interval" : CULL_INTERVAL ,
27
+ "cull_connected" : False ,
28
+ },
31
29
}
32
30
}
33
- }
34
- )
35
-
36
-
31
+ ),
32
+ # Test the async case
33
+ Config (
34
+ {
35
+ "ServerApp" : {
36
+ "kernel_manager_class" : "jupyter_server.services.kernels.kernelmanager.AsyncMappingKernelManager" ,
37
+ "AsyncMappingKernelManager" : {
38
+ "cull_idle_timeout" : CULL_TIMEOUT ,
39
+ "cull_interval" : CULL_INTERVAL ,
40
+ "cull_connected" : False ,
41
+ },
42
+ }
43
+ }
44
+ ),
45
+ ],
46
+ )
37
47
async def test_cull_idle (jp_fetch , jp_ws_fetch , jp_cleanup_subprocesses ):
38
48
r = await jp_fetch ("api" , "kernels" , method = "POST" , allow_nonstandard_methods = True )
39
49
kernel = json .loads (r .body .decode ())
@@ -53,14 +63,35 @@ async def test_cull_idle(jp_fetch, jp_ws_fetch, jp_cleanup_subprocesses):
53
63
await jp_cleanup_subprocesses ()
54
64
55
65
66
+ # Pending kernels was released in Jupyter Client 7.1
67
+ # It is currently broken on Windows (Jan 2022). When fixed, we can remove the Windows check.
68
+ # See https://github.com/jupyter-server/jupyter_server/issues/672
69
+ @pytest .mark .skipif (
70
+ os .name == "nt" or jupyter_client ._version .version_info < (7 , 1 ),
71
+ reason = "Pending kernels require jupyter_client >= 7.1 on non-Windows" ,
72
+ )
73
+ @pytest .mark .parametrize (
74
+ "jp_server_config" ,
75
+ [
76
+ Config (
77
+ {
78
+ "ServerApp" : {
79
+ "kernel_manager_class" : "jupyter_server.services.kernels.kernelmanager.AsyncMappingKernelManager" ,
80
+ "AsyncMappingKernelManager" : {
81
+ "cull_idle_timeout" : CULL_TIMEOUT ,
82
+ "cull_interval" : CULL_INTERVAL ,
83
+ "cull_connected" : False ,
84
+ "default_kernel_name" : "bad" ,
85
+ "use_pending_kernels" : True ,
86
+ },
87
+ }
88
+ }
89
+ )
90
+ ],
91
+ )
56
92
async def test_cull_dead (
57
93
jp_fetch , jp_ws_fetch , jp_serverapp , jp_cleanup_subprocesses , jp_kernelspecs
58
94
):
59
- if not hasattr (jp_serverapp .kernel_manager , "use_pending_kernels" ):
60
- return
61
-
62
- jp_serverapp .kernel_manager .use_pending_kernels = True
63
- jp_serverapp .kernel_manager .default_kernel_name = "bad"
64
95
r = await jp_fetch ("api" , "kernels" , method = "POST" , allow_nonstandard_methods = True )
65
96
kernel = json .loads (r .body .decode ())
66
97
kid = kernel ["id" ]
0 commit comments