aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit
diff options
context:
space:
mode:
authorlihuan <lihuansse@tongji.edu.cn>2016-07-06 17:29:00 +0800
committerlihuan <lihuansse@tongji.edu.cn>2016-07-08 15:01:02 +0800
commit1eb35349d2bedacc75aff28b0883995794682395 (patch)
treedd402671a0dc52d8cf7a28385159693037689ec0 /tests/unit
parent55af4f473d60838b57b14670423717b7f2e901ea (diff)
Creating Director and related codes.
Add a new scenario type 'ScenarioGeneral' that support orchestrating general HA test scenarios. Director, ActionPlayer and RollbackPlayer are uesed to execute the test scenario (or test flow). JIRA: YARDSTICK-288 Change-Id: Ied2ccd4712f3c3efde6771bfa4538c1e9e137c11 Signed-off-by: lihuan <lihuansse@tongji.edu.cn>
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_director.py103
-rw-r--r--tests/unit/benchmark/scenarios/availability/test_scenario_general.py65
2 files changed, 168 insertions, 0 deletions
diff --git a/tests/unit/benchmark/scenarios/availability/test_director.py b/tests/unit/benchmark/scenarios/availability/test_director.py
new file mode 100644
index 000000000..887ddd631
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/availability/test_director.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2016 Huan Li and others
+# lihuansse@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Unittest for yardstick.benchmark.scenarios.availability.director
+
+import mock
+import unittest
+
+from yardstick.benchmark.scenarios.availability.director import Director
+from yardstick.benchmark.scenarios.availability import actionplayers
+
+
+@mock.patch('yardstick.benchmark.scenarios.availability.director.basemonitor')
+@mock.patch('yardstick.benchmark.scenarios.availability.director.baseattacker')
+@mock.patch('yardstick.benchmark.scenarios.availability.director.baseoperation')
+@mock.patch('yardstick.benchmark.scenarios.availability.director.baseresultchecker')
+class DirectorTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.scenario_cfg = {
+ 'type': "general_scenario",
+ 'options': {
+ 'attackers':[{
+ 'fault_type': "general-attacker",
+ 'key': "kill-process"}],
+ 'monitors': [{
+ 'monitor_type': "general-monitor",
+ 'key': "service_status"}],
+ 'operations': [{
+ 'operation_type': 'general-operation',
+ 'key' : 'service_status'}],
+ 'resultCheckers': [{
+ 'checker_type': 'general-result-checker',
+ 'key' : 'process-checker',}],
+ 'steps':[
+ {
+ 'actionKey': "service_status",
+ 'actionType': "operation",
+ 'index': 1},
+ {
+ 'actionKey': "kill-process",
+ 'actionType': "attacker",
+ 'index': 2},
+ {
+ 'actionKey': "process-checker",
+ 'actionType': "resultchecker",
+ 'index': 3},
+ {
+ 'actionKey': "service_status",
+ 'actionType': "monitor",
+ 'index': 4},
+ ]
+ }
+ }
+ host = {
+ "ip": "10.20.0.5",
+ "user": "root",
+ "key_filename": "/root/.ssh/id_rsa"
+ }
+ self.ctx = {"nodes": {"node1": host}}
+
+ def test_director_all_successful(self, mock_checer, mock_opertion, mock_attacker, mock_monitor):
+ ins = Director(self.scenario_cfg, self.ctx)
+ opertion_action = ins.createActionPlayer("operation", "service_status")
+ attacker_action = ins.createActionPlayer("attacker", "kill-process")
+ checker_action = ins.createActionPlayer("resultchecker", "process-checker")
+ monitor_action = ins.createActionPlayer("monitor", "service_status")
+
+ opertion_rollback = ins.createActionRollbacker("operation", "service_status")
+ attacker_rollback = ins.createActionRollbacker("attacker", "kill-process")
+ ins.executionSteps.append(opertion_rollback)
+ ins.executionSteps.append(attacker_rollback)
+
+ opertion_action.action()
+ attacker_action.action()
+ checker_action.action()
+ monitor_action.action()
+
+ attacker_rollback.rollback()
+ opertion_rollback.rollback()
+
+ ins.stopMonitors()
+ ins.verify()
+ ins.knockoff()
+
+ def test_director_get_wrong_item(self, mock_checer, mock_opertion, mock_attacker, mock_monitor):
+ ins = Director(self.scenario_cfg, self.ctx)
+ ins.createActionPlayer("wrong_type", "wrong_key")
+ ins.createActionRollbacker("wrong_type", "wrong_key")
+
+
+
+
+
+
diff --git a/tests/unit/benchmark/scenarios/availability/test_scenario_general.py b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
new file mode 100644
index 000000000..c17edea45
--- /dev/null
+++ b/tests/unit/benchmark/scenarios/availability/test_scenario_general.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+
+##############################################################################
+# Copyright (c) 2016 Huan Li and others
+# lihuansse@tongji.edu.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+
+# Unittest for yardstick.benchmark.scenarios.availability.scenario_general
+
+import mock
+import unittest
+
+from yardstick.benchmark.scenarios.availability.scenario_general import ScenarioGeneral
+
+
+@mock.patch('yardstick.benchmark.scenarios.availability.scenario_general.Director')
+class ScenarioGeneralTestCase(unittest.TestCase):
+
+ def setUp(self):
+ self.scenario_cfg = {
+ 'type': "general_scenario",
+ 'options': {
+ 'attackers':[{
+ 'fault_type': "general-attacker",
+ 'key': "kill-process"}],
+ 'monitors': [{
+ 'monitor_type': "general-monitor",
+ 'key': "service_status"}],
+ 'steps':[
+ {
+ 'actionKey': "kill-process",
+ 'actionType': "attacker",
+ 'index': 1},
+ {
+ 'actionKey': "service_status",
+ 'actionType': "monitor",
+ 'index': 2}]
+ }
+ }
+
+ def test_scenario_general_all_successful(self, mock_director):
+ ins = ScenarioGeneral(self.scenario_cfg, None)
+ ins.setup()
+ ins.run(None)
+ ins.teardown()
+
+ def test_scenario_general_exception(self, mock_director):
+ ins = ScenarioGeneral(self.scenario_cfg, None)
+ mock_obj = mock.Mock()
+ mock_obj.createActionPlayer.side_effect = KeyError('Wrong')
+ ins.director = mock_obj
+ ins.run(None)
+ ins.teardown()
+
+ def test_scenario_general_case_fail(self, mock_director):
+ ins = ScenarioGeneral(self.scenario_cfg, None)
+ mock_obj = mock.Mock()
+ mock_obj.verify.return_value = False
+ ins.director = mock_obj
+ ins.run(None)
+ ins.teardown() \ No newline at end of file