##// END OF EJS Templates
Update CSP tests for new default.
Kyle Kelley -
Show More
@@ -1,133 +1,139 b''
1 1 """Test the kernels service API."""
2 2
3 3 import json
4 4 import requests
5 5
6 6 from IPython.html.utils import url_path_join
7 7 from IPython.html.tests.launchnotebook import NotebookTestBase, assert_http_error
8 8
9 9 class KernelAPI(object):
10 10 """Wrapper for kernel REST API requests"""
11 11 def __init__(self, base_url):
12 12 self.base_url = base_url
13 13
14 14 def _req(self, verb, path, body=None):
15 15 response = requests.request(verb,
16 16 url_path_join(self.base_url, 'api/kernels', path), data=body)
17 17
18 18 if 400 <= response.status_code < 600:
19 19 try:
20 20 response.reason = response.json()['message']
21 21 except:
22 22 pass
23 23 response.raise_for_status()
24 24
25 25 return response
26 26
27 27 def list(self):
28 28 return self._req('GET', '')
29 29
30 30 def get(self, id):
31 31 return self._req('GET', id)
32 32
33 33 def start(self, name='python'):
34 34 body = json.dumps({'name': name})
35 35 return self._req('POST', '', body)
36 36
37 37 def shutdown(self, id):
38 38 return self._req('DELETE', id)
39 39
40 40 def interrupt(self, id):
41 41 return self._req('POST', url_path_join(id, 'interrupt'))
42 42
43 43 def restart(self, id):
44 44 return self._req('POST', url_path_join(id, 'restart'))
45 45
46 46 class KernelAPITest(NotebookTestBase):
47 47 """Test the kernels web service API"""
48 48 def setUp(self):
49 49 self.kern_api = KernelAPI(self.base_url())
50 50
51 51 def tearDown(self):
52 52 for k in self.kern_api.list().json():
53 53 self.kern_api.shutdown(k['id'])
54 54
55 55 def test__no_kernels(self):
56 56 """Make sure there are no kernels running at the start"""
57 57 kernels = self.kern_api.list().json()
58 58 self.assertEqual(kernels, [])
59 59
60 60 def test_default_kernel(self):
61 61 # POST request
62 62 r = self.kern_api._req('POST', '')
63 63 kern1 = r.json()
64 64 self.assertEqual(r.headers['location'], '/api/kernels/' + kern1['id'])
65 65 self.assertEqual(r.status_code, 201)
66 66 self.assertIsInstance(kern1, dict)
67 67
68 self.assertEqual(r.headers['Content-Security-Policy'], "frame-ancestors 'self'")
68 self.assertEqual(r.headers['Content-Security-Policy'], (
69 "frame-ancestors 'self'; "
70 "report-uri /api/security/csp-report;"
71 ))
69 72
70 73 def test_main_kernel_handler(self):
71 74 # POST request
72 75 r = self.kern_api.start()
73 76 kern1 = r.json()
74 77 self.assertEqual(r.headers['location'], '/api/kernels/' + kern1['id'])
75 78 self.assertEqual(r.status_code, 201)
76 79 self.assertIsInstance(kern1, dict)
77 80
78 self.assertEqual(r.headers['Content-Security-Policy'], "frame-ancestors 'self'")
81 self.assertEqual(r.headers['Content-Security-Policy'], (
82 "frame-ancestors 'self'; "
83 "report-uri /api/security/csp-report;"
84 ))
79 85
80 86 # GET request
81 87 r = self.kern_api.list()
82 88 self.assertEqual(r.status_code, 200)
83 89 assert isinstance(r.json(), list)
84 90 self.assertEqual(r.json()[0]['id'], kern1['id'])
85 91 self.assertEqual(r.json()[0]['name'], kern1['name'])
86 92
87 93 # create another kernel and check that they both are added to the
88 94 # list of kernels from a GET request
89 95 kern2 = self.kern_api.start().json()
90 96 assert isinstance(kern2, dict)
91 97 r = self.kern_api.list()
92 98 kernels = r.json()
93 99 self.assertEqual(r.status_code, 200)
94 100 assert isinstance(kernels, list)
95 101 self.assertEqual(len(kernels), 2)
96 102
97 103 # Interrupt a kernel
98 104 r = self.kern_api.interrupt(kern2['id'])
99 105 self.assertEqual(r.status_code, 204)
100 106
101 107 # Restart a kernel
102 108 r = self.kern_api.restart(kern2['id'])
103 109 self.assertEqual(r.headers['Location'], '/api/kernels/'+kern2['id'])
104 110 rekern = r.json()
105 111 self.assertEqual(rekern['id'], kern2['id'])
106 112 self.assertEqual(rekern['name'], kern2['name'])
107 113
108 114 def test_kernel_handler(self):
109 115 # GET kernel with given id
110 116 kid = self.kern_api.start().json()['id']
111 117 r = self.kern_api.get(kid)
112 118 kern1 = r.json()
113 119 self.assertEqual(r.status_code, 200)
114 120 assert isinstance(kern1, dict)
115 121 self.assertIn('id', kern1)
116 122 self.assertEqual(kern1['id'], kid)
117 123
118 124 # Request a bad kernel id and check that a JSON
119 125 # message is returned!
120 126 bad_id = '111-111-111-111-111'
121 127 with assert_http_error(404, 'Kernel does not exist: ' + bad_id):
122 128 self.kern_api.get(bad_id)
123 129
124 130 # DELETE kernel with id
125 131 r = self.kern_api.shutdown(kid)
126 132 self.assertEqual(r.status_code, 204)
127 133 kernels = self.kern_api.list().json()
128 134 self.assertEqual(kernels, [])
129 135
130 136 # Request to delete a non-existent kernel id
131 137 bad_id = '111-111-111-111-111'
132 138 with assert_http_error(404, 'Kernel does not exist: ' + bad_id):
133 139 self.kern_api.shutdown(bad_id)
General Comments 0
You need to be logged in to leave comments. Login now