|
5 | 5 | from tornado import web |
6 | 6 |
|
7 | 7 | from ..sessionmanager import SessionManager |
| 8 | +from IPython.html.services.kernels.kernelmanager import MappingKernelManager |
| 9 | + |
| 10 | +class DummyKernel(object): |
| 11 | + def __init__(self, kernel_name='python'): |
| 12 | + self.kernel_name = kernel_name |
| 13 | + |
| 14 | +class DummyMKM(MappingKernelManager): |
| 15 | + """MappingKernelManager interface that doesn't start kernels, for testing""" |
| 16 | + def __init__(self, *args, **kwargs): |
| 17 | + super(DummyMKM, self).__init__(*args, **kwargs) |
| 18 | + self.id_letters = iter(u'ABCDEFGHIJK') |
| 19 | + |
| 20 | + def _new_id(self): |
| 21 | + return next(self.id_letters) |
| 22 | + |
| 23 | + def start_kernel(self, kernel_id=None, path=None, kernel_name='python', **kwargs): |
| 24 | + kernel_id = kernel_id or self._new_id() |
| 25 | + self._kernels[kernel_id] = DummyKernel(kernel_name=kernel_name) |
| 26 | + return kernel_id |
| 27 | + |
| 28 | + def shutdown_kernel(self, kernel_id, now=False): |
| 29 | + del self._kernels[kernel_id] |
8 | 30 |
|
9 | 31 | class TestSessionManager(TestCase): |
10 | 32 |
|
11 | 33 | def test_get_session(self): |
12 | | - sm = SessionManager() |
13 | | - session_id = sm.new_session_id() |
14 | | - sm.save_session(session_id=session_id, name='test.ipynb', path='/path/to/', kernel_id='5678') |
| 34 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 35 | + session_id = sm.create_session(name='test.ipynb', path='/path/to/', |
| 36 | + kernel_name='bar')['id'] |
15 | 37 | model = sm.get_session(session_id=session_id) |
16 | | - expected = {'id':session_id, 'notebook':{'name':u'test.ipynb', 'path': u'/path/to/'}, 'kernel':{'id':u'5678'}} |
| 38 | + expected = {'id':session_id, |
| 39 | + 'notebook':{'name':u'test.ipynb', 'path': u'/path/to/'}, |
| 40 | + 'kernel': {'id':u'A', 'name': 'bar'}} |
17 | 41 | self.assertEqual(model, expected) |
18 | 42 |
|
19 | 43 | def test_bad_get_session(self): |
20 | 44 | # Should raise error if a bad key is passed to the database. |
21 | | - sm = SessionManager() |
22 | | - session_id = sm.new_session_id() |
23 | | - sm.save_session(session_id=session_id, name='test.ipynb', path='/path/to/', kernel_id='5678') |
| 45 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 46 | + session_id = sm.create_session(name='test.ipynb', path='/path/to/', |
| 47 | + kernel_name='foo')['id'] |
24 | 48 | self.assertRaises(TypeError, sm.get_session, bad_id=session_id) # Bad keyword |
25 | 49 |
|
26 | 50 | def test_list_sessions(self): |
27 | | - sm = SessionManager() |
28 | | - session_id1 = sm.new_session_id() |
29 | | - session_id2 = sm.new_session_id() |
30 | | - session_id3 = sm.new_session_id() |
31 | | - sm.save_session(session_id=session_id1, name='test1.ipynb', path='/path/to/1/', kernel_id='5678') |
32 | | - sm.save_session(session_id=session_id2, name='test2.ipynb', path='/path/to/2/', kernel_id='5678') |
33 | | - sm.save_session(session_id=session_id3, name='test3.ipynb', path='/path/to/3/', kernel_id='5678') |
| 51 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 52 | + sessions = [ |
| 53 | + sm.create_session(name='test1.ipynb', path='/path/to/1/', kernel_name='python'), |
| 54 | + sm.create_session(name='test2.ipynb', path='/path/to/2/', kernel_name='python'), |
| 55 | + sm.create_session(name='test3.ipynb', path='/path/to/3/', kernel_name='python'), |
| 56 | + ] |
34 | 57 | sessions = sm.list_sessions() |
35 | | - expected = [{'id':session_id1, 'notebook':{'name':u'test1.ipynb', |
36 | | - 'path': u'/path/to/1/'}, 'kernel':{'id':u'5678'}}, |
37 | | - {'id':session_id2, 'notebook': {'name':u'test2.ipynb', |
38 | | - 'path': u'/path/to/2/'}, 'kernel':{'id':u'5678'}}, |
39 | | - {'id':session_id3, 'notebook':{'name':u'test3.ipynb', |
40 | | - 'path': u'/path/to/3/'}, 'kernel':{'id':u'5678'}}] |
| 58 | + expected = [{'id':sessions[0]['id'], 'notebook':{'name':u'test1.ipynb', |
| 59 | + 'path': u'/path/to/1/'}, 'kernel':{'id':u'A', 'name':'python'}}, |
| 60 | + {'id':sessions[1]['id'], 'notebook': {'name':u'test2.ipynb', |
| 61 | + 'path': u'/path/to/2/'}, 'kernel':{'id':u'B', 'name':'python'}}, |
| 62 | + {'id':sessions[2]['id'], 'notebook':{'name':u'test3.ipynb', |
| 63 | + 'path': u'/path/to/3/'}, 'kernel':{'id':u'C', 'name':'python'}}] |
41 | 64 | self.assertEqual(sessions, expected) |
42 | 65 |
|
43 | 66 | def test_update_session(self): |
44 | | - sm = SessionManager() |
45 | | - session_id = sm.new_session_id() |
46 | | - sm.save_session(session_id=session_id, name='test.ipynb', path='/path/to/', kernel_id=None) |
47 | | - sm.update_session(session_id, kernel_id='5678') |
| 67 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 68 | + session_id = sm.create_session(name='test.ipynb', path='/path/to/', |
| 69 | + kernel_name='julia')['id'] |
48 | 70 | sm.update_session(session_id, name='new_name.ipynb') |
49 | 71 | model = sm.get_session(session_id=session_id) |
50 | | - expected = {'id':session_id, 'notebook':{'name':u'new_name.ipynb', 'path': u'/path/to/'}, 'kernel':{'id':u'5678'}} |
| 72 | + expected = {'id':session_id, |
| 73 | + 'notebook':{'name':u'new_name.ipynb', 'path': u'/path/to/'}, |
| 74 | + 'kernel':{'id':u'A', 'name':'julia'}} |
51 | 75 | self.assertEqual(model, expected) |
52 | 76 |
|
53 | 77 | def test_bad_update_session(self): |
54 | 78 | # try to update a session with a bad keyword ~ raise error |
55 | | - sm = SessionManager() |
56 | | - session_id = sm.new_session_id() |
57 | | - sm.save_session(session_id=session_id, name='test.ipynb', path='/path/to/', kernel_id='5678') |
| 79 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 80 | + session_id = sm.create_session(name='test.ipynb', path='/path/to/', |
| 81 | + kernel_name='ir')['id'] |
58 | 82 | self.assertRaises(TypeError, sm.update_session, session_id=session_id, bad_kw='test.ipynb') # Bad keyword |
59 | 83 |
|
60 | 84 | def test_delete_session(self): |
61 | | - sm = SessionManager() |
62 | | - session_id1 = sm.new_session_id() |
63 | | - session_id2 = sm.new_session_id() |
64 | | - session_id3 = sm.new_session_id() |
65 | | - sm.save_session(session_id=session_id1, name='test1.ipynb', path='/path/to/1/', kernel_id='5678') |
66 | | - sm.save_session(session_id=session_id2, name='test2.ipynb', path='/path/to/2/', kernel_id='5678') |
67 | | - sm.save_session(session_id=session_id3, name='test3.ipynb', path='/path/to/3/', kernel_id='5678') |
68 | | - sm.delete_session(session_id2) |
69 | | - sessions = sm.list_sessions() |
70 | | - expected = [{'id':session_id1, 'notebook':{'name':u'test1.ipynb', |
71 | | - 'path': u'/path/to/1/'}, 'kernel':{'id':u'5678'}}, |
72 | | - {'id':session_id3, 'notebook':{'name':u'test3.ipynb', |
73 | | - 'path': u'/path/to/3/'}, 'kernel':{'id':u'5678'}}] |
74 | | - self.assertEqual(sessions, expected) |
| 85 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 86 | + sessions = [ |
| 87 | + sm.create_session(name='test1.ipynb', path='/path/to/1/', kernel_name='python'), |
| 88 | + sm.create_session(name='test2.ipynb', path='/path/to/2/', kernel_name='python'), |
| 89 | + sm.create_session(name='test3.ipynb', path='/path/to/3/', kernel_name='python'), |
| 90 | + ] |
| 91 | + sm.delete_session(sessions[1]['id']) |
| 92 | + new_sessions = sm.list_sessions() |
| 93 | + expected = [{'id':sessions[0]['id'], 'notebook':{'name':u'test1.ipynb', |
| 94 | + 'path': u'/path/to/1/'}, 'kernel':{'id':u'A', 'name':'python'}}, |
| 95 | + {'id':sessions[2]['id'], 'notebook':{'name':u'test3.ipynb', |
| 96 | + 'path': u'/path/to/3/'}, 'kernel':{'id':u'C', 'name':'python'}}] |
| 97 | + self.assertEqual(new_sessions, expected) |
75 | 98 |
|
76 | 99 | def test_bad_delete_session(self): |
77 | 100 | # try to delete a session that doesn't exist ~ raise error |
78 | | - sm = SessionManager() |
79 | | - session_id = sm.new_session_id() |
80 | | - sm.save_session(session_id=session_id, name='test.ipynb', path='/path/to/', kernel_id='5678') |
| 101 | + sm = SessionManager(kernel_manager=DummyMKM()) |
| 102 | + sm.create_session(name='test.ipynb', path='/path/to/', kernel_name='python') |
81 | 103 | self.assertRaises(TypeError, sm.delete_session, bad_kwarg='23424') # Bad keyword |
82 | 104 | self.assertRaises(web.HTTPError, sm.delete_session, session_id='23424') # nonexistant |
83 | 105 |
|
0 commit comments