From c6f44319946c46bccf1ec030694290e1a449bed8 Mon Sep 17 00:00:00 2001 From: Ramakrishnan G Date: Fri, 30 Jan 2015 15:29:54 +0000 Subject: [PATCH] Use prolianutils module for ilo driver tests This change adds all components on proliantutils module to third_party_driver_mocks. This enables the ilo driver tests to use the proliantutils module when it is available, and use the mocks when proliantutils module is not available. This commit modifies all the ilo driver tests to use the imported proliantutils module (rather than mocking it completely). Change-Id: Ief88b194374585c7cfc3c3804b4ea04620fe21e7 Closes-bug: 1416421 --- ironic/tests/drivers/ilo/test_common.py | 67 +++++++++---------- ironic/tests/drivers/ilo/test_management.py | 31 ++++----- ironic/tests/drivers/ilo/test_power.py | 56 ++++++---------- .../tests/drivers/third_party_driver_mocks.py | 14 ++-- 4 files changed, 75 insertions(+), 93 deletions(-) diff --git a/ironic/tests/drivers/ilo/test_common.py b/ironic/tests/drivers/ilo/test_common.py index fac42f08b5..81073ba933 100644 --- a/ironic/tests/drivers/ilo/test_common.py +++ b/ironic/tests/drivers/ilo/test_common.py @@ -110,13 +110,13 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): self.node = obj_utils.create_test_node(self.context, driver='fake_ilo', driver_info=self.info) - @mock.patch.object(ilo_common, 'ilo_client') + @mock.patch.object(ilo_client, 'IloClient') def test_get_ilo_object(self, ilo_client_mock): self.info['client_timeout'] = 60 self.info['client_port'] = 443 - ilo_client_mock.IloClient.return_value = 'ilo_object' + ilo_client_mock.return_value = 'ilo_object' returned_ilo_object = ilo_common.get_ilo_object(self.node) - ilo_client_mock.IloClient.assert_called_with( + ilo_client_mock.assert_called_with( self.info['ilo_address'], self.info['ilo_username'], self.info['ilo_password'], @@ -124,12 +124,12 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): self.info['client_port']) self.assertEqual('ilo_object', returned_ilo_object) - @mock.patch.object(ilo_common, 'ilo_client') - def test_get_ilo_license(self, ilo_client_mock): + @mock.patch.object(ilo_common, 'get_ilo_object') + def test_get_ilo_license(self, get_ilo_object_mock): ilo_advanced_license = {'LICENSE_TYPE': 'iLO 3 Advanced'} ilo_standard_license = {'LICENSE_TYPE': 'iLO 3'} - ilo_mock_object = ilo_client_mock.IloClient.return_value + ilo_mock_object = get_ilo_object_mock.return_value ilo_mock_object.get_all_licenses.return_value = ilo_advanced_license license = ilo_common.get_ilo_license(self.node) @@ -139,11 +139,11 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): license = ilo_common.get_ilo_license(self.node) self.assertEqual(ilo_common.STANDARD_LICENSE, license) - @mock.patch.object(ilo_common, 'ilo_client') - def test_get_ilo_license_fail(self, ilo_client_mock): - ilo_client_mock.IloError = Exception - ilo_mock_object = ilo_client_mock.IloClient.return_value - ilo_mock_object.get_all_licenses.side_effect = [Exception()] + @mock.patch.object(ilo_common, 'get_ilo_object') + def test_get_ilo_license_fail(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value + exc = ilo_client.IloError('error') + ilo_mock_object.get_all_licenses.side_effect = exc self.assertRaises(exception.IloOperationError, ilo_common.get_ilo_license, self.node) @@ -241,10 +241,9 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): files_info=files_info, parameters=deploy_args) - @mock.patch.object(ilo_common, 'ilo_client') - def test_attach_vmedia(self, ilo_client_mock): - ilo_client_mock.IloError = Exception - ilo_mock_object = ilo_client_mock.IloClient.return_value + @mock.patch.object(ilo_common, 'get_ilo_object') + def test_attach_vmedia(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value insert_media_mock = ilo_mock_object.insert_virtual_media set_status_mock = ilo_mock_object.set_vm_status @@ -253,9 +252,15 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): set_status_mock.assert_called_once_with(device='FLOPPY', boot_option='CONNECT', write_protect='YES') - set_status_mock.side_effect = Exception() + @mock.patch.object(ilo_common, 'get_ilo_object') + def test_attach_vmedia_fails(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value + set_status_mock = ilo_mock_object.set_vm_status + exc = ilo_client.IloError('error') + set_status_mock.side_effect = exc self.assertRaises(exception.IloOperationError, - ilo_common.attach_vmedia, self.node, 'FLOPPY', 'url') + ilo_common.attach_vmedia, self.node, + 'FLOPPY', 'url') @mock.patch.object(ilo_common, 'get_ilo_object') def test_set_boot_mode(self, get_ilo_object_mock): @@ -279,17 +284,15 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): get_pending_boot_mode_mock.assert_called_once_with() self.assertFalse(ilo_object_mock.set_pending_boot_mode.called) - @mock.patch.object(ilo_common, 'ilo_client') @mock.patch.object(ilo_common, 'get_ilo_object') def test_set_boot_mode_with_IloOperationError(self, - get_ilo_object_mock, - ilo_client_mock): + get_ilo_object_mock): ilo_object_mock = get_ilo_object_mock.return_value get_pending_boot_mode_mock = ilo_object_mock.get_pending_boot_mode get_pending_boot_mode_mock.return_value = 'UEFI' set_pending_boot_mode_mock = ilo_object_mock.set_pending_boot_mode - ilo_client_mock.IloError = Exception - set_pending_boot_mode_mock.side_effect = Exception + exc = ilo_client.IloError('error') + set_pending_boot_mode_mock.side_effect = exc self.assertRaises(exception.IloOperationError, ilo_common.set_boot_mode, self.node, 'bios') get_ilo_object_mock.assert_called_once_with(self.node) @@ -298,12 +301,9 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): @mock.patch.object(driver_utils, 'rm_node_capability') @mock.patch.object(driver_utils, 'add_node_capability') @mock.patch.object(ilo_common, 'get_ilo_object') - @mock.patch.object(ilo_common, 'ilo_client') - def test_update_boot_mode_capability(self, ilo_client_mock, - get_ilo_object_mock, + def test_update_boot_mode_capability(self, get_ilo_object_mock, add_node_capability_mock, rm_node_capability_mock): - ilo_client_mock.IloCommandNotSupportedError = Exception ilo_mock_obj = get_ilo_object_mock.return_value ilo_mock_obj.get_pending_boot_mode.return_value = 'legacy' @@ -319,11 +319,9 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): @mock.patch.object(driver_utils, 'add_node_capability') @mock.patch.object(ilo_common, 'get_ilo_object') - @mock.patch.object(ilo_common, 'ilo_client') - def test_update_boot_mode_capability_unknown(self, ilo_client_mock, - get_ilo_object_mock, - add_node_capability_mock): - ilo_client_mock.IloCommandNotSupportedError = Exception + def test_update_boot_mode_capability_unknown(self, + get_ilo_object_mock, + add_node_capability_mock): ilo_mock_obj = get_ilo_object_mock.return_value ilo_mock_obj.get_pending_boot_mode.return_value = 'UNKNOWN' set_pending_boot_mode_mock = ilo_mock_obj.set_pending_boot_mode @@ -340,13 +338,12 @@ class IloCommonMethodsTestCase(db_base.DbTestCase): @mock.patch.object(driver_utils, 'add_node_capability') @mock.patch.object(ilo_common, 'get_ilo_object') - @mock.patch.object(ilo_common, 'ilo_client') - def test_update_boot_mode_capability_legacy(self, ilo_client_mock, + def test_update_boot_mode_capability_legacy(self, get_ilo_object_mock, add_node_capability_mock): - ilo_client_mock.IloCommandNotSupportedError = Exception ilo_mock_obj = get_ilo_object_mock.return_value - ilo_mock_obj.get_pending_boot_mode.side_effect = Exception + exc = ilo_client.IloCommandNotSupportedError('error') + ilo_mock_obj.get_pending_boot_mode.side_effect = exc with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: diff --git a/ironic/tests/drivers/ilo/test_management.py b/ironic/tests/drivers/ilo/test_management.py index a01abd026e..ea8c0bb758 100644 --- a/ironic/tests/drivers/ilo/test_management.py +++ b/ironic/tests/drivers/ilo/test_management.py @@ -23,7 +23,6 @@ from ironic.common import boot_devices from ironic.common import exception from ironic.conductor import task_manager from ironic.drivers.modules.ilo import common as ilo_common -from ironic.drivers.modules.ilo import management as ilo_management from ironic.drivers.modules import ipmitool from ironic.tests.conductor import utils as mgr_utils from ironic.tests.db import base as db_base @@ -96,12 +95,11 @@ class IloManagementTestCase(db_base.DbTestCase): ilo_mock.get_one_time_boot.assert_called_once_with() ilo_mock.get_persistent_boot_device.assert_called_once_with() - @mock.patch.object(ilo_management, 'ilo_client') @mock.patch.object(ilo_common, 'get_ilo_object') - def test_get_boot_device_fail(self, get_ilo_object_mock, ilo_mgmt_mock): - ilo_mgmt_mock.IloError = Exception + def test_get_boot_device_fail(self, get_ilo_object_mock): ilo_mock_object = get_ilo_object_mock.return_value - ilo_mock_object.get_one_time_boot.side_effect = Exception() + exc = ilo_client.IloError('error') + ilo_mock_object.get_one_time_boot.side_effect = exc with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: @@ -110,14 +108,12 @@ class IloManagementTestCase(db_base.DbTestCase): task) ilo_mock_object.get_one_time_boot.assert_called_once_with() - @mock.patch.object(ilo_management, 'ilo_client') @mock.patch.object(ilo_common, 'get_ilo_object') - def test_get_boot_device_persistent_fail(self, get_ilo_object_mock, - ilo_mgmt_mock): - ilo_mgmt_mock.IloError = Exception + def test_get_boot_device_persistent_fail(self, get_ilo_object_mock): ilo_mock_object = get_ilo_object_mock.return_value ilo_mock_object.get_one_time_boot.return_value = 'Normal' - ilo_mock_object.get_persistent_boot_device.side_effect = Exception() + exc = ilo_client.IloError('error') + ilo_mock_object.get_persistent_boot_device.side_effect = exc with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: @@ -148,12 +144,11 @@ class IloManagementTestCase(db_base.DbTestCase): ilo_mock.update_persistent_boot.assert_called_once_with( ['NETWORK']) - @mock.patch.object(ilo_management, 'ilo_client') @mock.patch.object(ilo_common, 'get_ilo_object') - def test_set_boot_device_fail(self, get_ilo_object_mock, ilo_mgmt_mock): - ilo_mgmt_mock.IloError = Exception + def test_set_boot_device_fail(self, get_ilo_object_mock): ilo_mock_object = get_ilo_object_mock.return_value - ilo_mock_object.set_one_time_boot.side_effect = Exception() + exc = ilo_client.IloError('error') + ilo_mock_object.set_one_time_boot.side_effect = exc with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: @@ -162,13 +157,11 @@ class IloManagementTestCase(db_base.DbTestCase): task, boot_devices.PXE) ilo_mock_object.set_one_time_boot.assert_called_once_with('NETWORK') - @mock.patch.object(ilo_management, 'ilo_client') @mock.patch.object(ilo_common, 'get_ilo_object') - def test_set_boot_device_persistent_fail(self, get_ilo_object_mock, - ilo_mgmt_mock): - ilo_mgmt_mock.IloError = Exception + def test_set_boot_device_persistent_fail(self, get_ilo_object_mock): ilo_mock_object = get_ilo_object_mock.return_value - ilo_mock_object.update_persistent_boot.side_effect = Exception() + exc = ilo_client.IloError('error') + ilo_mock_object.update_persistent_boot.side_effect = exc with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: diff --git a/ironic/tests/drivers/ilo/test_power.py b/ironic/tests/drivers/ilo/test_power.py index a80ff7e7e6..294f629362 100644 --- a/ironic/tests/drivers/ilo/test_power.py +++ b/ironic/tests/drivers/ilo/test_power.py @@ -38,8 +38,7 @@ INFO_DICT = db_utils.get_test_ilo_info() CONF = cfg.CONF -@mock.patch.object(ilo_common, 'ilo_client') -@mock.patch.object(ilo_power, 'ilo_client') +@mock.patch.object(ilo_common, 'get_ilo_object') class IloPowerInternalMethodsTestCase(db_base.DbTestCase): def setUp(self): @@ -53,9 +52,8 @@ class IloPowerInternalMethodsTestCase(db_base.DbTestCase): CONF.set_override('power_retry', 2, 'ilo') CONF.set_override('power_wait', 0, 'ilo') - def test__get_power_state(self, power_ilo_client_mock, - common_ilo_client_mock): - ilo_mock_object = common_ilo_client_mock.IloClient.return_value + def test__get_power_state(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value ilo_mock_object.get_host_power_status.return_value = 'ON' self.assertEqual( @@ -68,32 +66,28 @@ class IloPowerInternalMethodsTestCase(db_base.DbTestCase): ilo_mock_object.get_host_power_status.return_value = 'ERROR' self.assertEqual(states.ERROR, ilo_power._get_power_state(self.node)) - def test__get_power_state_fail(self, power_ilo_client_mock, - common_ilo_client_mock): - power_ilo_client_mock.IloError = Exception - ilo_mock_object = common_ilo_client_mock.IloClient.return_value - ilo_mock_object.get_host_power_status.side_effect = [Exception()] + def test__get_power_state_fail(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value + exc = ilo_client.IloError('error') + ilo_mock_object.get_host_power_status.side_effect = exc self.assertRaises(exception.IloOperationError, - ilo_power._get_power_state, - self.node) + ilo_power._get_power_state, + self.node) ilo_mock_object.get_host_power_status.assert_called_once_with() - def test__set_power_state_invalid_state(self, power_ilo_client_mock, - common_ilo_client_mock): + def test__set_power_state_invalid_state(self, get_ilo_object_mock): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: - power_ilo_client_mock.IloError = Exception - self.assertRaises(exception.IloOperationError, + self.assertRaises(exception.InvalidParameterValue, ilo_power._set_power_state, task, states.ERROR) - def test__set_power_state_reboot_fail(self, power_ilo_client_mock, - common_ilo_client_mock): - power_ilo_client_mock.IloError = Exception - ilo_mock_object = common_ilo_client_mock.IloClient.return_value - ilo_mock_object.reset_server.side_effect = Exception() + def test__set_power_state_reboot_fail(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value + exc = ilo_client.IloError('error') + ilo_mock_object.reset_server.side_effect = exc with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -103,10 +97,8 @@ class IloPowerInternalMethodsTestCase(db_base.DbTestCase): states.REBOOT) ilo_mock_object.reset_server.assert_called_once_with() - def test__set_power_state_reboot_ok(self, power_ilo_client_mock, - common_ilo_client_mock): - power_ilo_client_mock.IloError = Exception - ilo_mock_object = common_ilo_client_mock.IloClient.return_value + def test__set_power_state_reboot_ok(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value ilo_mock_object.get_host_power_status.side_effect = ['ON', 'OFF', 'ON'] with task_manager.acquire(self.context, self.node.uuid, @@ -115,10 +107,8 @@ class IloPowerInternalMethodsTestCase(db_base.DbTestCase): ilo_mock_object.reset_server.assert_called_once_with() - def test__set_power_state_off_fail(self, power_ilo_client_mock, - common_ilo_client_mock): - power_ilo_client_mock.IloError = Exception - ilo_mock_object = common_ilo_client_mock.IloClient.return_value + def test__set_power_state_off_fail(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value ilo_mock_object.get_host_power_status.return_value = 'ON' with task_manager.acquire(self.context, self.node.uuid, @@ -131,10 +121,8 @@ class IloPowerInternalMethodsTestCase(db_base.DbTestCase): ilo_mock_object.get_host_power_status.assert_called_with() ilo_mock_object.hold_pwr_btn.assert_called_once_with() - def test__set_power_state_on_ok(self, power_ilo_client_mock, - common_ilo_client_mock): - power_ilo_client_mock.IloError = Exception - ilo_mock_object = common_ilo_client_mock.IloClient.return_value + def test__set_power_state_on_ok(self, get_ilo_object_mock): + ilo_mock_object = get_ilo_object_mock.return_value ilo_mock_object.get_host_power_status.side_effect = ['OFF', 'ON'] target_state = states.POWER_ON @@ -147,7 +135,7 @@ class IloPowerInternalMethodsTestCase(db_base.DbTestCase): @mock.patch.object(manager_utils, 'node_set_boot_device') @mock.patch.object(ilo_common, 'setup_vmedia_for_boot') def test__attach_boot_iso(self, setup_vmedia_mock, set_boot_device_mock, - power_ilo_client_mock, common_ilo_client_mock): + get_ilo_object_mock): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: task.node.instance_info['ilo_boot_iso'] = 'boot-iso' diff --git a/ironic/tests/drivers/third_party_driver_mocks.py b/ironic/tests/drivers/third_party_driver_mocks.py index 40cda34829..2f05958b29 100755 --- a/ironic/tests/drivers/third_party_driver_mocks.py +++ b/ironic/tests/drivers/third_party_driver_mocks.py @@ -84,11 +84,15 @@ if 'ironic.drivers.modules.ipminative' in sys.modules: proliantutils = importutils.try_import('proliantutils') if not proliantutils: - mock_proliant_utils = mock.MagicMock() - sys.modules['proliantutils'] = mock_proliant_utils - -if 'ironic.drivers.ilo' in sys.modules: - reload(sys.modules['ironic.drivers.ilo']) + proliantutils = mock.MagicMock() + sys.modules['proliantutils'] = proliantutils + sys.modules['proliantutils.ilo'] = proliantutils.ilo + sys.modules['proliantutils.ilo.ribcl'] = proliantutils.ilo.ribcl + proliantutils.ilo.ribcl.IloError = type('IloError', (Exception,), {}) + command_exception = type('IloCommandNotSupportedError', (Exception,), {}) + proliantutils.ilo.ribcl.IloCommandNotSupportedError = command_exception + if 'ironic.drivers.ilo' in sys.modules: + reload(sys.modules['ironic.drivers.ilo']) # attempt to load the external 'pywsman' library, which is required by