diff --git a/IPython/html/services/kernels/tests/__init__.py b/IPython/html/services/kernels/tests/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/IPython/html/services/kernels/tests/__init__.py diff --git a/IPython/html/services/kernels/tests/test_api.py b/IPython/html/services/kernels/tests/test_api.py new file mode 100644 index 0000000..4dbf2f7 --- /dev/null +++ b/IPython/html/services/kernels/tests/test_api.py @@ -0,0 +1,23 @@ +"""Test the kernels service API.""" + + +import os +import sys +import json + +import requests + +from IPython.html.tests.launchnotebook import NotebookTestBase + + +class KernelAPITest(NotebookTestBase): + """Test the kernels web service API""" + + def base_url(self): + return super(KernelAPITest,self).base_url() + 'api/kernels' + + def test_no_kernels(self): + """Make sure there are no kernels running at the start""" + url = self.base_url() + r = requests.get(url) + assert r.json() == [] diff --git a/IPython/html/tests/launchnotebook.py b/IPython/html/tests/launchnotebook.py new file mode 100644 index 0000000..a83cbc3 --- /dev/null +++ b/IPython/html/tests/launchnotebook.py @@ -0,0 +1,40 @@ +"""Base class for notebook tests.""" + +import sys +import time +from subprocess import Popen, PIPE +from unittest import TestCase + +from IPython.utils.tempdir import TemporaryDirectory + + +class NotebookTestBase(TestCase): + """A base class for tests that need a running notebook. + + This creates an empty profile in a temp ipython_dir + and then starts the notebook server with a separate temp notebook_dir. + """ + + port = 12342 + + def setUp(self): + self.ipython_dir = TemporaryDirectory() + self.notebook_dir = TemporaryDirectory() + notebook_args = [ + sys.executable, '-c', + 'from IPython.html.notebookapp import launch_new_instance; launch_new_instance()', + '--port=%d' % self.port, + '--no-browser', + '--ipython-dir=%s' % self.ipython_dir.name, + '--notebook-dir=%s' % self.notebook_dir.name + ] + self.notebook = Popen(notebook_args, stdout=PIPE, stderr=PIPE) + time.sleep(3.0) + + def tearDown(self): + self.notebook.terminate() + self.ipython_dir.cleanup() + self.notebook_dir.cleanup() + + def base_url(self): + return 'http://localhost:%i/' % self.port