]>
Commit | Line | Data |
---|---|---|
f67539c2 | 1 | from unittest.mock import Mock, call, patch |
11fdf7f2 | 2 | |
adb31ebb | 3 | from .. import mgr |
f67539c2 TL |
4 | from ..controllers.rgw import Rgw, RgwDaemon, RgwUser |
5 | from ..rest_client import RequestException | |
6 | from ..services.rgw_client import RgwClient | |
a4b75251 | 7 | from ..tests import ControllerTestCase, RgwStub |
adb31ebb TL |
8 | |
9 | ||
10 | class RgwControllerTestCase(ControllerTestCase): | |
11 | @classmethod | |
12 | def setup_server(cls): | |
adb31ebb TL |
13 | cls.setup_controllers([Rgw], '/test') |
14 | ||
f67539c2 TL |
15 | def setUp(self) -> None: |
16 | RgwStub.get_daemons() | |
17 | RgwStub.get_settings() | |
18 | ||
19 | @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user')) | |
20 | @patch.object(RgwClient, 'is_service_online', Mock(return_value=True)) | |
21 | @patch.object(RgwClient, '_is_system_user', Mock(return_value=True)) | |
22 | def test_status_available(self): | |
23 | self._get('/test/api/rgw/status') | |
24 | self.assertStatus(200) | |
25 | self.assertJsonBody({'available': True, 'message': None}) | |
26 | ||
27 | @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user')) | |
28 | @patch.object(RgwClient, 'is_service_online', Mock( | |
29 | side_effect=RequestException('My test error'))) | |
30 | def test_status_online_check_error(self): | |
31 | self._get('/test/api/rgw/status') | |
32 | self.assertStatus(200) | |
33 | self.assertJsonBody({'available': False, | |
34 | 'message': 'My test error'}) | |
35 | ||
36 | @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user')) | |
37 | @patch.object(RgwClient, 'is_service_online', Mock(return_value=False)) | |
38 | def test_status_not_online(self): | |
39 | self._get('/test/api/rgw/status') | |
40 | self.assertStatus(200) | |
41 | self.assertJsonBody({'available': False, | |
42 | 'message': "Failed to connect to the Object Gateway's Admin Ops API."}) | |
43 | ||
44 | @patch.object(RgwClient, '_get_user_id', Mock(return_value='fake-user')) | |
45 | @patch.object(RgwClient, 'is_service_online', Mock(return_value=True)) | |
46 | @patch.object(RgwClient, '_is_system_user', Mock(return_value=False)) | |
47 | def test_status_not_system_user(self): | |
48 | self._get('/test/api/rgw/status') | |
49 | self.assertStatus(200) | |
50 | self.assertJsonBody({'available': False, | |
51 | 'message': 'The system flag is not set for user "fake-user".'}) | |
52 | ||
adb31ebb | 53 | def test_status_no_service(self): |
f67539c2 | 54 | RgwStub.get_mgr_no_services() |
adb31ebb TL |
55 | self._get('/test/api/rgw/status') |
56 | self.assertStatus(200) | |
57 | self.assertJsonBody({'available': False, 'message': 'No RGW service is running.'}) | |
11fdf7f2 TL |
58 | |
59 | ||
f67539c2 TL |
60 | class RgwDaemonControllerTestCase(ControllerTestCase): |
61 | @classmethod | |
62 | def setup_server(cls): | |
f67539c2 TL |
63 | cls.setup_controllers([RgwDaemon], '/test') |
64 | ||
65 | @patch('dashboard.services.rgw_client.RgwClient._get_user_id', Mock( | |
66 | return_value='dummy_admin')) | |
67 | def test_list(self): | |
68 | RgwStub.get_daemons() | |
69 | RgwStub.get_settings() | |
70 | mgr.list_servers.return_value = [{ | |
71 | 'hostname': 'host1', | |
522d829b | 72 | 'services': [{'id': '4832', 'type': 'rgw'}, {'id': '5356', 'type': 'rgw'}] |
f67539c2 TL |
73 | }] |
74 | mgr.get_metadata.side_effect = [ | |
75 | { | |
76 | 'ceph_version': 'ceph version master (dev)', | |
77 | 'id': 'daemon1', | |
a4b75251 | 78 | 'realm_name': 'realm1', |
f67539c2 TL |
79 | 'zonegroup_name': 'zg1', |
80 | 'zone_name': 'zone1' | |
81 | }, | |
82 | { | |
83 | 'ceph_version': 'ceph version master (dev)', | |
84 | 'id': 'daemon2', | |
a4b75251 | 85 | 'realm_name': 'realm2', |
f67539c2 TL |
86 | 'zonegroup_name': 'zg2', |
87 | 'zone_name': 'zone2' | |
88 | }] | |
89 | self._get('/test/api/rgw/daemon') | |
90 | self.assertStatus(200) | |
91 | self.assertJsonBody([{ | |
92 | 'id': 'daemon1', | |
522d829b | 93 | 'service_map_id': '4832', |
f67539c2 TL |
94 | 'version': 'ceph version master (dev)', |
95 | 'server_hostname': 'host1', | |
a4b75251 | 96 | 'realm_name': 'realm1', |
f67539c2 TL |
97 | 'zonegroup_name': 'zg1', |
98 | 'zone_name': 'zone1', 'default': True | |
99 | }, | |
100 | { | |
101 | 'id': 'daemon2', | |
522d829b | 102 | 'service_map_id': '5356', |
f67539c2 TL |
103 | 'version': 'ceph version master (dev)', |
104 | 'server_hostname': 'host1', | |
a4b75251 | 105 | 'realm_name': 'realm2', |
f67539c2 TL |
106 | 'zonegroup_name': 'zg2', |
107 | 'zone_name': 'zone2', | |
108 | 'default': False | |
109 | }]) | |
110 | ||
111 | def test_list_empty(self): | |
112 | RgwStub.get_mgr_no_services() | |
113 | self._get('/test/api/rgw/daemon') | |
114 | self.assertStatus(200) | |
115 | self.assertJsonBody([]) | |
116 | ||
117 | ||
11fdf7f2 TL |
118 | class RgwUserControllerTestCase(ControllerTestCase): |
119 | @classmethod | |
120 | def setup_server(cls): | |
11fdf7f2 TL |
121 | cls.setup_controllers([RgwUser], '/test') |
122 | ||
f67539c2 | 123 | @patch('dashboard.controllers.rgw.RgwRESTController.proxy') |
11fdf7f2 TL |
124 | def test_user_list(self, mock_proxy): |
125 | mock_proxy.side_effect = [{ | |
126 | 'count': 3, | |
127 | 'keys': ['test1', 'test2', 'test3'], | |
128 | 'truncated': False | |
129 | }] | |
f67539c2 | 130 | self._get('/test/api/rgw/user?daemon_name=dummy-daemon') |
11fdf7f2 TL |
131 | self.assertStatus(200) |
132 | mock_proxy.assert_has_calls([ | |
f67539c2 | 133 | call('dummy-daemon', 'GET', 'user?list', {}) |
11fdf7f2 TL |
134 | ]) |
135 | self.assertJsonBody(['test1', 'test2', 'test3']) | |
136 | ||
f67539c2 | 137 | @patch('dashboard.controllers.rgw.RgwRESTController.proxy') |
11fdf7f2 TL |
138 | def test_user_list_marker(self, mock_proxy): |
139 | mock_proxy.side_effect = [{ | |
140 | 'count': 3, | |
141 | 'keys': ['test1', 'test2', 'test3'], | |
142 | 'marker': 'foo:bar', | |
143 | 'truncated': True | |
144 | }, { | |
145 | 'count': 1, | |
146 | 'keys': ['admin'], | |
147 | 'truncated': False | |
148 | }] | |
149 | self._get('/test/api/rgw/user') | |
150 | self.assertStatus(200) | |
151 | mock_proxy.assert_has_calls([ | |
f67539c2 TL |
152 | call(None, 'GET', 'user?list', {}), |
153 | call(None, 'GET', 'user?list', {'marker': 'foo:bar'}) | |
11fdf7f2 TL |
154 | ]) |
155 | self.assertJsonBody(['test1', 'test2', 'test3', 'admin']) | |
156 | ||
f67539c2 | 157 | @patch('dashboard.controllers.rgw.RgwRESTController.proxy') |
11fdf7f2 TL |
158 | def test_user_list_duplicate_marker(self, mock_proxy): |
159 | mock_proxy.side_effect = [{ | |
160 | 'count': 3, | |
161 | 'keys': ['test1', 'test2', 'test3'], | |
162 | 'marker': 'foo:bar', | |
163 | 'truncated': True | |
164 | }, { | |
165 | 'count': 3, | |
166 | 'keys': ['test4', 'test5', 'test6'], | |
167 | 'marker': 'foo:bar', | |
168 | 'truncated': True | |
169 | }, { | |
170 | 'count': 1, | |
171 | 'keys': ['admin'], | |
172 | 'truncated': False | |
173 | }] | |
174 | self._get('/test/api/rgw/user') | |
175 | self.assertStatus(500) | |
176 | ||
f67539c2 | 177 | @patch('dashboard.controllers.rgw.RgwRESTController.proxy') |
11fdf7f2 TL |
178 | def test_user_list_invalid_marker(self, mock_proxy): |
179 | mock_proxy.side_effect = [{ | |
180 | 'count': 3, | |
181 | 'keys': ['test1', 'test2', 'test3'], | |
182 | 'marker': 'foo:bar', | |
183 | 'truncated': True | |
184 | }, { | |
185 | 'count': 3, | |
186 | 'keys': ['test4', 'test5', 'test6'], | |
187 | 'marker': '', | |
188 | 'truncated': True | |
189 | }, { | |
190 | 'count': 1, | |
191 | 'keys': ['admin'], | |
192 | 'truncated': False | |
193 | }] | |
194 | self._get('/test/api/rgw/user') | |
195 | self.assertStatus(500) | |
9f95a23c | 196 | |
f67539c2 TL |
197 | @patch('dashboard.controllers.rgw.RgwRESTController.proxy') |
198 | @patch.object(RgwUser, '_keys_allowed') | |
9f95a23c TL |
199 | def test_user_get_with_keys(self, keys_allowed, mock_proxy): |
200 | keys_allowed.return_value = True | |
201 | mock_proxy.return_value = { | |
202 | 'tenant': '', | |
203 | 'user_id': 'my_user_id', | |
204 | 'keys': [], | |
205 | 'swift_keys': [] | |
206 | } | |
207 | self._get('/test/api/rgw/user/testuser') | |
208 | self.assertStatus(200) | |
209 | self.assertInJsonBody('keys') | |
210 | self.assertInJsonBody('swift_keys') | |
211 | ||
f67539c2 TL |
212 | @patch('dashboard.controllers.rgw.RgwRESTController.proxy') |
213 | @patch.object(RgwUser, '_keys_allowed') | |
9f95a23c TL |
214 | def test_user_get_without_keys(self, keys_allowed, mock_proxy): |
215 | keys_allowed.return_value = False | |
216 | mock_proxy.return_value = { | |
217 | 'tenant': '', | |
218 | 'user_id': 'my_user_id', | |
219 | 'keys': [], | |
220 | 'swift_keys': [] | |
221 | } | |
222 | self._get('/test/api/rgw/user/testuser') | |
223 | self.assertStatus(200) | |
224 | self.assertNotIn('keys', self.json_body()) | |
225 | self.assertNotIn('swift_keys', self.json_body()) |