##// END OF EJS Templates
support notebooks in %run...
support notebooks in %run Simple enough - just generalized safe_exec_ipy a bit to support a sequence of cells rather than just one cell (the .ipy behavior). I think we have an issue open for this, but I can't seem to find it.

File last commit:

r13107:eb47a8e7
r13644:2a11e86f
Show More
test_kernels_api.py
124 lines | 3.8 KiB | text/x-python | PythonLexer
Brian E. Granger
Added base class for Notebook API tests.
r13038 """Test the kernels service API."""
import os
import sys
import json
import requests
Zachary Sailer
Code review changes....
r13048 from IPython.html.utils import url_path_join
Thomas Kluyver
Refactor tests for kernels REST API
r13105 from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error
Brian E. Granger
Added base class for Notebook API tests.
r13038
Thomas Kluyver
Refactor tests for kernels REST API
r13105 class KernelAPI(object):
"""Wrapper for kernel REST API requests"""
def __init__(self, base_url):
self.base_url = base_url
def _req(self, verb, path, body=None):
response = requests.request(verb,
url_path_join(self.base_url, 'api/kernels', path), data=body)
if 400 <= response.status_code < 600:
try:
response.reason = response.json()['message']
except:
pass
response.raise_for_status()
return response
def list(self):
return self._req('GET', '')
def get(self, id):
return self._req('GET', id)
def start(self):
return self._req('POST', '')
def shutdown(self, id):
return self._req('DELETE', id)
def interrupt(self, id):
return self._req('POST', url_path_join(id, 'interrupt'))
def restart(self, id):
return self._req('POST', url_path_join(id, 'restart'))
Brian E. Granger
Added base class for Notebook API tests.
r13038
class KernelAPITest(NotebookTestBase):
"""Test the kernels web service API"""
Thomas Kluyver
Refactor tests for kernels REST API
r13105 def setUp(self):
self.kern_api = KernelAPI(self.base_url())
Brian E. Granger
Added base class for Notebook API tests.
r13038
Thomas Kluyver
Refactor tests for kernels REST API
r13105 def tearDown(self):
for k in self.kern_api.list().json():
self.kern_api.shutdown(k['id'])
Zachary Sailer
review fixes on tests, add extra kernel api test
r13045
MinRK
ensure test_no_kernels runs first...
r13050 def test__no_kernels(self):
Brian E. Granger
Added base class for Notebook API tests.
r13038 """Make sure there are no kernels running at the start"""
Thomas Kluyver
Refactor tests for kernels REST API
r13105 kernels = self.kern_api.list().json()
self.assertEqual(kernels, [])
Zachary Sailer
add tests for session api
r13044
def test_main_kernel_handler(self):
# POST request
Thomas Kluyver
Refactor tests for kernels REST API
r13105 r = self.kern_api.start()
kern1 = r.json()
Thomas Kluyver
Use assertEqual, not deprecated assertEquals
r13107 self.assertEqual(r.headers['location'], '/api/kernels/' + kern1['id'])
self.assertEqual(r.status_code, 201)
Thomas Kluyver
Refactor tests for kernels REST API
r13105 self.assertIsInstance(kern1, dict)
Zachary Sailer
add tests for session api
r13044
# GET request
Thomas Kluyver
Refactor tests for kernels REST API
r13105 r = self.kern_api.list()
Thomas Kluyver
Use assertEqual, not deprecated assertEquals
r13107 self.assertEqual(r.status_code, 200)
Zachary Sailer
add tests for session api
r13044 assert isinstance(r.json(), list)
Thomas Kluyver
Refactor tests for kernels REST API
r13105 self.assertEqual(r.json()[0]['id'], kern1['id'])
# create another kernel and check that they both are added to the
Zachary Sailer
adding to test_kernels_api.py...
r13058 # list of kernels from a GET request
Thomas Kluyver
Refactor tests for kernels REST API
r13105 kern2 = self.kern_api.start().json()
assert isinstance(kern2, dict)
r = self.kern_api.list()
Zachary Sailer
adding to test_kernels_api.py...
r13058 kernels = r.json()
Thomas Kluyver
Use assertEqual, not deprecated assertEquals
r13107 self.assertEqual(r.status_code, 200)
Zachary Sailer
adding to test_kernels_api.py...
r13058 assert isinstance(kernels, list)
Thomas Kluyver
Use assertEqual, not deprecated assertEquals
r13107 self.assertEqual(len(kernels), 2)
Zachary Sailer
add tests for session api
r13044
Thomas Kluyver
Add tests for interrupting & restarting kernel...
r13106 # Interrupt a kernel
r = self.kern_api.interrupt(kern2['id'])
self.assertEqual(r.status_code, 204)
# Restart a kernel
r = self.kern_api.restart(kern2['id'])
self.assertEqual(r.headers['Location'], '/api/kernels/'+kern2['id'])
rekern = r.json()
self.assertEqual(rekern['id'], kern2['id'])
self.assertIn('ws_url', rekern)
Zachary Sailer
review fixes on tests, add extra kernel api test
r13045 def test_kernel_handler(self):
Zachary Sailer
adding to test_kernels_api.py...
r13058 # GET kernel with given id
Thomas Kluyver
Refactor tests for kernels REST API
r13105 kid = self.kern_api.start().json()['id']
r = self.kern_api.get(kid)
kern1 = r.json()
Thomas Kluyver
Use assertEqual, not deprecated assertEquals
r13107 self.assertEqual(r.status_code, 200)
Thomas Kluyver
Refactor tests for kernels REST API
r13105 assert isinstance(kern1, dict)
self.assertIn('id', kern1)
self.assertIn('ws_url', kern1)
self.assertEqual(kern1['id'], kid)
Zachary Sailer
adding to test_kernels_api.py...
r13058 # Request a bad kernel id and check that a JSON
# message is returned!
bad_id = '111-111-111-111-111'
Thomas Kluyver
Refactor tests for kernels REST API
r13105 with assert_http_error(404, 'Kernel does not exist: ' + bad_id):
self.kern_api.get(bad_id)
Zachary Sailer
review fixes on tests, add extra kernel api test
r13045 # DELETE kernel with id
Thomas Kluyver
Refactor tests for kernels REST API
r13105 r = self.kern_api.shutdown(kid)
Zachary Sailer
review fixes on tests, add extra kernel api test
r13045 self.assertEqual(r.status_code, 204)
Thomas Kluyver
Refactor tests for kernels REST API
r13105 kernels = self.kern_api.list().json()
self.assertEqual(kernels, [])
Zachary Sailer
adding to test_kernels_api.py...
r13058 # Request to delete a non-existent kernel id
bad_id = '111-111-111-111-111'
Thomas Kluyver
Refactor tests for kernels REST API
r13105 with assert_http_error(404, 'Kernel does not exist: ' + bad_id):
self.kern_api.shutdown(bad_id)