##// END OF EJS Templates
Disable ipdoctest outside core...
Disable ipdoctest outside core Ultimately, we can get rid of ipdoctest, but we still have several doctests in core.

File last commit:

r20498:3a3101e6
r21133:729e77b5
Show More
test_sessionmanager.py
162 lines | 6.2 KiB | text/x-python | PythonLexer
"""Tests for the session manager."""
from unittest import TestCase
from tornado import web
from ..sessionmanager import SessionManager
from IPython.html.services.kernels.kernelmanager import MappingKernelManager
from IPython.html.services.contents.manager import ContentsManager
class DummyKernel(object):
def __init__(self, kernel_name='python'):
self.kernel_name = kernel_name
class DummyMKM(MappingKernelManager):
"""MappingKernelManager interface that doesn't start kernels, for testing"""
def __init__(self, *args, **kwargs):
super(DummyMKM, self).__init__(*args, **kwargs)
self.id_letters = iter(u'ABCDEFGHIJK')
def _new_id(self):
return next(self.id_letters)
def start_kernel(self, kernel_id=None, path=None, kernel_name='python', **kwargs):
kernel_id = kernel_id or self._new_id()
self._kernels[kernel_id] = DummyKernel(kernel_name=kernel_name)
return kernel_id
def shutdown_kernel(self, kernel_id, now=False):
del self._kernels[kernel_id]
class TestSessionManager(TestCase):
def setUp(self):
self.sm = SessionManager(
kernel_manager=DummyMKM(),
contents_manager=ContentsManager(),
)
def test_get_session(self):
sm = self.sm
session_id = sm.create_session(path='/path/to/test.ipynb',
kernel_name='bar')['id']
model = sm.get_session(session_id=session_id)
expected = {'id':session_id,
'notebook':{'path': u'/path/to/test.ipynb'},
'kernel': {'id':u'A', 'name': 'bar'}}
self.assertEqual(model, expected)
def test_bad_get_session(self):
# Should raise error if a bad key is passed to the database.
sm = self.sm
session_id = sm.create_session(path='/path/to/test.ipynb',
kernel_name='foo')['id']
self.assertRaises(TypeError, sm.get_session, bad_id=session_id) # Bad keyword
def test_get_session_dead_kernel(self):
sm = self.sm
session = sm.create_session(path='/path/to/1/test1.ipynb', kernel_name='python')
# kill the kernel
sm.kernel_manager.shutdown_kernel(session['kernel']['id'])
with self.assertRaises(KeyError):
sm.get_session(session_id=session['id'])
# no sessions left
listed = sm.list_sessions()
self.assertEqual(listed, [])
def test_list_sessions(self):
sm = self.sm
sessions = [
sm.create_session(path='/path/to/1/test1.ipynb', kernel_name='python'),
sm.create_session(path='/path/to/2/test2.ipynb', kernel_name='python'),
sm.create_session(path='/path/to/3/test3.ipynb', kernel_name='python'),
]
sessions = sm.list_sessions()
expected = [
{
'id':sessions[0]['id'],
'notebook':{'path': u'/path/to/1/test1.ipynb'},
'kernel':{'id':u'A', 'name':'python'}
}, {
'id':sessions[1]['id'],
'notebook': {'path': u'/path/to/2/test2.ipynb'},
'kernel':{'id':u'B', 'name':'python'}
}, {
'id':sessions[2]['id'],
'notebook':{'path': u'/path/to/3/test3.ipynb'},
'kernel':{'id':u'C', 'name':'python'}
}
]
self.assertEqual(sessions, expected)
def test_list_sessions_dead_kernel(self):
sm = self.sm
sessions = [
sm.create_session(path='/path/to/1/test1.ipynb', kernel_name='python'),
sm.create_session(path='/path/to/2/test2.ipynb', kernel_name='python'),
]
# kill one of the kernels
sm.kernel_manager.shutdown_kernel(sessions[0]['kernel']['id'])
listed = sm.list_sessions()
expected = [
{
'id': sessions[1]['id'],
'notebook': {
'path': u'/path/to/2/test2.ipynb',
},
'kernel': {
'id': u'B',
'name':'python',
}
}
]
self.assertEqual(listed, expected)
def test_update_session(self):
sm = self.sm
session_id = sm.create_session(path='/path/to/test.ipynb',
kernel_name='julia')['id']
sm.update_session(session_id, path='/path/to/new_name.ipynb')
model = sm.get_session(session_id=session_id)
expected = {'id':session_id,
'notebook':{'path': u'/path/to/new_name.ipynb'},
'kernel':{'id':u'A', 'name':'julia'}}
self.assertEqual(model, expected)
def test_bad_update_session(self):
# try to update a session with a bad keyword ~ raise error
sm = self.sm
session_id = sm.create_session(path='/path/to/test.ipynb',
kernel_name='ir')['id']
self.assertRaises(TypeError, sm.update_session, session_id=session_id, bad_kw='test.ipynb') # Bad keyword
def test_delete_session(self):
sm = self.sm
sessions = [
sm.create_session(path='/path/to/1/test1.ipynb', kernel_name='python'),
sm.create_session(path='/path/to/2/test2.ipynb', kernel_name='python'),
sm.create_session(path='/path/to/3/test3.ipynb', kernel_name='python'),
]
sm.delete_session(sessions[1]['id'])
new_sessions = sm.list_sessions()
expected = [{
'id': sessions[0]['id'],
'notebook': {'path': u'/path/to/1/test1.ipynb'},
'kernel': {'id':u'A', 'name':'python'}
}, {
'id': sessions[2]['id'],
'notebook': {'path': u'/path/to/3/test3.ipynb'},
'kernel': {'id':u'C', 'name':'python'}
}
]
self.assertEqual(new_sessions, expected)
def test_bad_delete_session(self):
# try to delete a session that doesn't exist ~ raise error
sm = self.sm
sm.create_session(path='/path/to/test.ipynb', kernel_name='python')
self.assertRaises(TypeError, sm.delete_session, bad_kwarg='23424') # Bad keyword
self.assertRaises(web.HTTPError, sm.delete_session, session_id='23424') # nonexistant