Merge "Update Alpine to 3.7"
authorLinda Wang <wangwulin@huawei.com>
Fri, 29 Dec 2017 03:33:51 +0000 (03:33 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Fri, 29 Dec 2017 03:33:51 +0000 (03:33 +0000)
functest/core/feature.py
functest/tests/unit/core/test_feature.py

index 2dc3ccb..3200dad 100644 (file)
@@ -14,10 +14,10 @@ helpers to run any python method or any bash command.
 """
 
 import logging
+import subprocess
 import time
 
 import functest.core.testcase as base
-import functest.utils.functest_utils as ft_utils
 from functest.utils.constants import CONST
 
 __author__ = ("Serena Feng <feng.xiaowei@zte.com.cn>, "
@@ -123,9 +123,12 @@ class BashFeature(Feature):
         ret = -1
         try:
             cmd = kwargs["cmd"]
-            ret = ft_utils.execute_command(cmd, output_file=self.result_file)
+            with open(self.result_file, 'w+') as f_stdout:
+                proc = subprocess.Popen(cmd.split(), stdout=f_stdout,
+                                        stderr=subprocess.STDOUT)
+            ret = proc.wait()
+            if ret != 0:
+                self.__logger.error("Execute command: %s failed", cmd)
         except KeyError:
             self.__logger.error("Please give cmd as arg. kwargs: %s", kwargs)
-        except Exception:  # pylint: disable=broad-except
-            self.__logger.exception("Execute cmd: %s failed", cmd)
         return ret
index 553a5df..8c73bb5 100644 (file)
@@ -23,7 +23,7 @@ class FeatureTestingBase(unittest.TestCase):
     _case_name = "foo"
     _project_name = "bar"
     _repo = "dir_repo_bar"
-    _cmd = "cd /home/opnfv/repos/bar/tests && bash run.sh && cd -"
+    _cmd = "run_bar_tests.py"
     _output_file = '/home/opnfv/functest/results/foo.log'
     feature = None
 
@@ -78,31 +78,33 @@ class BashFeatureTesting(FeatureTestingBase):
             self.feature = feature.BashFeature(
                 project_name=self._project_name, case_name=self._case_name)
 
-    @mock.patch("functest.utils.functest_utils.execute_command")
-    def test_run_no_cmd(self, mock_method=None):
-        self.assertEqual(self.feature.run(), testcase.TestCase.EX_RUN_ERROR)
-        mock_method.assert_not_called()
+    @mock.patch('subprocess.Popen')
+    def test_run_no_cmd(self, mock_subproc):
+        self.assertEqual(
+            self.feature.run(), testcase.TestCase.EX_RUN_ERROR)
+        mock_subproc.assert_not_called()
 
-    @mock.patch("functest.utils.functest_utils.execute_command",
-                return_value=1)
-    def test_run_ko(self, mock_method=None):
-        self._test_run(testcase.TestCase.EX_RUN_ERROR)
-        mock_method.assert_called_once_with(
-            self._cmd, output_file=self._output_file)
+    @mock.patch('subprocess.Popen')
+    def test_run_ko(self, mock_subproc):
+        with mock.patch('six.moves.builtins.open', mock.mock_open()) as mopen:
+            mock_obj = mock.Mock()
+            attrs = {'wait.return_value': 1}
+            mock_obj.configure_mock(**attrs)
 
-    @mock.patch("functest.utils.functest_utils.execute_command",
-                side_effect=Exception)
-    def test_run_exc(self, mock_method=None):
-        self._test_run(testcase.TestCase.EX_RUN_ERROR)
-        mock_method.assert_called_once_with(
-            self._cmd, output_file=self._output_file)
-
-    @mock.patch("functest.utils.functest_utils.execute_command",
-                return_value=0)
-    def test_run(self, mock_method):
-        self._test_run(testcase.TestCase.EX_OK)
-        mock_method.assert_called_once_with(
-            self._cmd, output_file=self._output_file)
+            mock_subproc.return_value = mock_obj
+            self._test_run(testcase.TestCase.EX_RUN_ERROR)
+            mopen.assert_called_once_with(self._output_file, "w+")
+
+    @mock.patch('subprocess.Popen')
+    def test_run(self, mock_subproc):
+        with mock.patch('six.moves.builtins.open', mock.mock_open()) as mopen:
+            mock_obj = mock.Mock()
+            attrs = {'wait.return_value': 0}
+            mock_obj.configure_mock(**attrs)
+
+            mock_subproc.return_value = mock_obj
+            self._test_run(testcase.TestCase.EX_OK)
+            mopen.assert_called_once_with(self._output_file, "w+")
 
 
 if __name__ == "__main__":