]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/devicehealth: add self-test 22479/head
authorSage Weil <sage@redhat.com>
Tue, 19 Jun 2018 17:56:45 +0000 (12:56 -0500)
committerSage Weil <sage@redhat.com>
Sat, 23 Jun 2018 22:01:55 +0000 (17:01 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
qa/tasks/mgr/test_module_selftest.py
src/pybind/mgr/devicehealth/module.py

index f3920eb09e83ce64576ced49fdd0793d81ad4cde..b725aec57230e0039fa12ec77b2ecf7e5637689d 100644 (file)
@@ -51,6 +51,9 @@ class TestModuleSelftest(MgrTestCase):
     def test_iostat(self):
         self._selftest_plugin("iostat")
 
+    def test_devicehealth(self):
+        self._selftest_plugin("devicehealth")
+
     def test_selftest_run(self):
         self._load_module("selftest")
         self.mgr_cluster.mon_manager.raw_cluster_cmd("mgr", "self-test", "run")
index 6dca5870531c7bb55a0d6baf18bdde4611307fe7..4c2ce2df0f2e6c20a1f9582652c2a1b9d61a9796 100644 (file)
@@ -50,6 +50,11 @@ class Module(MgrModule):
             "desc": "Show stored device metrics for the device",
             "perm": "r"
         },
+        {
+            "cmd": "devicehealth self-test",
+            "desc": "Run a self-test on the devicehealth module",
+            "perm": "rw",
+        },
     ]
 
     def __init__(self, *args, **kwargs):
@@ -92,12 +97,30 @@ class Module(MgrModule):
             return self.scrape_all();
         elif cmd['prefix'] == 'device show-health-metrics':
             return self.show_device_metrics(cmd['devid'], cmd.get('sample'))
-
+        elif cmd['prefix'] == 'devicehealth self-test':
+            return self.self_test()
         else:
             # mgr should respect our self.COMMANDS and not call us for
             # any prefix we don't advertise
             raise NotImplementedError(cmd['prefix'])
 
+    def self_test(self):
+        self.refresh_config()
+        osdmap = self.get('osd_map')
+        osd_id = osdmap['osds'][0]['osd']
+        osdmeta = self.get('osd_metadata')
+        devs = osdmeta.get(str(osd_id), {}).get('device_ids')
+        if devs:
+            devid = devs.split()[0].split('=')[1]
+            (r, before, err) = self.show_device_metrics(devid, '')
+            assert r == 0
+            (r, out, err) = self.scrape_device(devid)
+            assert r == 0
+            (r, after, err) = self.show_device_metrics(devid, '')
+            assert r == 0
+            assert before != after
+        return (0, '', '')
+
     def refresh_config(self):
         self.enable_monitoring = self.get_config('enable_monitoring', '') is not '' or 'false'
         for opt, value in DEFAULTS.iteritems():