]>
Commit | Line | Data |
---|---|---|
11fdf7f2 TL |
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.jsonBody() | |
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_rgw_daemon_get(self): | |
120 | self._get('/api/settings/grafana-api-username') | |
121 | self.assertStatus(200) | |
122 | self.assertJsonBody({ | |
123 | u'default': u'admin', | |
124 | u'type': u'str', | |
125 | u'name': u'GRAFANA_API_USERNAME', | |
126 | u'value': u'admin', | |
127 | }) | |
128 | ||
129 | def test_set(self): | |
130 | self._put('/api/settings/GRAFANA_API_USERNAME', {'value': 'foo'},) | |
131 | self.assertStatus(200) | |
132 | ||
133 | self._get('/api/settings/GRAFANA_API_USERNAME') | |
134 | self.assertStatus(200) | |
135 | self.assertInJsonBody('default') | |
136 | self.assertInJsonBody('type') | |
137 | self.assertInJsonBody('name') | |
138 | self.assertInJsonBody('value') | |
139 | self.assertEqual(self.jsonBody()['value'], 'foo') | |
140 | ||
141 | def test_bulk_set(self): | |
142 | self._put('/api/settings', { | |
143 | 'GRAFANA_API_USERNAME': 'foo', | |
144 | 'GRAFANA_API_HOST': 'somehost', | |
145 | }) | |
146 | self.assertStatus(200) | |
147 | ||
148 | self._get('/api/settings/grafana-api-username') | |
149 | self.assertStatus(200) | |
150 | body = self.jsonBody() | |
151 | self.assertEqual(body['value'], 'foo') | |
152 | ||
153 | self._get('/api/settings/grafana-api-username') | |
154 | self.assertStatus(200) | |
155 | self.assertEqual(self.jsonBody()['value'], 'foo') | |
156 | ||
157 | self._get('/api/settings/grafana-api-host') | |
158 | self.assertStatus(200) | |
159 | self.assertEqual(self.jsonBody()['value'], 'somehost') |