]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
1 | # -*- coding: utf-8 -*- |
2 | from __future__ import absolute_import | |
3 | ||
4 | import errno | |
5 | import unittest | |
cd265ab1 TL |
6 | |
7 | from mgr_module import ERROR_MSG_EMPTY_INPUT_FILE | |
8 | ||
11fdf7f2 TL |
9 | from .. import settings |
10 | from ..controllers.settings import Settings as SettingsController | |
11 | from ..settings import Settings, handle_option_command | |
f67539c2 | 12 | from . import ControllerTestCase, KVStoreMockMixin # pylint: disable=no-name-in-module |
11fdf7f2 TL |
13 | |
14 | ||
15 | class SettingsTest(unittest.TestCase, KVStoreMockMixin): | |
16 | @classmethod | |
17 | def setUpClass(cls): | |
f67539c2 TL |
18 | setattr(settings.Options, 'GRAFANA_API_HOST', settings.Setting('localhost', [str])) |
19 | setattr(settings.Options, 'GRAFANA_API_PORT', settings.Setting(3000, [int])) | |
20 | setattr(settings.Options, 'GRAFANA_ENABLED', settings.Setting(False, [bool])) | |
11fdf7f2 | 21 | # pylint: disable=protected-access |
11fdf7f2 TL |
22 | settings._OPTIONS_COMMAND_MAP = settings._options_command_map() |
23 | ||
24 | def setUp(self): | |
25 | self.mock_kv_store() | |
26 | if Settings.GRAFANA_API_HOST != 'localhost': | |
27 | Settings.GRAFANA_API_HOST = 'localhost' | |
28 | if Settings.GRAFANA_API_PORT != 3000: | |
29 | Settings.GRAFANA_API_PORT = 3000 | |
30 | ||
31 | def test_get_setting(self): | |
32 | self.assertEqual(Settings.GRAFANA_API_HOST, 'localhost') | |
33 | self.assertEqual(Settings.GRAFANA_API_PORT, 3000) | |
34 | self.assertEqual(Settings.GRAFANA_ENABLED, False) | |
35 | ||
36 | def test_set_setting(self): | |
37 | Settings.GRAFANA_API_HOST = 'grafanahost' | |
38 | self.assertEqual(Settings.GRAFANA_API_HOST, 'grafanahost') | |
39 | ||
40 | Settings.GRAFANA_API_PORT = 50 | |
41 | self.assertEqual(Settings.GRAFANA_API_PORT, 50) | |
42 | ||
43 | Settings.GRAFANA_ENABLED = True | |
44 | self.assertEqual(Settings.GRAFANA_ENABLED, True) | |
45 | ||
46 | def test_get_cmd(self): | |
47 | r, out, err = handle_option_command( | |
cd265ab1 TL |
48 | {'prefix': 'dashboard get-grafana-api-port'}, |
49 | None | |
50 | ) | |
11fdf7f2 TL |
51 | self.assertEqual(r, 0) |
52 | self.assertEqual(out, '3000') | |
53 | self.assertEqual(err, '') | |
54 | ||
55 | def test_set_cmd(self): | |
56 | r, out, err = handle_option_command( | |
57 | {'prefix': 'dashboard set-grafana-api-port', | |
cd265ab1 TL |
58 | 'value': '4000'}, |
59 | None | |
60 | ) | |
11fdf7f2 TL |
61 | self.assertEqual(r, 0) |
62 | self.assertEqual(out, 'Option GRAFANA_API_PORT updated') | |
63 | self.assertEqual(err, '') | |
64 | ||
cd265ab1 TL |
65 | def test_set_secret_empty(self): |
66 | r, out, err = handle_option_command( | |
67 | {'prefix': 'dashboard set-grafana-api-password'}, | |
68 | None | |
69 | ) | |
70 | self.assertEqual(r, -errno.EINVAL) | |
71 | self.assertEqual(out, '') | |
72 | self.assertEqual(err, ERROR_MSG_EMPTY_INPUT_FILE) | |
73 | ||
74 | def test_set_secret(self): | |
75 | r, out, err = handle_option_command( | |
76 | {'prefix': 'dashboard set-grafana-api-password'}, | |
77 | 'my-secret' | |
78 | ) | |
79 | self.assertEqual(r, 0) | |
80 | self.assertEqual(out, 'Option GRAFANA_API_PASSWORD updated') | |
81 | self.assertEqual(err, '') | |
82 | ||
11fdf7f2 TL |
83 | def test_reset_cmd(self): |
84 | r, out, err = handle_option_command( | |
cd265ab1 TL |
85 | {'prefix': 'dashboard reset-grafana-enabled'}, |
86 | None | |
11fdf7f2 TL |
87 | ) |
88 | self.assertEqual(r, 0) | |
89 | self.assertEqual(out, 'Option {} reset to default value "{}"'.format( | |
90 | 'GRAFANA_ENABLED', Settings.GRAFANA_ENABLED)) | |
91 | self.assertEqual(err, '') | |
92 | ||
93 | def test_inv_cmd(self): | |
94 | r, out, err = handle_option_command( | |
cd265ab1 TL |
95 | {'prefix': 'dashboard get-non-existent-option'}, |
96 | None | |
97 | ) | |
11fdf7f2 TL |
98 | self.assertEqual(r, -errno.ENOSYS) |
99 | self.assertEqual(out, '') | |
100 | self.assertEqual(err, "Command not found " | |
101 | "'dashboard get-non-existent-option'") | |
102 | ||
103 | def test_sync(self): | |
104 | Settings.GRAFANA_API_PORT = 5000 | |
105 | r, out, err = handle_option_command( | |
cd265ab1 TL |
106 | {'prefix': 'dashboard get-grafana-api-port'}, |
107 | None | |
108 | ) | |
11fdf7f2 TL |
109 | self.assertEqual(r, 0) |
110 | self.assertEqual(out, '5000') | |
111 | self.assertEqual(err, '') | |
112 | r, out, err = handle_option_command( | |
113 | {'prefix': 'dashboard set-grafana-api-host', | |
cd265ab1 TL |
114 | 'value': 'new-local-host'}, |
115 | None | |
116 | ) | |
11fdf7f2 TL |
117 | self.assertEqual(r, 0) |
118 | self.assertEqual(out, 'Option GRAFANA_API_HOST updated') | |
119 | self.assertEqual(err, '') | |
120 | self.assertEqual(Settings.GRAFANA_API_HOST, 'new-local-host') | |
121 | ||
122 | def test_attribute_error(self): | |
123 | with self.assertRaises(AttributeError) as ctx: | |
124 | _ = Settings.NON_EXISTENT_OPTION | |
125 | ||
126 | self.assertEqual(str(ctx.exception), | |
127 | "type object 'Options' has no attribute 'NON_EXISTENT_OPTION'") | |
128 | ||
129 | ||
130 | class SettingsControllerTest(ControllerTestCase, KVStoreMockMixin): | |
131 | @classmethod | |
132 | def setup_server(cls): | |
133 | # pylint: disable=protected-access | |
134 | ||
135 | SettingsController._cp_config['tools.authenticate.on'] = False | |
136 | cls.setup_controllers([SettingsController]) | |
137 | ||
f67539c2 TL |
138 | @classmethod |
139 | def setUpClass(cls): | |
140 | super().setUpClass() | |
141 | setattr(settings.Options, 'GRAFANA_API_HOST', settings.Setting('localhost', [str])) | |
142 | setattr(settings.Options, 'GRAFANA_ENABLED', settings.Setting(False, [bool])) | |
143 | ||
144 | @classmethod | |
145 | def tearDownClass(cls): | |
146 | super().tearDownClass() | |
147 | ||
11fdf7f2 | 148 | def setUp(self): |
f67539c2 | 149 | super().setUp() |
11fdf7f2 TL |
150 | self.mock_kv_store() |
151 | ||
152 | def test_settings_list(self): | |
153 | self._get('/api/settings') | |
9f95a23c | 154 | data = self.json_body() |
11fdf7f2 TL |
155 | self.assertTrue(len(data) > 0) |
156 | self.assertStatus(200) | |
157 | self.assertIn('default', data[0].keys()) | |
158 | self.assertIn('type', data[0].keys()) | |
159 | self.assertIn('name', data[0].keys()) | |
160 | self.assertIn('value', data[0].keys()) | |
161 | ||
9f95a23c TL |
162 | def test_settings_list_filtered(self): |
163 | self._get('/api/settings?names=GRAFANA_ENABLED,PWD_POLICY_ENABLED') | |
164 | self.assertStatus(200) | |
165 | data = self.json_body() | |
166 | self.assertTrue(len(data) == 2) | |
167 | names = [option['name'] for option in data] | |
168 | self.assertIn('GRAFANA_ENABLED', names) | |
169 | self.assertIn('PWD_POLICY_ENABLED', names) | |
170 | ||
11fdf7f2 TL |
171 | def test_rgw_daemon_get(self): |
172 | self._get('/api/settings/grafana-api-username') | |
173 | self.assertStatus(200) | |
174 | self.assertJsonBody({ | |
175 | u'default': u'admin', | |
176 | u'type': u'str', | |
177 | u'name': u'GRAFANA_API_USERNAME', | |
178 | u'value': u'admin', | |
179 | }) | |
180 | ||
181 | def test_set(self): | |
f67539c2 | 182 | self._put('/api/settings/GRAFANA_API_USERNAME', {'value': 'foo'}) |
11fdf7f2 TL |
183 | self.assertStatus(200) |
184 | ||
185 | self._get('/api/settings/GRAFANA_API_USERNAME') | |
186 | self.assertStatus(200) | |
187 | self.assertInJsonBody('default') | |
188 | self.assertInJsonBody('type') | |
189 | self.assertInJsonBody('name') | |
190 | self.assertInJsonBody('value') | |
9f95a23c | 191 | self.assertEqual(self.json_body()['value'], 'foo') |
11fdf7f2 TL |
192 | |
193 | def test_bulk_set(self): | |
194 | self._put('/api/settings', { | |
195 | 'GRAFANA_API_USERNAME': 'foo', | |
196 | 'GRAFANA_API_HOST': 'somehost', | |
197 | }) | |
198 | self.assertStatus(200) | |
199 | ||
200 | self._get('/api/settings/grafana-api-username') | |
201 | self.assertStatus(200) | |
9f95a23c | 202 | body = self.json_body() |
11fdf7f2 TL |
203 | self.assertEqual(body['value'], 'foo') |
204 | ||
205 | self._get('/api/settings/grafana-api-username') | |
206 | self.assertStatus(200) | |
9f95a23c | 207 | self.assertEqual(self.json_body()['value'], 'foo') |
11fdf7f2 TL |
208 | |
209 | self._get('/api/settings/grafana-api-host') | |
210 | self.assertStatus(200) | |
9f95a23c | 211 | self.assertEqual(self.json_body()['value'], 'somehost') |