Merge "Remove TRex installer from ansible directory"
[yardstick.git] / yardstick / benchmark / scenarios / availability / serviceha.py
index e82e69b..7f976fd 100755 (executable)
@@ -28,12 +28,14 @@ class ServiceHA(base.Scenario):
         self.scenario_cfg = scenario_cfg
         self.context_cfg = context_cfg
         self.setup_done = False
+        self.data = {}
+        self.sla_pass = False
 
     def setup(self):
         """scenario setup"""
         nodes = self.context_cfg.get("nodes", None)
         if nodes is None:
-            LOG.error("the nodes info is none")
+            LOG.error("The nodes info is none")
             return
 
         self.attackers = []
@@ -44,10 +46,11 @@ class ServiceHA(base.Scenario):
             attacker_ins = attacker_cls(attacker_cfg, nodes)
             attacker_ins.setup()
             self.attackers.append(attacker_ins)
+            self.data = dict(self.data.items() + attacker_ins.data.items())
 
         monitor_cfgs = self.scenario_cfg["options"]["monitors"]
 
-        self.monitorMgr = basemonitor.MonitorMgr()
+        self.monitorMgr = basemonitor.MonitorMgr(self.data)
         self.monitorMgr.init_monitors(monitor_cfgs, nodes)
 
         self.setup_done = True
@@ -55,31 +58,40 @@ class ServiceHA(base.Scenario):
     def run(self, result):
         """execute the benchmark"""
         if not self.setup_done:
-            LOG.error("The setup not finished!")
+            LOG.error("The setup is not finished!")
             return
 
         self.monitorMgr.start_monitors()
-        LOG.info("monitor start!")
+        LOG.info("Monitor '%s' start!", self.__scenario_type__)
 
         for attacker in self.attackers:
             attacker.inject_fault()
 
         self.monitorMgr.wait_monitors()
-        LOG.info("monitor stop!")
+        LOG.info("Monitor '%s' stop!", self.__scenario_type__)
 
-        sla_pass = self.monitorMgr.verify_SLA()
-        if sla_pass:
-            result['sla_pass'] = 1
-        else:
-            result['sla_pass'] = 0
-        assert sla_pass is True, "the test cases is not pass the SLA"
+        self.sla_pass = self.monitorMgr.verify_SLA()
+        service_not_found = False
+        for k, v in self.data.items():
+            if v == 0:
+                self.sla_pass = False
+                service_not_found = True
+                LOG.info("The service process (%s) not found in the host envrioment", k)
 
-        return
+        result['sla_pass'] = 1 if self.sla_pass else 0
+        self.monitorMgr.store_result(result)
+
+        self.verify_SLA(
+            self.sla_pass, ("a service process was not found in the host "
+                            "environment" if service_not_found
+                            else "MonitorMgr.verify_SLA() failed"))
 
     def teardown(self):
         """scenario teardown"""
-        for attacker in self.attackers:
-            attacker.recover()
+        # only recover when sla not pass
+        if not self.sla_pass:
+            for attacker in self.attackers:
+                attacker.recover()
 
 
 def _test():    # pragma: no cover