|
|
"""Test the kernels service API."""
|
|
|
|
|
|
|
|
|
import os
|
|
|
import sys
|
|
|
import json
|
|
|
|
|
|
import requests
|
|
|
|
|
|
from IPython.html.utils import url_path_join
|
|
|
from IPython.html.tests.launchnotebook import NotebookTestBase
|
|
|
|
|
|
|
|
|
class KernelAPITest(NotebookTestBase):
|
|
|
"""Test the kernels web service API"""
|
|
|
|
|
|
def base_url(self):
|
|
|
return url_path_join(super(KernelAPITest,self).base_url(), 'api/kernels')
|
|
|
|
|
|
def mkkernel(self):
|
|
|
r = requests.post(self.base_url())
|
|
|
return r.json()
|
|
|
|
|
|
def test__no_kernels(self):
|
|
|
"""Make sure there are no kernels running at the start"""
|
|
|
url = self.base_url()
|
|
|
r = requests.get(url)
|
|
|
self.assertEqual(r.json(), [])
|
|
|
|
|
|
def test_main_kernel_handler(self):
|
|
|
# POST request
|
|
|
r = requests.post(self.base_url())
|
|
|
data = r.json()
|
|
|
status = r.status_code
|
|
|
header = r.headers
|
|
|
self.assertIn('location', header)
|
|
|
self.assertEquals(header['location'], '/api/kernels/' + data['id'])
|
|
|
self.assertEquals(status, 201)
|
|
|
assert isinstance(data, dict)
|
|
|
|
|
|
# GET request
|
|
|
r = requests.get(self.base_url())
|
|
|
status = r.status_code
|
|
|
self.assertEquals(status, 200)
|
|
|
assert isinstance(r.json(), list)
|
|
|
self.assertEqual(r.json()[0]['id'], data['id'])
|
|
|
|
|
|
# create another kernel and check that they both are added to the
|
|
|
# list of kernels from a GET request
|
|
|
data2 = self.mkkernel()
|
|
|
assert isinstance(data2, dict)
|
|
|
r = requests.get(self.base_url())
|
|
|
kernels = r.json()
|
|
|
status = r.status_code
|
|
|
self.assertEquals(status, 200)
|
|
|
assert isinstance(kernels, list)
|
|
|
self.assertEquals(len(kernels), 2)
|
|
|
|
|
|
def test_kernel_handler(self):
|
|
|
# GET kernel with given id
|
|
|
data = self.mkkernel()
|
|
|
url = self.base_url() +'/' + data['id']
|
|
|
r = requests.get(url)
|
|
|
data1 = r.json()
|
|
|
status = r.status_code
|
|
|
self.assertEquals(status, 200)
|
|
|
assert isinstance(data1, dict)
|
|
|
self.assertIn('id', data1)
|
|
|
self.assertIn('ws_url', data1)
|
|
|
self.assertEqual(data1['id'], data['id'])
|
|
|
|
|
|
# Request a bad kernel id and check that a JSON
|
|
|
# message is returned!
|
|
|
bad_id = '111-111-111-111-111'
|
|
|
bad_url = self.base_url() + '/' + bad_id
|
|
|
r = requests.get(bad_url)
|
|
|
status = r.status_code
|
|
|
message = r.json()
|
|
|
self.assertEquals(status, 404)
|
|
|
assert isinstance(message, dict)
|
|
|
self.assertIn('message', message)
|
|
|
self.assertEquals(message['message'], 'Kernel does not exist: ' + bad_id)
|
|
|
|
|
|
# DELETE kernel with id
|
|
|
r = requests.delete(url)
|
|
|
self.assertEqual(r.status_code, 204)
|
|
|
r = requests.get(self.base_url())
|
|
|
self.assertEqual(r.json(), [])
|
|
|
|
|
|
# Request to delete a non-existent kernel id
|
|
|
bad_id = '111-111-111-111-111'
|
|
|
bad_url = self.base_url() + '/' + bad_id
|
|
|
r = requests.delete(bad_url)
|
|
|
status = r.status_code
|
|
|
message = r.json()
|
|
|
self.assertEquals(status, 404)
|
|
|
assert isinstance(message, dict)
|
|
|
self.assertIn('message', message)
|
|
|
self.assertEquals(message['message'], 'Kernel does not exist: ' + bad_id)
|
|
|
|