13
13
from ..lifecycle_manager import RemoteKernelLifecycleManager
14
14
15
15
16
- sample_kernel_json = {'argv' : ['cat' , '{kernel_id}' , '{response_address}' ],
17
- 'display_name' : 'Test kernel' , }
16
+ sample_kernel_json = {'argv' : ['cat' , '{kernel_id}' , '{response_address}' ], 'display_name' : 'Test kernel' , }
18
17
19
- dummy_connection_info = {'stdin_port' : 47557 , 'ip' : '172.16.18.82' , 'control_port' : 55288 ,
20
- 'hb_port' : 55562 , 'signature_scheme' : 'hmac-sha256' ,
21
- 'key' : 'e75863c2-4a8a-49b0-b6d2-9e23837d5bd1' , 'comm_port' : 36458 ,
22
- 'kernel_name' : '' , 'shell_port' : 58031 , 'transport' : 'tcp' , 'iopub_port' : 52229 }
18
+ foo_kernel_json = {'argv' : ['cat' , '{kernel_id}' , '{response_address}' ], 'display_name' : 'Test foo kernel' , }
23
19
20
+ bar_kernel_json = {'argv' : ['cat' , '{kernel_id}' , '{response_address}' ], 'display_name' : 'Test bar kernel' , }
21
+
22
+ foo_connection_info = {'stdin_port' : 47557 , 'ip' : '172.16.18.82' , 'control_port' : 55288 ,
23
+ 'hb_port' : 55562 , 'signature_scheme' : 'hmac-sha256' ,
24
+ 'key' : 'e75863c2-4a8a-49b0-b6d2-9e23837d5bd1' , 'comm_port' : 36458 ,
25
+ 'kernel_name' : '' , 'shell_port' : 58031 , 'transport' : 'tcp' , 'iopub_port' : 52229 }
26
+
27
+
28
+ def install_sample_kernel (kernels_dir ,
29
+ kernel_name = 'sample' ,
30
+ kernel_file = 'kernel.json' ,
31
+ json_content = sample_kernel_json ):
24
32
25
- def install_sample_kernel (kernels_dir , kernel_name = 'sample' , kernel_file = 'kernel.json' ):
26
33
"""install a sample kernel in a kernels directory"""
27
34
sample_kernel_dir = pjoin (kernels_dir , kernel_name )
28
- os .makedirs (sample_kernel_dir )
35
+ os .makedirs (sample_kernel_dir , exist_ok = True )
29
36
json_file = pjoin (sample_kernel_dir , kernel_file )
30
37
with open (json_file , 'w' ) as f :
31
- json .dump (sample_kernel_json , f )
32
- return sample_kernel_dir
38
+ json .dump (json_content , f )
33
39
34
40
35
41
def is_uuid (uuid_to_test ):
@@ -41,11 +47,11 @@ def is_uuid(uuid_to_test):
41
47
42
48
43
49
def is_response_address (addr_to_test ):
44
- return re .match (r"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\ :[0-9]{4,5}$" , addr_to_test ) is not None
50
+ return re .match (r"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:[0-9]{4,5}$" , addr_to_test ) is not None
45
51
46
52
47
- class DummyKernelLifecycleManager (RemoteKernelLifecycleManager ):
48
- """A dummy kernel provider for testing KernelFinder"""
53
+ class FooKernelLifecycleManager (RemoteKernelLifecycleManager ):
54
+ """A fake kernel provider for testing KernelFinder"""
49
55
connection_info = None
50
56
51
57
def launch_process (self , kernel_cmd , ** kwargs ):
@@ -55,7 +61,7 @@ def launch_process(self, kernel_cmd, **kwargs):
55
61
return self
56
62
57
63
def confirm_remote_startup (self ):
58
- self .connection_info = dummy_connection_info
64
+ self .connection_info = foo_connection_info
59
65
return True
60
66
61
67
def shutdown_listener (self ):
@@ -65,47 +71,69 @@ def kill(self):
65
71
pass
66
72
67
73
68
- class DummyKernelProvider (RemoteKernelProviderBase ):
69
- """A dummy kernelspec provider subclass for testing"""
70
- id = 'dummy'
71
- kernel_file = 'dummy_kspec.json'
72
- lifecycle_manager_classes = ['remote_kernel_provider.tests.test_provider.DummyKernelLifecycleManager' ]
74
+ class BarKernelLifecycleManager (FooKernelLifecycleManager ):
75
+ pass # Full inheritance from FooKernelLifecycleManager
76
+
77
+
78
+ class FooKernelProvider (RemoteKernelProviderBase ):
79
+ """A fake kernelspec provider subclass for testing"""
80
+ id = 'foo'
81
+ kernel_file = 'foo_kspec.json'
82
+ lifecycle_manager_classes = ['remote_kernel_provider.tests.test_provider.FooKernelLifecycleManager' ]
83
+
84
+
85
+ class BarKernelProvider (RemoteKernelProviderBase ):
86
+ """A fake kernelspec provider subclass for testing"""
87
+ id = 'bar'
88
+ kernel_file = 'bar_kspec.json'
89
+ lifecycle_manager_classes = ['remote_kernel_provider.tests.test_provider.BarKernelLifecycleManager' ]
73
90
74
91
75
92
class RemoteKernelProviderTests (unittest .TestCase ):
76
93
77
94
def setUp (self ):
78
95
self .env_patch = test_env ()
79
96
self .env_patch .start ()
80
- self .sample_kernel_dir = install_sample_kernel (
81
- pjoin (paths .jupyter_data_dir (), 'kernels' ))
82
- self .prov_sample1_kernel_dir = install_sample_kernel (
83
- pjoin (paths .jupyter_data_dir (), 'kernels' ), 'dummy_kspec1' , 'dummy_kspec.json' )
84
- self .prov_sample2_kernel_dir = install_sample_kernel (
85
- pjoin (paths .jupyter_data_dir (), 'kernels' ), 'dummy_kspec2' , 'dummy_kspec.json' )
97
+ install_sample_kernel (pjoin (paths .jupyter_data_dir (), 'kernels' ))
98
+ install_sample_kernel (pjoin (paths .jupyter_data_dir (), 'kernels' ),
99
+ 'foo_kspec' , 'foo_kspec.json' , foo_kernel_json )
100
+ install_sample_kernel (pjoin (paths .jupyter_data_dir (), 'kernels' ),
101
+ 'foo_kspec2' , 'foo_kspec.json' , foo_kernel_json )
86
102
87
- self .kernel_finder = discovery .KernelFinder (providers = [DummyKernelProvider ()])
103
+ # This kspec overlaps with foo/foo_kspec. Will be located as bar/foo_kspec
104
+ install_sample_kernel (pjoin (paths .jupyter_data_dir (), 'kernels' ),
105
+ 'foo_kspec' , 'bar_kspec.json' , bar_kernel_json )
106
+
107
+ self .kernel_finder = discovery .KernelFinder (providers = [FooKernelProvider (),
108
+ BarKernelProvider ()])
88
109
89
110
def tearDown (self ):
90
111
self .env_patch .stop ()
91
112
92
113
def test_find_remote_kernel_provider (self ):
93
- dummy_kspecs = list (self .kernel_finder .find_kernels ())
94
- assert len (dummy_kspecs ) == 2
95
-
96
- for name , spec in dummy_kspecs :
97
- assert name .startswith ('dummy/dummy_kspec' )
98
- assert spec ['argv' ] == sample_kernel_json ['argv' ]
114
+ fake_kspecs = list (self .kernel_finder .find_kernels ())
115
+ assert len (fake_kspecs ) == 3
116
+
117
+ foo_kspecs = 0
118
+ for name , spec in fake_kspecs :
119
+ assert name .startswith ('/foo_kspec' , 3 )
120
+ assert spec ['argv' ] == foo_kernel_json ['argv' ]
121
+ if name .startswith ('foo/' ):
122
+ foo_kspecs += 1
123
+ assert spec ['display_name' ] == foo_kernel_json ['display_name' ]
124
+ else :
125
+ assert spec ['display_name' ] == bar_kernel_json ['display_name' ]
126
+ assert foo_kspecs == 2
99
127
100
128
def test_launch_remote_kernel_provider (self ):
101
- conn_info , manager = self .kernel_finder .launch ('dummy/dummy_kspec1 ' )
129
+ conn_info , manager = self .kernel_finder .launch ('foo/foo_kspec ' )
102
130
assert isinstance (manager , RemoteKernelManager )
103
- assert conn_info == dummy_connection_info
131
+ assert conn_info == foo_connection_info
104
132
assert manager .kernel_id is not None
105
133
assert is_uuid (manager .kernel_id )
106
134
107
135
manager .kill ()
108
136
assert manager .lifecycle_manager is not None
109
- assert isinstance (manager .lifecycle_manager , DummyKernelLifecycleManager )
137
+ assert isinstance (manager .lifecycle_manager , FooKernelLifecycleManager )
110
138
manager .cleanup ()
111
139
assert manager .lifecycle_manager is None
0 commit comments