Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemath
GitHub Repository: sagemath/sagecell
Path: blob/master/tests/forking_kernel_manager_tests.py
447 views
1
import forking_kernel_manager
2
from misc import assert_is, assert_equal, assert_in, assert_not_in, assert_raises, assert_regexp_matches, assert_is_instance, assert_is_not_none, assert_greater, assert_len, assert_uuid, capture_output
3
from multiprocessing import Process, Pipe
4
from IPython.config.loader import Config
5
6
def test_init():
7
fkm = forking_kernel_manager.ForkingKernelManager("testing.log", '127.0.0.1', update_function=test_init)
8
assert_len(fkm.kernels, 0)
9
assert_equal(fkm.filename, "testing.log")
10
assert_in("function test_init at ", repr(fkm.update_function))
11
12
class TestForkingKernelManager(object):
13
def setup(self):
14
self.a = forking_kernel_manager.ForkingKernelManager("/dev/null", '127.0.0.1', update_function=None)
15
def teardown(self):
16
for i in self.a.kernels.keys():
17
self.a.kernels[i][0].terminate()
18
def test_start_kernel_success(self):
19
y = self.a.start_kernel()
20
21
assert_is_instance(y, dict)
22
assert_len(y, 2)
23
assert_in("kernel_id", y)
24
assert_uuid(y["kernel_id"])
25
assert_in("connection", y)
26
assert_len(y["connection"], 6)
27
for s in ("stdin_port", "hb_port", "shell_port", "iopub_port"):
28
assert_in(s, y["connection"])
29
assert_len(str(y["connection"][s]), 5)
30
assert_in("ip", y["connection"])
31
assert_equal(y["connection"]["ip"], "127.0.0.1")
32
assert_in("key", y["connection"])
33
assert_uuid(y["connection"]["key"])
34
35
assert_in(y["kernel_id"], self.a.kernels.keys())
36
assert_is_instance(self.a.kernels[y["kernel_id"]][0], Process)
37
assert_is(self.a.kernels[y["kernel_id"]][0].is_alive(), True)
38
39
def test_resource_limit_setting(self): # incomplete
40
y = self.a.start_kernel(resource_limits = {"RLIMIT_CPU": 3})
41
proc = self.a.kernels[y["kernel_id"]][0]
42
# how to test if rlimit_cpu/any other rlimit is set given the multiprocessing.Process object proc??
43
44
def test_kill_kernel_success(self): # depends on start_kernel
45
y = self.a.start_kernel()
46
kernel_id = y["kernel_id"]
47
proc = self.a.kernels[kernel_id][0]
48
49
assert_is(proc.is_alive(), True)
50
retval = self.a.kill_kernel(kernel_id)
51
assert_is(retval, True)
52
assert_not_in(kernel_id, self.a.kernels.keys())
53
assert_is(proc.is_alive(), False)
54
55
def test_kill_kernel_invalid_kernel_id(self):
56
kernel_id = 44
57
retval = self.a.kill_kernel(kernel_id)
58
assert_is(retval, False)
59
60
def test_interrupt_kernel_success(self): # depends on start_kernel
61
y = self.a.start_kernel()
62
kernel_id = y["kernel_id"]
63
proc = self.a.kernels[kernel_id][0]
64
65
assert_is(proc.is_alive(), True)
66
retval = self.a.interrupt_kernel(kernel_id)
67
assert_is(retval, True)
68
assert_is(proc.is_alive(), True)
69
70
def test_interrupt_kernel_invalid_kernel_id(self):
71
kernel_id = 44
72
retval = self.a.interrupt_kernel(kernel_id)
73
assert_is(retval, False)
74
75
def test_restart_kernel_success(self): # depends on start_kernel
76
y = self.a.start_kernel()
77
kernel_id = y["kernel_id"]
78
proc = self.a.kernels[kernel_id][0]
79
preports = self.a.kernels[kernel_id][1]
80
81
assert_is(proc.is_alive(), True)
82
retval = self.a.restart_kernel(kernel_id)
83
assert_is(proc.is_alive(), False) # old kernel process is killed
84
85
proc = self.a.kernels[kernel_id][0]
86
assert_is(proc.is_alive(), True) # and a new kernel process with the same kernel_id exists
87
postports = self.a.kernels[kernel_id][1]
88
89
for s in ("stdin_port", "hb_port", "shell_port", "iopub_port"):
90
assert_equal(preports[s], postports[s]) # and that it has the same ports as before
91
92