summaryrefslogtreecommitdiff
path: root/ironic_python_agent/tests
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-09-03 09:41:58 +0000
committerGerrit Code Review <review@openstack.org>2020-09-03 09:41:58 +0000
commit09f6a4e3da609d4df0296f8a7e90dd07bc50fc78 (patch)
tree17c0e7e42f75aab64578a709aa6ce5f160568431 /ironic_python_agent/tests
parent273ceed3008fffdf969fad1b7e5b86937ad32f40 (diff)
parentd3c3d4dabe907ac9b6fc9eb95a6015564ed55d72 (diff)
downloadironic-python-agent-09f6a4e3da609d4df0296f8a7e90dd07bc50fc78.tar.gz
Merge "Update the cache if we don't have a root device hint"
Diffstat (limited to 'ironic_python_agent/tests')
-rw-r--r--ironic_python_agent/tests/unit/extensions/test_iscsi.py12
-rw-r--r--ironic_python_agent/tests/unit/extensions/test_standby.py30
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py70
3 files changed, 98 insertions, 14 deletions
diff --git a/ironic_python_agent/tests/unit/extensions/test_iscsi.py b/ironic_python_agent/tests/unit/extensions/test_iscsi.py
index 131ad075..a4678a98 100644
--- a/ironic_python_agent/tests/unit/extensions/test_iscsi.py
+++ b/ironic_python_agent/tests/unit/extensions/test_iscsi.py
@@ -69,7 +69,8 @@ class TestISCSIExtensionTgt(base.IronicAgentTest):
'--op', 'bind', '--tid', '1',
'--initiator-address', 'ALL')]
mock_execute.assert_has_calls(expected)
- mock_dispatch.assert_called_once_with('get_os_install_device')
+ mock_dispatch.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
result.command_result)
self.assertFalse(mock_destroy.called)
@@ -98,7 +99,8 @@ class TestISCSIExtensionTgt(base.IronicAgentTest):
'--op', 'bind', '--tid', '1',
'--initiator-address', 'ALL')]
mock_execute.assert_has_calls(expected)
- mock_dispatch.assert_called_once_with('get_os_install_device')
+ mock_dispatch.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual({'iscsi_target_iqn': self.fake_iqn},
result.command_result)
@@ -119,7 +121,8 @@ class TestISCSIExtensionTgt(base.IronicAgentTest):
'--op', 'show', attempts=10)]
mock_execute.assert_has_calls(expected)
- mock_dispatch.assert_called_once_with('get_os_install_device')
+ mock_dispatch.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertFalse(mock_destroy.called)
@mock.patch.object(iscsi, '_wait_for_tgtd', autospec=True)
@@ -138,7 +141,8 @@ class TestISCSIExtensionTgt(base.IronicAgentTest):
'target', '--op', 'new', '--tid', '1',
'--targetname', self.fake_iqn)]
mock_execute.assert_has_calls(expected)
- mock_dispatch.assert_called_once_with('get_os_install_device')
+ mock_dispatch.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
def test_start_iscsi_target_fail_command_not_exist(self, mock_execute,
mock_dispatch,
diff --git a/ironic_python_agent/tests/unit/extensions/test_standby.py b/ironic_python_agent/tests/unit/extensions/test_standby.py
index 5d27f6d7..9ca0f244 100644
--- a/ironic_python_agent/tests/unit/extensions/test_standby.py
+++ b/ironic_python_agent/tests/unit/extensions/test_standby.py
@@ -569,7 +569,8 @@ class TestStandbyExtension(base.IronicAgentTest):
async_result.join()
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual(image_info['id'],
self.agent_extension.cached_image_id)
self.assertEqual('SUCCEEDED', async_result.command_status)
@@ -595,7 +596,8 @@ class TestStandbyExtension(base.IronicAgentTest):
async_result.join()
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual(image_info['id'],
self.agent_extension.cached_image_id)
self.assertEqual('SUCCEEDED', async_result.command_status)
@@ -626,7 +628,8 @@ class TestStandbyExtension(base.IronicAgentTest):
async_result.join()
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual(image_info['id'],
self.agent_extension.cached_image_id)
self.assertEqual('SUCCEEDED', async_result.command_status)
@@ -654,7 +657,8 @@ class TestStandbyExtension(base.IronicAgentTest):
async_result.join()
self.assertFalse(download_mock.called)
self.assertFalse(write_mock.called)
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual(image_info['id'],
self.agent_extension.cached_image_id)
self.assertEqual('SUCCEEDED', async_result.command_status)
@@ -699,7 +703,8 @@ class TestStandbyExtension(base.IronicAgentTest):
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
configdrive_copy_mock.assert_called_once_with(image_info['node_uuid'],
'manager',
'configdrive_data')
@@ -749,7 +754,8 @@ class TestStandbyExtension(base.IronicAgentTest):
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertFalse(configdrive_copy_mock.called)
self.assertEqual('SUCCEEDED', async_result.command_status)
@@ -821,7 +827,8 @@ class TestStandbyExtension(base.IronicAgentTest):
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertEqual(0, configdrive_copy_mock.call_count)
self.assertEqual('SUCCEEDED', async_result.command_status)
@@ -871,7 +878,8 @@ class TestStandbyExtension(base.IronicAgentTest):
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
self.assertFalse(configdrive_copy_mock.called)
self.assertEqual('FAILED', async_result.command_status)
@@ -913,7 +921,8 @@ class TestStandbyExtension(base.IronicAgentTest):
download_mock.assert_called_once_with(image_info)
write_mock.assert_called_once_with(image_info, 'manager')
- dispatch_mock.assert_called_once_with('get_os_install_device')
+ dispatch_mock.assert_called_once_with('get_os_install_device',
+ permit_refresh=True)
configdrive_copy_mock.assert_called_once_with(image_info['node_uuid'],
'manager',
'configdrive_data')
@@ -967,7 +976,8 @@ class TestStandbyExtension(base.IronicAgentTest):
)
async_result.join()
- dispatch_mock.assert_any_call('get_os_install_device')
+ dispatch_mock.assert_any_call('get_os_install_device',
+ permit_refresh=True)
self.assertFalse(configdrive_copy_mock.called)
# Assert we've streamed the image or not
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py
index 813c8769..0ab04b67 100644
--- a/ironic_python_agent/tests/unit/test_hardware.py
+++ b/ironic_python_agent/tests/unit/test_hardware.py
@@ -1467,6 +1467,46 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock_cached_node.assert_called_once_with()
mock_dev.assert_called_once_with()
+ @mock.patch.object(hardware, 'update_cached_node', autospec=True)
+ @mock.patch.object(hardware, 'list_all_block_devices', autospec=True)
+ @mock.patch.object(hardware, 'get_cached_node', autospec=True)
+ def test_get_os_install_device_no_root_device(self, mock_cached_node,
+ mock_dev,
+ mock_update):
+ mock_cached_node.return_value = {'properties': {},
+ 'uuid': 'node1',
+ 'instance_info': {}}
+ mock_dev.return_value = [
+ hardware.BlockDevice(name='/dev/sda',
+ model='TinyUSB Drive',
+ size=3116853504,
+ rotational=False,
+ vendor='Super Vendor',
+ wwn='wwn0',
+ wwn_with_extension='wwn0ven0',
+ wwn_vendor_extension='ven0',
+ serial='serial0'),
+ hardware.BlockDevice(name='/dev/sdb',
+ model='magical disk',
+ size=10737418240,
+ rotational=True,
+ vendor='fake-vendor',
+ wwn='fake-wwn',
+ wwn_with_extension='fake-wwnven0',
+ wwn_vendor_extension='ven0',
+ serial='fake-serial',
+ by_path='/dev/disk/by-path/1:0:0:0'),
+ ]
+ mock_update.return_value = {'properties': {'root_device':
+ {'name': '/dev/sda'}},
+ 'uuid': 'node1',
+ 'instance_info': {'magic': 'value'}}
+ self.assertEqual('/dev/sda',
+ self.hardware.get_os_install_device(
+ permit_refresh=True))
+ self.assertEqual(1, mock_cached_node.call_count)
+ mock_dev.assert_called_once_with()
+
def test__get_device_info(self):
fileobj = mock.mock_open(read_data='fake-vendor')
with mock.patch(
@@ -4468,3 +4508,33 @@ class TestListHardwareInfo(base.IronicAgentTest):
self.assertEqual(fake_info, hardware.list_hardware_info())
mock_dispatch.assert_called_with('list_hardware_info')
self.assertEqual(2, mock_dispatch.call_count)
+
+
+class TestAPIClientSaveAndUse(base.IronicAgentTest):
+
+ def test_save_api_client(self):
+ hardware.API_CLIENT = None
+ mock_api_client = mock.Mock()
+ hardware.save_api_client(mock_api_client, 1, 2)
+ self.assertEqual(mock_api_client, hardware.API_CLIENT)
+
+ @mock.patch('ironic_python_agent.hardware.dispatch_to_managers',
+ autospec=True)
+ @mock.patch.object(hardware, 'get_cached_node', autospec=True)
+ def test_update_node_cache(self, mock_cached_node, mock_dispatch):
+ mock_cached_node.return_value = {'uuid': 'node1'}
+ updated_node = {'uuid': 'node1', 'other': 'key'}
+ hardware.API_CLIENT = None
+ mock_api_client = mock.Mock()
+ hardware.save_api_client(mock_api_client, 1, 2)
+ mock_api_client.lookup_node.return_value = {'node': updated_node}
+ self.assertEqual(updated_node, hardware.update_cached_node())
+ mock_api_client.lookup_node.assert_called_with(
+ hardware_info=mock.ANY,
+ timeout=1,
+ starting_interval=2,
+ uuid='node1')
+ self.assertEqual(updated_node, hardware.NODE)
+ calls = [mock.call('list_hardware_info'),
+ mock.call('wait_for_disks')]
+ mock_dispatch.assert_has_calls(calls)