]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/tests/test_settings.py
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / pybind / mgr / dashboard / tests / test_settings.py
CommitLineData
11fdf7f2
TL
1# -*- coding: utf-8 -*-
2from __future__ import absolute_import
3
4import errno
5import unittest
cd265ab1
TL
6
7from mgr_module import ERROR_MSG_EMPTY_INPUT_FILE
8
11fdf7f2
TL
9from .. import settings
10from ..controllers.settings import Settings as SettingsController
11from ..settings import Settings, handle_option_command
f67539c2 12from . import ControllerTestCase, KVStoreMockMixin # pylint: disable=no-name-in-module
11fdf7f2
TL
13
14
15class 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
130class 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')