]>
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 KVStoreMockMixin, ControllerTestCase |
10 | from .. import settings | |
11 | from ..controllers.settings import Settings as SettingsController | |
12 | from ..settings import Settings, handle_option_command | |
13 | ||
14 | ||
15 | class SettingsTest(unittest.TestCase, KVStoreMockMixin): | |
16 | @classmethod | |
17 | def setUpClass(cls): | |
18 | # pylint: disable=protected-access | |
19 | settings.Options.GRAFANA_API_HOST = ('localhost', str) | |
20 | settings.Options.GRAFANA_API_PORT = (3000, int) | |
21 | settings.Options.GRAFANA_ENABLED = (False, bool) | |
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 | ||
138 | def setUp(self): | |
139 | self.mock_kv_store() | |
140 | ||
141 | def test_settings_list(self): | |
142 | self._get('/api/settings') | |
9f95a23c | 143 | data = self.json_body() |
11fdf7f2 TL |
144 | self.assertTrue(len(data) > 0) |
145 | self.assertStatus(200) | |
146 | self.assertIn('default', data[0].keys()) | |
147 | self.assertIn('type', data[0].keys()) | |
148 | self.assertIn('name', data[0].keys()) | |
149 | self.assertIn('value', data[0].keys()) | |
150 | ||
9f95a23c TL |
151 | def test_settings_list_filtered(self): |
152 | self._get('/api/settings?names=GRAFANA_ENABLED,PWD_POLICY_ENABLED') | |
153 | self.assertStatus(200) | |
154 | data = self.json_body() | |
155 | self.assertTrue(len(data) == 2) | |
156 | names = [option['name'] for option in data] | |
157 | self.assertIn('GRAFANA_ENABLED', names) | |
158 | self.assertIn('PWD_POLICY_ENABLED', names) | |
159 | ||
11fdf7f2 TL |
160 | def test_rgw_daemon_get(self): |
161 | self._get('/api/settings/grafana-api-username') | |
162 | self.assertStatus(200) | |
163 | self.assertJsonBody({ | |
164 | u'default': u'admin', | |
165 | u'type': u'str', | |
166 | u'name': u'GRAFANA_API_USERNAME', | |
167 | u'value': u'admin', | |
168 | }) | |
169 | ||
170 | def test_set(self): | |
171 | self._put('/api/settings/GRAFANA_API_USERNAME', {'value': 'foo'},) | |
172 | self.assertStatus(200) | |
173 | ||
174 | self._get('/api/settings/GRAFANA_API_USERNAME') | |
175 | self.assertStatus(200) | |
176 | self.assertInJsonBody('default') | |
177 | self.assertInJsonBody('type') | |
178 | self.assertInJsonBody('name') | |
179 | self.assertInJsonBody('value') | |
9f95a23c | 180 | self.assertEqual(self.json_body()['value'], 'foo') |
11fdf7f2 TL |
181 | |
182 | def test_bulk_set(self): | |
183 | self._put('/api/settings', { | |
184 | 'GRAFANA_API_USERNAME': 'foo', | |
185 | 'GRAFANA_API_HOST': 'somehost', | |
186 | }) | |
187 | self.assertStatus(200) | |
188 | ||
189 | self._get('/api/settings/grafana-api-username') | |
190 | self.assertStatus(200) | |
9f95a23c | 191 | body = self.json_body() |
11fdf7f2 TL |
192 | self.assertEqual(body['value'], 'foo') |
193 | ||
194 | self._get('/api/settings/grafana-api-username') | |
195 | self.assertStatus(200) | |
9f95a23c | 196 | self.assertEqual(self.json_body()['value'], 'foo') |
11fdf7f2 TL |
197 | |
198 | self._get('/api/settings/grafana-api-host') | |
199 | self.assertStatus(200) | |
9f95a23c | 200 | self.assertEqual(self.json_body()['value'], 'somehost') |