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