test_attacker_baremetal: don't run local commands 69/37469/4
authorRoss Brattain <ross.b.brattain@intel.com>
Fri, 14 Jul 2017 06:03:46 +0000 (23:03 -0700)
committerRoss Brattain <ross.b.brattain@intel.com>
Fri, 14 Jul 2017 06:25:55 +0000 (23:25 -0700)
these tests were failing to mock subprocess.check_output
and thus were trying to run sudo commands on the local
system.

This is dangerous.  Add the subprocess mock.

Also mock the LOG object so we don't print
bogus Runtime error tracebacks in the unittest logs
when we test assertRaises()

Change-Id: I01535f9952fbd95ce2f5972b641c51ff836e7e8c
Signed-off-by: Ross Brattain <ross.b.brattain@intel.com>
tests/unit/benchmark/scenarios/availability/test_attacker_baremetal.py
yardstick/benchmark/scenarios/availability/attacker/attacker_baremetal.py

index 28b27c7..cc17960 100644 (file)
@@ -20,9 +20,7 @@ from yardstick.benchmark.scenarios.availability.attacker import \
     attacker_baremetal
 
 
-@mock.patch(
-    'yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal'
-    '.subprocess')
+@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.subprocess')
 class ExecuteShellTestCase(unittest.TestCase):
 
     def test__fun_execute_shell_command_successful(self, mock_subprocess):
@@ -31,17 +29,17 @@ class ExecuteShellTestCase(unittest.TestCase):
         exitcode, output = attacker_baremetal._execute_shell_command(cmd)
         self.assertEqual(exitcode, 0)
 
-    def test__fun_execute_shell_command_fail_cmd_exception(self,
-                                                           mock_subprocess):
+    @mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.LOG')
+    def test__fun_execute_shell_command_fail_cmd_exception(self, mock_log, mock_subprocess):
         cmd = "env"
         mock_subprocess.check_output.side_effect = RuntimeError
         exitcode, output = attacker_baremetal._execute_shell_command(cmd)
         self.assertEqual(exitcode, -1)
+        mock_log.error.assert_called_once()
 
 
-@mock.patch(
-    'yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal'
-    '.ssh')
+@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.subprocess')
+@mock.patch('yardstick.benchmark.scenarios.availability.attacker.attacker_baremetal.ssh')
 class AttackerBaremetalTestCase(unittest.TestCase):
 
     def setUp(self):
@@ -59,28 +57,28 @@ class AttackerBaremetalTestCase(unittest.TestCase):
             'host': 'node1',
         }
 
-    def test__attacker_baremetal_all_successful(self, mock_ssh):
+    def test__attacker_baremetal_all_successful(self, mock_ssh, mock_subprocess):
+        mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
         ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
                                                    self.context)
 
-        mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
         ins.setup()
         ins.inject_fault()
         ins.recover()
 
-    def test__attacker_baremetal_check_failuer(self, mock_ssh):
+    def test__attacker_baremetal_check_failuer(self, mock_ssh, mock_subprocess):
+        mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
         ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
                                                    self.context)
-        mock_ssh.SSH.from_node().execute.return_value = (0, "error check", '')
         ins.setup()
 
-    def test__attacker_baremetal_recover_successful(self, mock_ssh):
+    def test__attacker_baremetal_recover_successful(self, mock_ssh, mock_subprocess):
 
         self.attacker_cfg["jump_host"] = 'node1'
         self.context["node1"]["pwd"] = "123456"
+        mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
         ins = attacker_baremetal.BaremetalAttacker(self.attacker_cfg,
                                                    self.context)
 
-        mock_ssh.SSH.from_node().execute.return_value = (0, "running", '')
         ins.setup()
         ins.recover()
index 22de0b6..50d44c1 100644 (file)
@@ -9,7 +9,6 @@
 from __future__ import absolute_import
 import logging
 import subprocess
-import traceback
 
 import yardstick.ssh as ssh
 from yardstick.benchmark.scenarios.availability.attacker.baseattacker import \
@@ -26,9 +25,7 @@ def _execute_shell_command(command, stdin=None):
         output = subprocess.check_output(command, stdin=stdin, shell=True)
     except Exception:
         exitcode = -1
-        output = traceback.format_exc()
-        LOG.error("exec command '%s' error:\n ", command)
-        LOG.error(traceback.format_exc())
+        LOG.error("exec command '%s' error:\n ", command, exc_info=True)
 
     return exitcode, output