Bugfix: ha test case criteria pass when sla not pass 87/40287/7
authorrexlee8776 <limingjiang@huawei.com>
Sat, 26 Aug 2017 01:37:10 +0000 (01:37 +0000)
committerrexlee8776 <limingjiang@huawei.com>
Fri, 1 Sep 2017 02:06:59 +0000 (02:06 +0000)
ha test cases didn't store moniter info and report
fail when sla didn't pass

Change-Id: I0e5637e37a66e1bf03b47fe09d17e0a1acfa11c1
Signed-off-by: rexlee8776 <limingjiang@huawei.com>
tests/unit/benchmark/scenarios/availability/test_basemonitor.py
yardstick/benchmark/scenarios/availability/director.py
yardstick/benchmark/scenarios/availability/monitor/basemonitor.py
yardstick/benchmark/scenarios/availability/monitor/monitor_multi.py
yardstick/benchmark/scenarios/availability/scenario_general.py
yardstick/benchmark/scenarios/availability/serviceha.py

index 3b7e073..92ae8aa 100644 (file)
@@ -25,13 +25,32 @@ from yardstick.benchmark.scenarios.availability.monitor import basemonitor
 class MonitorMgrTestCase(unittest.TestCase):
 
     def setUp(self):
-        config = {
-            'monitor_type': 'openstack-api',
-            'key': 'service-status'
-        }
-
-        self.monitor_configs = []
-        self.monitor_configs.append(config)
+        self.monitor_configs = [
+            {
+                "monitor_type": "openstack-cmd",
+                "command_name": "openstack router list",
+                "monitor_time": 10,
+                "monitor_number": 3,
+                "sla": {
+                    "max_outage_time": 5
+                }
+            },
+            {
+                "monitor_type": "process",
+                "process_name": "neutron-server",
+                "host": "node1",
+                "monitor_time": 20,
+                "monitor_number": 3,
+                "sla": {
+                    "max_recover_time": 20
+                }
+            }
+        ]
+        self.MonitorMgr = basemonitor.MonitorMgr([])
+        self.MonitorMgr.init_monitors(self.monitor_configs, None)
+        self.monitor_list = self.MonitorMgr._monitor_list
+        for mo in self.monitor_list:
+            mo._result = {"outage_time": 10}
 
     def test__MonitorMgr_setup_successful(self, mock_monitor):
         instance = basemonitor.MonitorMgr({"nova-api": 10})
@@ -44,7 +63,13 @@ class MonitorMgrTestCase(unittest.TestCase):
     def test_MonitorMgr_getitem(self, mock_monitor):
         monitorMgr = basemonitor.MonitorMgr({"nova-api": 10})
         monitorMgr.init_monitors(self.monitor_configs, None)
-        monitorIns = monitorMgr['service-status']
+
+    def test_store_result(self, mock_monitor):
+        expect = {'process_neutron-server_outage_time': 10,
+                  'openstack-router-list_outage_time': 10}
+        result = {}
+        self.MonitorMgr.store_result(result)
+        self.assertDictEqual(result, expect)
 
 
 class BaseMonitorTestCase(unittest.TestCase):
@@ -94,3 +119,7 @@ class BaseMonitorTestCase(unittest.TestCase):
         except Exception:
             pass
         self.assertIsNone(cls)
+
+
+if __name__ == "__main__":
+    unittest.main()
index c9187c3..f152af0 100644 (file)
@@ -111,3 +111,8 @@ class Director(object):
         while self.executionSteps:
             singleStep = self.executionSteps.pop()
             singleStep.rollback()
+
+    def store_result(self, result):
+        LOG.debug("store result ....")
+        if hasattr(self, 'monitorMgr'):
+            self.monitorMgr.store_result(result)
index 0027925..a6c1a28 100644 (file)
@@ -44,7 +44,11 @@ class MonitorMgr(object):
             monitor_ins = monitor_cls(monitor_cfg, context,
                                       self.monitor_mgr_data)
             if "key" in monitor_cfg:
-                monitor_ins.key = monitor_cfg["key"]
+                monitor_ins.tag = monitor_ins.key = monitor_cfg["key"]
+            elif monitor_type == "openstack-cmd":
+                monitor_ins.tag = monitor_cfg["command_name"].replace(" ", "-")
+            elif monitor_type == "process":
+                monitor_ins.tag = monitor_type + "_" + monitor_cfg["process_name"]
             self._monitor_list.append(monitor_ins)
 
     def __getitem__(self, item):
@@ -67,6 +71,12 @@ class MonitorMgr(object):
             sla_pass = sla_pass & monitor.verify_SLA()
         return sla_pass
 
+    def store_result(self, result):
+        for monitor in self._monitor_list:
+            monitor_result = monitor.get_result()
+            for k, v in monitor_result.items():
+                result[monitor.tag + "_" + k] = v
+
 
 class BaseMonitor(multiprocessing.Process):
     """docstring for BaseMonitor"""
@@ -83,6 +93,7 @@ class BaseMonitor(multiprocessing.Process):
         self._event = multiprocessing.Event()
         self.monitor_data = data
         self.setup_done = False
+        self.tag = ""
 
     @staticmethod
     def get_monitor_cls(monitor_type):
@@ -164,5 +175,5 @@ class BaseMonitor(multiprocessing.Process):
     def verify_SLA(self):
         pass
 
-    def result(self):
+    def get_result(self):
         return self._result
index d7d1545..dce69f4 100644 (file)
@@ -47,7 +47,7 @@ class MultiMonitor(basemonitor.BaseMonitor):
         last_outage = 0
 
         for monitor in self.monitors:
-            monitor_result = monitor.result()
+            monitor_result = monitor.get_result()
             monitor_first_outage = monitor_result.get('first_outage', 0)
             monitor_last_outage = monitor_result.get('last_outage', 0)
 
@@ -71,6 +71,7 @@ class MultiMonitor(basemonitor.BaseMonitor):
             max_outage_time = self._config["sla"]["max_recover_time"]
         else:
             raise RuntimeError("monitor max_outage_time config is not found")
+        self._result = {"outage_time": outage_time}
 
         if outage_time > max_outage_time:
             LOG.error("SLA failure: %f > %f", outage_time, max_outage_time)
index c7ed1d6..9ac5547 100644 (file)
@@ -60,6 +60,8 @@ class ScenarioGeneral(base.Scenario):
 
         verify_result = self.director.verify()
 
+        self.director.store_result(result)
+
         for k, v in self.director.data.items():
             if v == 0:
                 result['sla_pass'] = 0
index d0f5e9e..6d0d812 100755 (executable)
@@ -78,6 +78,7 @@ class ServiceHA(base.Scenario):
                 LOG.info("The service process not found in the host envrioment, \
 the HA test case NOT pass")
                 return
+        self.monitorMgr.store_result(result)
         if sla_pass:
             result['sla_pass'] = 1
             LOG.info("The HA test case PASS the SLA")