]> git.proxmox.com Git - ceph.git/blob - ceph/qa/tasks/mgr/dashboard/test_mgr_module.py
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / qa / tasks / mgr / dashboard / test_mgr_module.py
1 # -*- coding: utf-8 -*-
2 from __future__ import absolute_import
3
4 import logging
5 import requests
6
7 from .helper import DashboardTestCase, JAny, JObj, JList, JLeaf
8
9 logger = logging.getLogger(__name__)
10
11
12 class MgrModuleTestCase(DashboardTestCase):
13 MGRS_REQUIRED = 1
14
15 def wait_until_rest_api_accessible(self):
16 """
17 Wait until the REST API is accessible.
18 """
19
20 def _check_connection():
21 try:
22 # Try reaching an API endpoint successfully.
23 self._get('/api/mgr/module')
24 if self._resp.status_code == 200:
25 return True
26 except requests.ConnectionError:
27 pass
28 return False
29
30 self.wait_until_true(_check_connection, timeout=30)
31
32
33 class MgrModuleTest(MgrModuleTestCase):
34 def test_list_disabled_module(self):
35 self._ceph_cmd(['mgr', 'module', 'disable', 'iostat'])
36 self.wait_until_rest_api_accessible()
37 data = self._get('/api/mgr/module')
38 self.assertStatus(200)
39 self.assertSchema(
40 data,
41 JList(
42 JObj(sub_elems={
43 'name': JLeaf(str),
44 'enabled': JLeaf(bool),
45 'always_on': JLeaf(bool),
46 'options': JObj(
47 {},
48 allow_unknown=True,
49 unknown_schema=JObj({
50 'name': str,
51 'type': str,
52 'level': str,
53 'flags': int,
54 'default_value': JAny(none=False),
55 'min': JAny(none=False),
56 'max': JAny(none=False),
57 'enum_allowed': JList(str),
58 'see_also': JList(str),
59 'desc': str,
60 'long_desc': str,
61 'tags': JList(str)
62 }))
63 })))
64 module_info = self.find_object_in_list('name', 'iostat', data)
65 self.assertIsNotNone(module_info)
66 self.assertFalse(module_info['enabled'])
67
68 def test_list_enabled_module(self):
69 self._ceph_cmd(['mgr', 'module', 'enable', 'iostat'])
70 self.wait_until_rest_api_accessible()
71 data = self._get('/api/mgr/module')
72 self.assertStatus(200)
73 self.assertSchema(
74 data,
75 JList(
76 JObj(sub_elems={
77 'name': JLeaf(str),
78 'enabled': JLeaf(bool),
79 'always_on': JLeaf(bool),
80 'options': JObj(
81 {},
82 allow_unknown=True,
83 unknown_schema=JObj({
84 'name': str,
85 'type': str,
86 'level': str,
87 'flags': int,
88 'default_value': JAny(none=False),
89 'min': JAny(none=False),
90 'max': JAny(none=False),
91 'enum_allowed': JList(str),
92 'see_also': JList(str),
93 'desc': str,
94 'long_desc': str,
95 'tags': JList(str)
96 }))
97 })))
98 module_info = self.find_object_in_list('name', 'iostat', data)
99 self.assertIsNotNone(module_info)
100 self.assertTrue(module_info['enabled'])
101
102
103 class MgrModuleTelemetryTest(MgrModuleTestCase):
104 def test_get(self):
105 data = self._get('/api/mgr/module/telemetry')
106 self.assertStatus(200)
107 self.assertSchema(
108 data,
109 JObj(
110 allow_unknown=True,
111 sub_elems={
112 'channel_basic': bool,
113 'channel_ident': bool,
114 'channel_crash': bool,
115 'channel_device': bool,
116 'contact': str,
117 'description': str,
118 'enabled': bool,
119 'interval': int,
120 'last_opt_revision': int,
121 'leaderboard': bool,
122 'organization': str,
123 'proxy': str,
124 'url': str
125 }))
126
127 def test_put(self):
128 self.set_config_key('config/mgr/mgr/telemetry/contact', '')
129 self.set_config_key('config/mgr/mgr/telemetry/description', '')
130 self.set_config_key('config/mgr/mgr/telemetry/enabled', 'True')
131 self.set_config_key('config/mgr/mgr/telemetry/interval', '72')
132 self.set_config_key('config/mgr/mgr/telemetry/leaderboard', 'False')
133 self.set_config_key('config/mgr/mgr/telemetry/organization', '')
134 self.set_config_key('config/mgr/mgr/telemetry/proxy', '')
135 self.set_config_key('config/mgr/mgr/telemetry/url', '')
136 self._put(
137 '/api/mgr/module/telemetry',
138 data={
139 'config': {
140 'contact': 'tux@suse.com',
141 'description': 'test',
142 'enabled': False,
143 'interval': 4711,
144 'leaderboard': True,
145 'organization': 'SUSE Linux',
146 'proxy': 'foo',
147 'url': 'https://foo.bar/report'
148 }
149 })
150 self.assertStatus(200)
151 data = self._get('/api/mgr/module/telemetry')
152 self.assertStatus(200)
153 self.assertEqual(data['contact'], 'tux@suse.com')
154 self.assertEqual(data['description'], 'test')
155 self.assertFalse(data['enabled'])
156 self.assertEqual(data['interval'], 4711)
157 self.assertTrue(data['leaderboard'])
158 self.assertEqual(data['organization'], 'SUSE Linux')
159 self.assertEqual(data['proxy'], 'foo')
160 self.assertEqual(data['url'], 'https://foo.bar/report')