From 4f4edd840823ff6a0151e3f5220241183e27e560 Mon Sep 17 00:00:00 2001 From: wym_libra Date: Thu, 31 Dec 2015 20:02:09 +0800 Subject: The secondi HA test case-shutdown controller 1) add "attacker_baremetal.py" for fault injection 2) modify the monitor to excute on remote node after ssh connection 3) move all shell scripts together JIRA: YARDSTICK-182 Change-Id: Ibb9dc908224ddb8b99a0140b75c1a046503f6dfb Signed-off-by: wym_libra --- .../availability/test_attacker_baremetal.py | 77 ++++++++++++++++++++++ .../scenarios/availability/test_monitor_command.py | 39 +++++++---- .../scenarios/availability/test_monitor_process.py | 4 +- 3 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py (limited to 'tests/unit') diff --git a/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py b/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py new file mode 100644 index 000000000..340f94cb0 --- /dev/null +++ b/tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python + +############################################################################## +# Copyright (c) 2015 Huawei Technologies Co.,Ltd and others. +# +# 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.attacker.attacker_baremetal + +import mock +import unittest + +from yardstick.benchmark.scenarios.availability.attacker import baseattacker +from yardstick.benchmark.scenarios.availability.attacker import attacker_baremetal + +@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.subprocess') +class ExecuteShellTestCase(unittest.TestCase): + + def test__fun_execute_shell_command_successful(self, mock_subprocess): + cmd = "env" + mock_subprocess.check_output.return_value = (0, 'unittest') + exitcode, output = attacker_baremetal._execute_shell_command(cmd) + self.assertEqual(exitcode, 0) + + def test__fun_execute_shell_command_fail_cmd_exception(self, mock_subprocess): + cmd = "env" + mock_subprocess.check_output.side_effect = RuntimeError + exitcode, output = attacker_baremetal._execute_shell_command(cmd) + self.assertEqual(exitcode, -1) + + +@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.ssh') +class AttackerBaremetalTestCase(unittest.TestCase): + + def setUp(self): + host = { + "ipmi_ip": "10.20.0.5", + "ipmi_user": "root", + "ipmi_pwd": "123456", + "ip": "10.20.0.5", + "user": "root", + "key_filename": "/root/.ssh/id_rsa" + } + self.context = {"node1": host} + self.attacker_cfg = { + 'fault_type': 'bear-metal-down', + 'host': 'node1', + } + + def test__attacker_baremetal_all_successful(self, mock_ssh): + + ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg, self.context) + + mock_ssh.SSH().execute.return_value = (0, "running", '') + ins.setup() + ins.inject_fault() + ins.recover() + + def test__attacker_baremetal_check_failuer(self, mock_ssh): + + ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg, self.context) + mock_ssh.SSH().execute.return_value = (0, "error check", '') + ins.setup() + + def test__attacker_baremetal_recover_successful(self, mock_ssh): + + self.attacker_cfg["jump_host"] = 'node1' + self.context["node1"]["pwd"] = "123456" + ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg, self.context) + + mock_ssh.SSH().execute.return_value = (0, "running", '') + ins.setup() + ins.recover() diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py index 31e309714..c8cda7dc7 100644 --- a/tests/unit/benchmark/scenarios/availability/test_monitor_command.py +++ b/tests/unit/benchmark/scenarios/availability/test_monitor_command.py @@ -17,7 +17,7 @@ import unittest from yardstick.benchmark.scenarios.availability.monitor import monitor_command @mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.subprocess') -class MonitorOpenstackCmdTestCase(unittest.TestCase): +class ExecuteShellTestCase(unittest.TestCase): def test__fun_execute_shell_command_successful(self, mock_subprocess): cmd = "env" @@ -31,16 +31,28 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase): exitcode, output = monitor_command._execute_shell_command(cmd) self.assertEqual(exitcode, -1) - def test__monitor_command_monitor_func_successful(self, mock_subprocess): - config = { +@mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.subprocess') +class MonitorOpenstackCmdTestCase(unittest.TestCase): + + def setUp(self): + host = { + "ip": "10.20.0.5", + "user": "root", + "key_filename": "/root/.ssh/id_rsa" + } + self.context = {"node1": host} + self.config = { 'monitor_type': 'openstack-api', 'command_name': 'nova image-list', 'monitor_time': 1, 'sla': {'max_outage_time': 5} } - instance = monitor_command.MonitorOpenstackCmd(config, None) + def test__monitor_command_monitor_func_successful(self, mock_subprocess): + + instance = monitor_command.MonitorOpenstackCmd(self.config, None) + instance.setup() mock_subprocess.check_output.return_value = (0, 'unittest') ret = instance.monitor_func() self.assertEqual(ret, True) @@ -49,16 +61,19 @@ class MonitorOpenstackCmdTestCase(unittest.TestCase): def test__monitor_command_monitor_func_failure(self, mock_subprocess): mock_subprocess.check_output.return_value = (1, 'unittest') - config = { - 'monitor_type': 'openstack-api', - 'command_name': 'nova image-list', - 'monitor_time': 1, - 'sla': {'max_outage_time': 5} - } - instance = monitor_command.MonitorOpenstackCmd(config, None) - + instance = monitor_command.MonitorOpenstackCmd(self.config, None) + instance.setup() mock_subprocess.check_output.side_effect = RuntimeError ret = instance.monitor_func() self.assertEqual(ret, False) instance._result = {"outage_time": 10} instance.verify_SLA() + + @mock.patch('yardstick.benchmark.scenarios.availability.monitor.monitor_command.ssh') + def test__monitor_command_ssh_monitor_successful(self, mock_ssh, mock_subprocess): + + self.config["host"] = "node1" + instance = monitor_command.MonitorOpenstackCmd(self.config, self.context) + instance.setup() + mock_ssh.SSH().execute.return_value = (0, "0", '') + ret = instance.monitor_func() diff --git a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py b/tests/unit/benchmark/scenarios/availability/test_monitor_process.py index f983136d2..dda104b4e 100644 --- a/tests/unit/benchmark/scenarios/availability/test_monitor_process.py +++ b/tests/unit/benchmark/scenarios/availability/test_monitor_process.py @@ -38,7 +38,7 @@ class MonitorProcessTestCase(unittest.TestCase): ins = monitor_process.MonitorProcess(self.monitor_cfg, self.context) - mock_ssh.SSH().execute.return_value = (0, "running", '') + mock_ssh.SSH().execute.return_value = (0, "1", '') ins.setup() ins.monitor_func() ins._result = {"outage_time": 0} @@ -48,7 +48,7 @@ class MonitorProcessTestCase(unittest.TestCase): ins = monitor_process.MonitorProcess(self.monitor_cfg, self.context) - mock_ssh.SSH().execute.return_value = (0, "stop", '') + mock_ssh.SSH().execute.return_value = (0, "0", '') ins.setup() ins.monitor_func() ins._result = {"outage_time": 10} -- cgit 1.2.3-korg