Add raise for iteration exception in IterationRunner 57/65357/5
authorcope.li <cope.li@huawei.com>
Fri, 23 Nov 2018 08:34:23 +0000 (16:34 +0800)
committerEmma Foley <emma.l.foley@intel.com>
Thu, 13 Dec 2018 14:54:23 +0000 (14:54 +0000)
When we run the testcase, if there was a exception in iteration
_work_process, the process will still run on ,and the test result will
not affected by the exception.

JIRA: YARDSTICK-1555

Change-Id: I03803c0473015379bb0eb20ed7d474a2d923a4e3
Signed-off-by: cope.li <cope.li@huawei.com>
yardstick/benchmark/runners/iteration.py
yardstick/tests/unit/benchmark/runner/test_iteration.py [new file with mode: 0644]

index 4c88f36..58ab06a 100644 (file)
@@ -96,6 +96,7 @@ def _worker_process(queue, cls, method_name, scenario_cfg,
             except Exception:  # pylint: disable=broad-except
                 errors = traceback.format_exc()
                 LOG.exception("")
+                raise
             else:
                 if result:
                     # add timeout for put so we don't block test
diff --git a/yardstick/tests/unit/benchmark/runner/test_iteration.py b/yardstick/tests/unit/benchmark/runner/test_iteration.py
new file mode 100644 (file)
index 0000000..783b236
--- /dev/null
@@ -0,0 +1,45 @@
+##############################################################################
+# Copyright (c) 2018 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
+##############################################################################
+
+import mock
+import unittest
+import multiprocessing
+from yardstick.benchmark.runners import iteration
+from yardstick.common import exceptions as y_exc
+
+
+class IterationRunnerTest(unittest.TestCase):
+    def setUp(self):
+        self.scenario_cfg = {
+            'runner': {'interval': 0, "duration": 0},
+            'type': 'some_type'
+        }
+
+        self.benchmark = mock.Mock()
+        self.benchmark_cls = mock.Mock(return_value=self.benchmark)
+
+    def _assert_defaults__worker_run_setup_and_teardown(self):
+        self.benchmark_cls.assert_called_once_with(self.scenario_cfg, {})
+        self.benchmark.setup.assert_called_once()
+
+    def _assert_defaults__worker_run_one_iteration(self):
+        self.benchmark.pre_run_wait_time.assert_called_once_with(0)
+        self.benchmark.my_method.assert_called_once_with({})
+
+    def test__worker_process_broad_exception(self):
+        self.benchmark.my_method = mock.Mock(
+            side_effect=y_exc.YardstickException)
+
+        with self.assertRaises(Exception):
+            iteration._worker_process(mock.Mock(), self.benchmark_cls, 'my_method',
+                                 self.scenario_cfg, {},
+                                 multiprocessing.Event(), mock.Mock())
+
+        self._assert_defaults__worker_run_one_iteration()
+        self._assert_defaults__worker_run_setup_and_teardown()