From 53a77e76c7bd6f6875ada7747a2eb09650dd8664 Mon Sep 17 00:00:00 2001 From: Andrey Kurilin Date: Wed, 19 Jul 2017 10:09:51 +0300 Subject: [PATCH] Move os_faults import from the root of module os-faults dependency is not lightweight. It depends on ansible which is quite huge library. os-faults is not used regurarly, so there is no need to load all its module and dependencies at run-time for all cases(even when fault_injection hook plugin is not used). Change-Id: Iba35853f96ab7d46de12c2fe32da4fd268c90946 --- .../plugins/openstack/hook/fault_injection.py | 6 +-- .../openstack/hook/test_fault_injection.py | 37 ++++++++++--------- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/rally/plugins/openstack/hook/fault_injection.py b/rally/plugins/openstack/hook/fault_injection.py index 526650d8..c4c3c0ad 100644 --- a/rally/plugins/openstack/hook/fault_injection.py +++ b/rally/plugins/openstack/hook/fault_injection.py @@ -13,8 +13,6 @@ # License for the specific language governing permissions and limitations # under the License. -import os_faults - from rally.common import logging from rally.common import objects from rally import consts @@ -23,7 +21,7 @@ from rally.task import hook LOG = logging.getLogger(__name__) -@hook.configure(name="fault_injection") +@hook.configure(name="fault_injection", platform="openstack") class FaultInjectionHook(hook.Hook): """Performs fault injection using os-faults library. @@ -65,6 +63,8 @@ class FaultInjectionHook(hook.Hook): return extra_config.get("cloud_config") def run(self): + import os_faults + # get cloud configuration cloud_config = self.get_cloud_config() diff --git a/tests/unit/plugins/openstack/hook/test_fault_injection.py b/tests/unit/plugins/openstack/hook/test_fault_injection.py index 52eea809..0dbd0215 100644 --- a/tests/unit/plugins/openstack/hook/test_fault_injection.py +++ b/tests/unit/plugins/openstack/hook/test_fault_injection.py @@ -16,6 +16,7 @@ import ddt import mock +import os_faults from os_faults.api import error from rally import consts @@ -46,17 +47,20 @@ class FaultInjectionHookTestCase(test.TestCase): self.assertEqual(1, len(results)) @mock.patch("rally.common.objects.Deployment.get") - @mock.patch("os_faults.human_api") - @mock.patch("os_faults.connect") @mock.patch("rally.common.utils.Timer", side_effect=fakes.FakeTimer) - def test_run(self, mock_timer, mock_connect, mock_human_api, - mock_deployment_get): - injector_inst = mock_connect.return_value + def test_run(self, mock_timer, mock_deployment_get): hook = fault_injection.FaultInjectionHook( self.task, {"action": "foo", "verify": True}, {"iteration": 1}) - hook.run_sync() + with mock.patch.object(os_faults, "human_api") as mock_human_api: + with mock.patch.object(os_faults, "connect") as mock_connect: + hook.run_sync() + + injector_inst = mock_connect.return_value + + mock_connect.assert_called_once_with(None) + mock_human_api.assert_called_once_with(injector_inst, "foo") self.assertEqual( {"finished_at": fakes.FakeTimer().finish_timestamp(), @@ -64,25 +68,25 @@ class FaultInjectionHookTestCase(test.TestCase): "status": consts.HookStatus.SUCCESS, "triggered_by": {"iteration": 1}}, hook.result()) - - mock_connect.assert_called_once_with(None) injector_inst.verify.assert_called_once_with() - mock_human_api.assert_called_once_with(injector_inst, "foo") @mock.patch("rally.common.objects.Deployment.get") - @mock.patch("os_faults.human_api") - @mock.patch("os_faults.connect") @mock.patch("rally.common.utils.Timer", side_effect=fakes.FakeTimer) - def test_run_extra_config(self, mock_timer, mock_connect, mock_human_api, - mock_deployment_get): + def test_run_extra_config(self, mock_timer, mock_deployment_get): mock_deployment_get.return_value = { "config": {"type": "ExistingCloud", "extra": {"cloud_config": {"conf": "foo_config"}}}} - injector_inst = mock_connect.return_value hook = fault_injection.FaultInjectionHook( self.task, {"action": "foo"}, {"iteration": 1}) - hook.run_sync() + with mock.patch.object(os_faults, "human_api") as mock_human_api: + with mock.patch.object(os_faults, "connect") as mock_connect: + hook.run_sync() + + injector_inst = mock_connect.return_value + + mock_connect.assert_called_once_with({"conf": "foo_config"}) + mock_human_api.assert_called_once_with(injector_inst, "foo") self.assertEqual( {"finished_at": fakes.FakeTimer().finish_timestamp(), @@ -91,9 +95,6 @@ class FaultInjectionHookTestCase(test.TestCase): "triggered_by": {"iteration": 1}}, hook.result()) - mock_connect.assert_called_once_with({"conf": "foo_config"}) - mock_human_api.assert_called_once_with(injector_inst, "foo") - @mock.patch("rally.common.objects.Deployment.get") @mock.patch("os_faults.human_api") @mock.patch("os_faults.connect")