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