]> git.proxmox.com Git - ceph.git/blame - ceph/qa/tasks/mgr/dashboard/test_mgr_module.py
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / qa / tasks / mgr / dashboard / test_mgr_module.py
CommitLineData
11fdf7f2
TL
1# -*- coding: utf-8 -*-
2from __future__ import absolute_import
3
4import logging
5import requests
6
7from .helper import DashboardTestCase, JAny, JObj, JList, JLeaf
8
9logger = logging.getLogger(__name__)
10
11
12class MgrModuleTestCase(DashboardTestCase):
13 MGRS_REQUIRED = 1
14
15 @classmethod
16 def tearDownClass(cls):
17 cls._ceph_cmd(['mgr', 'module', 'disable', 'telemetry'])
18 super(MgrModuleTestCase, cls).tearDownClass()
19
20 def wait_until_rest_api_accessible(self):
21 """
22 Wait until the REST API is accessible.
23 """
24
25 def _check_connection():
26 try:
27 # Try reaching an API endpoint successfully.
28 self._get('/api/mgr/module')
29 if self._resp.status_code == 200:
30 return True
31 except requests.ConnectionError:
32 pass
33 return False
34
35 self.wait_until_true(_check_connection, timeout=30)
36
37
38class MgrModuleTest(MgrModuleTestCase):
39 def test_list_disabled_module(self):
40 self._ceph_cmd(['mgr', 'module', 'disable', 'telemetry'])
41 self.wait_until_rest_api_accessible()
42 data = self._get('/api/mgr/module')
43 self.assertStatus(200)
44 self.assertSchema(
45 data,
46 JList(
47 JObj(sub_elems={
48 'name': JLeaf(str),
49 'enabled': JLeaf(bool),
50 'options': JObj(
51 {},
52 allow_unknown=True,
53 unknown_schema=JObj({
54 'name': str,
55 'type': str,
56 'level': str,
57 'flags': int,
58 'default_value': JAny(none=False),
59 'min': JAny(none=False),
60 'max': JAny(none=False),
61 'enum_allowed': JList(str),
62 'see_also': JList(str),
63 'desc': str,
64 'long_desc': str,
65 'tags': JList(str)
66 }))
67 })))
68 module_info = self.find_object_in_list('name', 'telemetry', data)
69 self.assertIsNotNone(module_info)
70 self.assertFalse(module_info['enabled'])
71
72 def test_list_enabled_module(self):
73 self._ceph_cmd(['mgr', 'module', 'enable', 'telemetry'])
74 self.wait_until_rest_api_accessible()
75 data = self._get('/api/mgr/module')
76 self.assertStatus(200)
77 self.assertSchema(
78 data,
79 JList(
80 JObj(sub_elems={
81 'name': JLeaf(str),
82 'enabled': JLeaf(bool),
83 'options': JObj(
84 {},
85 allow_unknown=True,
86 unknown_schema=JObj({
87 'name': str,
88 'type': str,
89 'level': str,
90 'flags': int,
91 'default_value': JAny(none=False),
92 'min': JAny(none=False),
93 'max': JAny(none=False),
94 'enum_allowed': JList(str),
95 'see_also': JList(str),
96 'desc': str,
97 'long_desc': str,
98 'tags': JList(str)
99 }))
100 })))
101 module_info = self.find_object_in_list('name', 'telemetry', data)
102 self.assertIsNotNone(module_info)
103 self.assertTrue(module_info['enabled'])
104
105
106class MgrModuleTelemetryTest(MgrModuleTestCase):
107 def test_get(self):
108 data = self._get('/api/mgr/module/telemetry')
109 self.assertStatus(200)
110 self.assertSchema(
111 data,
112 JObj(
113 sub_elems={
114 'contact': JLeaf(str),
115 'description': JLeaf(str),
116 'enabled': JLeaf(bool),
117 'interval': JLeaf(int),
118 'leaderboard': JLeaf(bool),
119 'organization': JLeaf(str),
120 'proxy': JLeaf(str),
121 'url': JLeaf(str)
122 }))
123
124 def test_put(self):
125 self.set_config_key('config/mgr/mgr/telemetry/contact', '')
126 self.set_config_key('config/mgr/mgr/telemetry/description', '')
127 self.set_config_key('config/mgr/mgr/telemetry/enabled', 'True')
128 self.set_config_key('config/mgr/mgr/telemetry/interval', '72')
129 self.set_config_key('config/mgr/mgr/telemetry/leaderboard', 'False')
130 self.set_config_key('config/mgr/mgr/telemetry/organization', '')
131 self.set_config_key('config/mgr/mgr/telemetry/proxy', '')
132 self.set_config_key('config/mgr/mgr/telemetry/url', '')
133 self._put(
134 '/api/mgr/module/telemetry',
135 data={
136 'config': {
137 'contact': 'tux@suse.com',
138 'description': 'test',
139 'enabled': False,
140 'interval': 4711,
141 'leaderboard': True,
142 'organization': 'SUSE Linux',
143 'proxy': 'foo',
144 'url': 'https://foo.bar/report'
145 }
146 })
147 self.assertStatus(200)
148 data = self._get('/api/mgr/module/telemetry')
149 self.assertStatus(200)
150 self.assertEqual(data['contact'], 'tux@suse.com')
151 self.assertEqual(data['description'], 'test')
152 self.assertFalse(data['enabled'])
153 self.assertEqual(data['interval'], 4711)
154 self.assertTrue(data['leaderboard'])
155 self.assertEqual(data['organization'], 'SUSE Linux')
156 self.assertEqual(data['proxy'], 'foo')
157 self.assertEqual(data['url'], 'https://foo.bar/report')
158
159 def test_enable(self):
160 self._ceph_cmd(['mgr', 'module', 'disable', 'telemetry'])
161 self.wait_until_rest_api_accessible()
162 try:
163 # Note, an exception is thrown because the Ceph Mgr
164 # modules are reloaded.
165 self._post('/api/mgr/module/telemetry/enable')
166 except requests.ConnectionError:
167 pass
168 self.wait_until_rest_api_accessible()
169 data = self._get('/api/mgr/module')
170 self.assertStatus(200)
171 module_info = self.find_object_in_list('name', 'telemetry', data)
172 self.assertIsNotNone(module_info)
173 self.assertTrue(module_info['enabled'])
174
175 def test_disable(self):
176 # Enable the 'telemetry' module (all CephMgr modules are restarted)
177 # and wait until the Dashboard REST API is accessible.
178 self._ceph_cmd(['mgr', 'module', 'enable', 'telemetry'])
179 self.wait_until_rest_api_accessible()
180 try:
181 # Note, an exception is thrown because the Ceph Mgr
182 # modules are reloaded.
183 self._post('/api/mgr/module/telemetry/disable')
184 except requests.ConnectionError:
185 pass
186 self.wait_until_rest_api_accessible()
187 data = self._get('/api/mgr/module')
188 self.assertStatus(200)
189 module_info = self.find_object_in_list('name', 'telemetry', data)
190 self.assertIsNotNone(module_info)
191 self.assertFalse(module_info['enabled'])