diff --git a/ironic/tests/drivers/amt/test_common.py b/ironic/tests/drivers/amt/test_common.py index dc07164f72..d23409235e 100644 --- a/ironic/tests/drivers/amt/test_common.py +++ b/ironic/tests/drivers/amt/test_common.py @@ -25,6 +25,7 @@ from ironic.tests import base from ironic.tests.db import base as db_base from ironic.tests.db import utils as db_utils from ironic.tests.drivers.drac import utils as test_utils +from ironic.tests.drivers import third_party_driver_mock_specs as mock_specs from ironic.tests.objects import utils as obj_utils INFO_DICT = db_utils.get_test_amt_info() @@ -75,7 +76,7 @@ class AMTCommonMethodsTestCase(db_base.DbTestCase): self.assertRaises(exception.InvalidParameterValue, amt_common.parse_driver_info, self.node) - @mock.patch.object(amt_common, 'Client') + @mock.patch.object(amt_common, 'Client', autospec=True) def test_get_wsman_client(self, mock_client): info = amt_common.parse_driver_info(self.node) amt_common.get_wsman_client(self.node) @@ -103,7 +104,7 @@ class AMTCommonMethodsTestCase(db_base.DbTestCase): mock_doc, 'namespace', 'test_element') -@mock.patch.object(amt_common, 'pywsman') +@mock.patch.object(amt_common, 'pywsman', spec_set=mock_specs.PYWSMAN_SPEC) class AMTCommonClientTestCase(base.TestCase): def setUp(self): super(AMTCommonClientTestCase, self).setUp() @@ -143,7 +144,7 @@ class AMTCommonClientTestCase(base.TestCase): mock_pywsman = mock_client_pywsman.Client.return_value mock_pywsman.invoke.return_value = mock_doc method = 'ChangeBootOrder' - options = mock.Mock() + options = mock.Mock(spec_set=[]) client = amt_common.Client(**self.info) doc = None client.wsman_invoke(options, namespace, method, doc) @@ -161,7 +162,7 @@ class AMTCommonClientTestCase(base.TestCase): mock_pywsman = mock_client_pywsman.Client.return_value mock_pywsman.invoke.return_value = mock_doc method = 'fake-method' - options = mock.Mock() + options = mock.Mock(spec_set=[]) client = amt_common.Client(**self.info) diff --git a/ironic/tests/drivers/amt/test_management.py b/ironic/tests/drivers/amt/test_management.py index 6fd157c7f7..3cdec2fa20 100644 --- a/ironic/tests/drivers/amt/test_management.py +++ b/ironic/tests/drivers/amt/test_management.py @@ -28,13 +28,14 @@ from ironic.tests.conductor import utils as mgr_utils from ironic.tests.db import base as db_base from ironic.tests.db import utils as db_utils from ironic.tests.drivers.drac import utils as test_utils +from ironic.tests.drivers import third_party_driver_mock_specs as mock_specs from ironic.tests.objects import utils as obj_utils INFO_DICT = db_utils.get_test_amt_info() CONF = cfg.CONF -@mock.patch.object(amt_common, 'pywsman') +@mock.patch.object(amt_common, 'pywsman', spec_set=mock_specs.PYWSMAN_SPEC) class AMTManagementInteralMethodsTestCase(db_base.DbTestCase): def setUp(self): @@ -127,14 +128,14 @@ class AMTManagementTestCase(db_base.DbTestCase): shared=True) as task: self.assertEqual(expected, task.driver.get_properties()) - @mock.patch.object(amt_common, 'parse_driver_info') + @mock.patch.object(amt_common, 'parse_driver_info', autospec=True) def test_validate(self, mock_drvinfo): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: task.driver.management.validate(task) mock_drvinfo.assert_called_once_with(task.node) - @mock.patch.object(amt_common, 'parse_driver_info') + @mock.patch.object(amt_common, 'parse_driver_info', autospec=True) def test_validate_fail(self, mock_drvinfo): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -177,8 +178,8 @@ class AMTManagementTestCase(db_base.DbTestCase): task.driver.management.set_boot_device, task, 'fake-device') - @mock.patch.object(amt_mgmt, '_enable_boot_config') - @mock.patch.object(amt_mgmt, '_set_boot_device_order') + @mock.patch.object(amt_mgmt, '_enable_boot_config', autospec=True) + @mock.patch.object(amt_mgmt, '_set_boot_device_order', autospec=True) def test_ensure_next_boot_device_one_time(self, mock_sbdo, mock_ebc): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -192,8 +193,8 @@ class AMTManagementTestCase(db_base.DbTestCase): mock_sbdo.assert_called_once_with(task.node, device) mock_ebc.assert_called_once_with(task.node) - @mock.patch.object(amt_mgmt, '_enable_boot_config') - @mock.patch.object(amt_mgmt, '_set_boot_device_order') + @mock.patch.object(amt_mgmt, '_enable_boot_config', autospec=True) + @mock.patch.object(amt_mgmt, '_set_boot_device_order', autospec=True) def test_ensure_next_boot_device_persistent(self, mock_sbdo, mock_ebc): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: diff --git a/ironic/tests/drivers/amt/test_power.py b/ironic/tests/drivers/amt/test_power.py index 283eba446b..8a9e2781cb 100644 --- a/ironic/tests/drivers/amt/test_power.py +++ b/ironic/tests/drivers/amt/test_power.py @@ -48,7 +48,7 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): CONF.set_override('max_attempts', 2, 'amt') CONF.set_override('action_wait', 0, 'amt') - @mock.patch.object(amt_common, 'get_wsman_client') + @mock.patch.object(amt_common, 'get_wsman_client', autospec=True) def test__set_power_state(self, mock_client_pywsman): namespace = resource_uris.CIM_PowerManagementService mock_client = mock_client_pywsman.return_value @@ -56,7 +56,7 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): mock_client.wsman_invoke.assert_called_once_with(mock.ANY, namespace, 'RequestPowerStateChange', mock.ANY) - @mock.patch.object(amt_common, 'get_wsman_client') + @mock.patch.object(amt_common, 'get_wsman_client', autospec=True) def test__set_power_state_fail(self, mock_client_pywsman): mock_client = mock_client_pywsman.return_value mock_client.wsman_invoke.side_effect = exception.AMTFailure('x') @@ -64,7 +64,7 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): amt_power._set_power_state, self.node, states.POWER_ON) - @mock.patch.object(amt_common, 'get_wsman_client') + @mock.patch.object(amt_common, 'get_wsman_client', autospec=True) def test__power_status(self, mock_gwc): namespace = resource_uris.CIM_AssociatedPowerManagementService result_xml = test_utils.build_soap_xml([{'PowerState': @@ -94,7 +94,7 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): self.assertEqual( states.ERROR, amt_power._power_status(self.node)) - @mock.patch.object(amt_common, 'get_wsman_client') + @mock.patch.object(amt_common, 'get_wsman_client', autospec=True) def test__power_status_fail(self, mock_gwc): mock_client = mock_gwc.return_value mock_client.wsman_get.side_effect = exception.AMTFailure('x') @@ -102,30 +102,32 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): amt_power._power_status, self.node) - @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device') - @mock.patch.object(amt_power, '_power_status') - @mock.patch.object(amt_power, '_set_power_state') + @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device', + autospec=True) + @mock.patch.object(amt_power, '_power_status', autospec=True) + @mock.patch.object(amt_power, '_set_power_state', autospec=True) def test__set_and_wait_power_on_with_boot_device(self, mock_sps, - mock_ps, mock_snbd): + mock_ps, mock_enbd): target_state = states.POWER_ON boot_device = boot_devices.PXE - mock_ps.side_effect = [states.POWER_OFF, states.POWER_ON] - mock_snbd.return_value = None + mock_ps.side_effect = iter([states.POWER_OFF, states.POWER_ON]) + mock_enbd.return_value = None with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: task.node.driver_internal_info['amt_boot_device'] = boot_device - self.assertEqual(states.POWER_ON, - amt_power._set_and_wait(task, target_state)) - mock_snbd.assert_called_with(task.node, boot_devices.PXE) + result = amt_power._set_and_wait(task, target_state) + self.assertEqual(states.POWER_ON, result) + mock_enbd.assert_called_with(task.driver.management, task.node, + boot_devices.PXE) mock_sps.assert_called_once_with(task.node, states.POWER_ON) mock_ps.assert_called_with(task.node) - @mock.patch.object(amt_power, '_power_status') - @mock.patch.object(amt_power, '_set_power_state') + @mock.patch.object(amt_power, '_power_status', autospec=True) + @mock.patch.object(amt_power, '_set_power_state', autospec=True) def test__set_and_wait_power_on_without_boot_device(self, mock_sps, mock_ps): target_state = states.POWER_ON - mock_ps.side_effect = [states.POWER_OFF, states.POWER_ON] + mock_ps.side_effect = iter([states.POWER_OFF, states.POWER_ON]) with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: self.assertEqual(states.POWER_ON, @@ -135,7 +137,7 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): boot_device = boot_devices.DISK self.node.driver_internal_info['amt_boot_device'] = boot_device - mock_ps.side_effect = [states.POWER_OFF, states.POWER_ON] + mock_ps.side_effect = iter([states.POWER_OFF, states.POWER_ON]) with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: self.assertEqual(states.POWER_ON, @@ -150,13 +152,13 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): self.assertRaises(exception.InvalidParameterValue, amt_power._set_and_wait, task, target_state) - @mock.patch.object(amt_power, '_power_status') - @mock.patch.object(amt_power, '_set_power_state') + @mock.patch.object(amt_power, '_power_status', autospec=True) + @mock.patch.object(amt_power, '_set_power_state', autospec=True) def test__set_and_wait_exceed_iterations(self, mock_sps, mock_ps): target_state = states.POWER_ON - mock_ps.side_effect = [states.POWER_OFF, states.POWER_OFF, - states.POWER_OFF] + mock_ps.side_effect = iter([states.POWER_OFF, states.POWER_OFF, + states.POWER_OFF]) mock_sps.return_value = exception.AMTFailure('x') with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -166,21 +168,21 @@ class AMTPowerInteralMethodsTestCase(db_base.DbTestCase): mock_ps.assert_called_with(task.node) self.assertEqual(3, mock_ps.call_count) - @mock.patch.object(amt_power, '_power_status') + @mock.patch.object(amt_power, '_power_status', autospec=True) def test__set_and_wait_already_target_state(self, mock_ps): target_state = states.POWER_ON - mock_ps.side_effect = [states.POWER_ON] + mock_ps.side_effect = iter([states.POWER_ON]) with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: self.assertEqual(states.POWER_ON, amt_power._set_and_wait(task, target_state)) mock_ps.assert_called_with(task.node) - @mock.patch.object(amt_power, '_power_status') - @mock.patch.object(amt_power, '_set_power_state') + @mock.patch.object(amt_power, '_power_status', autospec=True) + @mock.patch.object(amt_power, '_set_power_state', autospec=True) def test__set_and_wait_power_off(self, mock_sps, mock_ps): target_state = states.POWER_OFF - mock_ps.side_effect = [states.POWER_ON, states.POWER_OFF] + mock_ps.side_effect = iter([states.POWER_ON, states.POWER_OFF]) with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: self.assertEqual(states.POWER_OFF, @@ -205,14 +207,14 @@ class AMTPowerTestCase(db_base.DbTestCase): shared=True) as task: self.assertEqual(expected, task.driver.get_properties()) - @mock.patch.object(amt_common, 'parse_driver_info') + @mock.patch.object(amt_common, 'parse_driver_info', autospec=True) def test_validate(self, mock_drvinfo): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: task.driver.power.validate(task) mock_drvinfo.assert_called_once_with(task.node) - @mock.patch.object(amt_common, 'parse_driver_info') + @mock.patch.object(amt_common, 'parse_driver_info', autospec=True) def test_validate_fail(self, mock_drvinfo): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -221,7 +223,7 @@ class AMTPowerTestCase(db_base.DbTestCase): task.driver.power.validate, task) - @mock.patch.object(amt_power, '_power_status') + @mock.patch.object(amt_power, '_power_status', autospec=True) def test_get_power_state(self, mock_ps): with task_manager.acquire(self.context, self.node.uuid, shared=True) as task: @@ -230,7 +232,7 @@ class AMTPowerTestCase(db_base.DbTestCase): task.driver.power.get_power_state(task)) mock_ps.assert_called_once_with(task.node) - @mock.patch.object(amt_power, '_set_and_wait') + @mock.patch.object(amt_power, '_set_and_wait', autospec=True) def test_set_power_state(self, mock_saw): with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: @@ -239,7 +241,7 @@ class AMTPowerTestCase(db_base.DbTestCase): task.driver.power.set_power_state(task, pstate) mock_saw.assert_called_once_with(task, pstate) - @mock.patch.object(amt_power, '_set_and_wait') + @mock.patch.object(amt_power, '_set_and_wait', autospec=True) def test_set_power_state_fail(self, mock_saw): with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: @@ -250,11 +252,11 @@ class AMTPowerTestCase(db_base.DbTestCase): task, pstate) mock_saw.assert_called_once_with(task, pstate) - @mock.patch.object(amt_power, '_set_and_wait') + @mock.patch.object(amt_power, '_set_and_wait', autospec=True) def test_reboot(self, mock_saw): with task_manager.acquire(self.context, self.node.uuid, shared=False) as task: task.driver.power.reboot(task) calls = [mock.call(task, states.POWER_OFF), mock.call(task, states.POWER_ON)] - mock_saw.has_calls(calls) + mock_saw.assert_has_calls(calls) diff --git a/ironic/tests/drivers/amt/test_vendor.py b/ironic/tests/drivers/amt/test_vendor.py index a6ddfc7693..f80488ec6a 100644 --- a/ironic/tests/drivers/amt/test_vendor.py +++ b/ironic/tests/drivers/amt/test_vendor.py @@ -53,8 +53,9 @@ class AMTPXEVendorPassthruTestCase(db_base.DbTestCase): self.assertIsInstance(driver_routes, dict) self.assertEqual(sorted(expected), sorted(list(driver_routes))) - @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device') - @mock.patch.object(pxe.VendorPassthru, 'pass_deploy_info') + @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device', + autospec=True) + @mock.patch.object(pxe.VendorPassthru, 'pass_deploy_info', autospec=True) def test_vendorpassthru_pass_deploy_info_netboot(self, mock_pxe_vendorpassthru, mock_ensure): @@ -67,11 +68,14 @@ class AMTPXEVendorPassthruTestCase(db_base.DbTestCase): "boot_option": "netboot" } task.driver.vendor.pass_deploy_info(task, **kwargs) - mock_ensure.assert_called_with(task.node, boot_devices.PXE) - mock_pxe_vendorpassthru.assert_called_once_with(task, **kwargs) + mock_ensure.assert_called_with( + task.driver.management, task.node, boot_devices.PXE) + mock_pxe_vendorpassthru.assert_called_once_with( + task.driver.vendor, task, **kwargs) - @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device') - @mock.patch.object(pxe.VendorPassthru, 'pass_deploy_info') + @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device', + autospec=True) + @mock.patch.object(pxe.VendorPassthru, 'pass_deploy_info', autospec=True) def test_vendorpassthru_pass_deploy_info_localboot(self, mock_pxe_vendorpassthru, mock_ensure): @@ -83,10 +87,12 @@ class AMTPXEVendorPassthruTestCase(db_base.DbTestCase): task.node.instance_info['capabilities'] = {"boot_option": "local"} task.driver.vendor.pass_deploy_info(task, **kwargs) self.assertFalse(mock_ensure.called) - mock_pxe_vendorpassthru.assert_called_once_with(task, **kwargs) + mock_pxe_vendorpassthru.assert_called_once_with( + task.driver.vendor, task, **kwargs) - @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device') - @mock.patch.object(pxe.VendorPassthru, 'continue_deploy') + @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device', + autospec=True) + @mock.patch.object(pxe.VendorPassthru, 'continue_deploy', autospec=True) def test_vendorpassthru_continue_deploy_netboot(self, mock_pxe_vendorpassthru, mock_ensure): @@ -99,11 +105,14 @@ class AMTPXEVendorPassthruTestCase(db_base.DbTestCase): "boot_option": "netboot" } task.driver.vendor.continue_deploy(task, **kwargs) - mock_ensure.assert_called_with(task.node, boot_devices.PXE) - mock_pxe_vendorpassthru.assert_called_once_with(task, **kwargs) + mock_ensure.assert_called_with( + task.driver.management, task.node, boot_devices.PXE) + mock_pxe_vendorpassthru.assert_called_once_with( + task.driver.vendor, task, **kwargs) - @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device') - @mock.patch.object(pxe.VendorPassthru, 'continue_deploy') + @mock.patch.object(amt_mgmt.AMTManagement, 'ensure_next_boot_device', + autospec=True) + @mock.patch.object(pxe.VendorPassthru, 'continue_deploy', autospec=True) def test_vendorpassthru_continue_deploy_localboot(self, mock_pxe_vendorpassthru, mock_ensure): @@ -115,4 +124,5 @@ class AMTPXEVendorPassthruTestCase(db_base.DbTestCase): task.node.instance_info['capabilities'] = {"boot_option": "local"} task.driver.vendor.continue_deploy(task, **kwargs) self.assertFalse(mock_ensure.called) - mock_pxe_vendorpassthru.assert_called_once_with(task, **kwargs) + mock_pxe_vendorpassthru.assert_called_once_with( + task.driver.vendor, task, **kwargs)