]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/tests/test_controllers.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / pybind / mgr / dashboard / tests / test_controllers.py
CommitLineData
11fdf7f2 1# -*- coding: utf-8 -*-
11fdf7f2 2
a4b75251
TL
3from ..controllers import APIRouter, BaseController, Endpoint, RESTController, Router
4from ..tests import ControllerTestCase
11fdf7f2
TL
5
6
a4b75251 7@Router("/btest/{key}", base_url="/ui", secure=False)
11fdf7f2
TL
8class BTest(BaseController):
9 @Endpoint()
10 def test1(self, key, opt=1):
11 return {'key': key, 'opt': opt}
12
13 @Endpoint()
14 def test2(self, key, skey, opt=1):
15 return {'key': key, 'skey': skey, 'opt': opt}
16
17 @Endpoint(path="/foo/{skey}/test-3")
18 def test3(self, key, skey, opt=1):
19 return {'key': key, 'skey': skey, 'opt': opt}
20
21 @Endpoint('POST', path="/foo/{skey}/test-3", query_params=['opt'])
22 def test4(self, key, skey, data, opt=1):
23 return {'key': key, 'skey': skey, 'data': data, 'opt': opt}
24
25 @Endpoint('PUT', path_params=['skey'], query_params=['opt'])
26 def test5(self, key, skey, data1, data2=None, opt=1):
27 return {'key': key, 'skey': skey, 'data1': data1, 'data2': data2,
28 'opt': opt}
29
30 @Endpoint('GET', json_response=False)
31 def test6(self, key, opt=1):
32 return "My Formatted string key={} opt={}".format(key, opt)
33
34 @Endpoint()
35 def __call__(self, key, opt=1):
36 return {'key': key, 'opt': opt}
37
38
a4b75251 39@APIRouter("/rtest/{key}", secure=False)
11fdf7f2
TL
40class RTest(RESTController):
41 RESOURCE_ID = 'skey/ekey'
42
43 def list(self, key, opt=1):
44 return {'key': key, 'opt': opt}
45
46 def create(self, key, data1, data2=None):
47 return {'key': key, 'data1': data1, 'data2': data2}
48
49 def get(self, key, skey, ekey, opt=1):
50 return {'key': key, 'skey': skey, 'ekey': ekey, 'opt': opt}
51
52 def set(self, key, skey, ekey, data):
53 return {'key': key, 'skey': skey, 'ekey': ekey, 'data': data}
54
55 def delete(self, key, skey, ekey, opt=1):
56 pass
57
58 def bulk_set(self, key, data1, data2=None):
59 return {'key': key, 'data1': data1, 'data2': data2}
60
61 def bulk_delete(self, key, opt=1):
62 pass
63
64 @RESTController.Collection('POST')
65 def cmethod(self, key, data):
66 return {'key': key, 'data': data}
67
68 @RESTController.Resource('GET')
69 def rmethod(self, key, skey, ekey, opt=1):
70 return {'key': key, 'skey': skey, 'ekey': ekey, 'opt': opt}
71
72
a4b75251 73@Router("/", secure=False)
11fdf7f2
TL
74class Root(BaseController):
75 @Endpoint(json_response=False)
76 def __call__(self):
77 return "<html></html>"
78
79
80class ControllersTest(ControllerTestCase):
81 @classmethod
82 def setup_server(cls):
83 cls.setup_controllers([BTest, RTest], "/test")
84
85 def test_1(self):
86 self._get('/test/ui/btest/{}/test1?opt=3'.format(100))
87 self.assertStatus(200)
88 self.assertJsonBody({'key': '100', 'opt': '3'})
89
90 def test_2(self):
91 self._get('/test/ui/btest/{}/test2/{}?opt=3'.format(100, 200))
92 self.assertStatus(200)
93 self.assertJsonBody({'key': '100', 'skey': '200', 'opt': '3'})
94
95 def test_3(self):
96 self._get('/test/ui/btest/{}/foo/{}/test-3?opt=3'.format(100, 200))
97 self.assertStatus(200)
98 self.assertJsonBody({'key': '100', 'skey': '200', 'opt': '3'})
99
100 def test_4(self):
101 self._post('/test/ui/btest/{}/foo/{}/test-3?opt=3'.format(100, 200),
102 {'data': 30})
103 self.assertStatus(200)
104 self.assertJsonBody({'key': '100', 'skey': '200', 'data': 30,
105 'opt': '3'})
106
107 def test_5(self):
108 self._put('/test/ui/btest/{}/test5/{}?opt=3'.format(100, 200),
109 {'data1': 40, 'data2': "hello"})
110 self.assertStatus(200)
111 self.assertJsonBody({'key': '100', 'skey': '200', 'data1': 40,
112 'data2': "hello", 'opt': '3'})
113
114 def test_6(self):
115 self._get('/test/ui/btest/{}/test6'.format(100))
116 self.assertStatus(200)
117 self.assertBody("My Formatted string key=100 opt=1")
118
119 def test_7(self):
120 self._get('/test/ui/btest/{}?opt=3'.format(100))
121 self.assertStatus(200)
122 self.assertJsonBody({'key': '100', 'opt': '3'})
123
124 def test_rest_list(self):
125 self._get('/test/api/rtest/{}?opt=2'.format(300))
126 self.assertStatus(200)
127 self.assertJsonBody({'key': '300', 'opt': '2'})
128
129 def test_rest_create(self):
130 self._post('/test/api/rtest/{}'.format(300),
131 {'data1': 20, 'data2': True})
132 self.assertStatus(201)
133 self.assertJsonBody({'key': '300', 'data1': 20, 'data2': True})
134
135 def test_rest_get(self):
136 self._get('/test/api/rtest/{}/{}/{}?opt=3'.format(300, 1, 2))
137 self.assertStatus(200)
138 self.assertJsonBody({'key': '300', 'skey': '1', 'ekey': '2',
139 'opt': '3'})
140
141 def test_rest_set(self):
142 self._put('/test/api/rtest/{}/{}/{}'.format(300, 1, 2),
143 {'data': 40})
144 self.assertStatus(200)
145 self.assertJsonBody({'key': '300', 'skey': '1', 'ekey': '2',
146 'data': 40})
147
148 def test_rest_delete(self):
149 self._delete('/test/api/rtest/{}/{}/{}?opt=3'.format(300, 1, 2))
150 self.assertStatus(204)
151
152 def test_rest_bulk_set(self):
153 self._put('/test/api/rtest/{}'.format(300),
154 {'data1': 20, 'data2': True})
155 self.assertStatus(200)
156 self.assertJsonBody({'key': '300', 'data1': 20, 'data2': True})
157
158 self._put('/test/api/rtest/{}'.format(400),
159 {'data1': 20, 'data2': ['one', 'two', 'three']})
160 self.assertStatus(200)
161 self.assertJsonBody({
162 'key': '400',
163 'data1': 20,
164 'data2': ['one', 'two', 'three'],
165 })
166
167 def test_rest_bulk_delete(self):
168 self._delete('/test/api/rtest/{}?opt=2'.format(300))
169 self.assertStatus(204)
170
171 def test_rest_collection(self):
172 self._post('/test/api/rtest/{}/cmethod'.format(300), {'data': 30})
173 self.assertStatus(200)
174 self.assertJsonBody({'key': '300', 'data': 30})
175
176 def test_rest_resource(self):
177 self._get('/test/api/rtest/{}/{}/{}/rmethod?opt=4'.format(300, 2, 3))
178 self.assertStatus(200)
179 self.assertJsonBody({'key': '300', 'skey': '2', 'ekey': '3',
180 'opt': '4'})
181
182
183class RootControllerTest(ControllerTestCase):
184 @classmethod
185 def setup_server(cls):
186 cls.setup_controllers([Root])
187
188 def test_index(self):
189 self._get("/")
190 self.assertBody("<html></html>")