summaryrefslogtreecommitdiff
path: root/ironic_python_agent/tests/unit/test_hardware.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic_python_agent/tests/unit/test_hardware.py')
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py201
1 files changed, 199 insertions, 2 deletions
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py
index d3393cb4..1e2c6f8b 100644
--- a/ironic_python_agent/tests/unit/test_hardware.py
+++ b/ironic_python_agent/tests/unit/test_hardware.py
@@ -1232,6 +1232,103 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(1, mock_cached_node.call_count)
mock_dev.assert_called_once_with()
+ @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_skip_list_non_exist(
+ self, mock_cached_node, mock_dev):
+ mock_cached_node.return_value = {
+ 'instance_info': {},
+ 'properties': {
+ 'skip_block_devices': [
+ {'vendor': 'vendor that does not exist'}
+ ]
+ },
+ 'uuid': 'node1'
+ }
+ mock_dev.return_value = [
+ hardware.BlockDevice(name='/dev/sda',
+ model='TinyUSB Drive',
+ size=3116853504,
+ rotational=False,
+ vendor='vendor0',
+ wwn='wwn0',
+ serial='serial0'),
+ hardware.BlockDevice(name='/dev/sdb',
+ model='Another Model',
+ size=10737418240,
+ rotational=False,
+ vendor='vendor1',
+ wwn='fake-wwn',
+ serial='fake-serial'),
+ ]
+ self.assertEqual('/dev/sdb',
+ self.hardware.get_os_install_device())
+ mock_cached_node.assert_called_once_with()
+ mock_dev.assert_called_once_with()
+
+ @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_complete_skip_list(
+ self, mock_cached_node, mock_dev):
+ mock_cached_node.return_value = {
+ 'instance_info': {},
+ 'properties': {
+ 'skip_block_devices': [{'vendor': 'basic vendor'}]
+ }
+ }
+ mock_dev.return_value = [
+ hardware.BlockDevice(name='/dev/sda',
+ model='TinyUSB Drive',
+ size=3116853504,
+ rotational=False,
+ vendor='basic vendor',
+ wwn='wwn0',
+ serial='serial0'),
+ hardware.BlockDevice(name='/dev/sdb',
+ model='Another Model',
+ size=10737418240,
+ rotational=False,
+ vendor='basic vendor',
+ wwn='fake-wwn',
+ serial='fake-serial'),
+ ]
+ self.assertRaises(errors.DeviceNotFound,
+ self.hardware.get_os_install_device)
+ mock_cached_node.assert_called_once_with()
+ mock_dev.assert_called_once_with()
+
+ @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_root_device_hints_skip_list(
+ self, mock_cached_node, mock_dev):
+ mock_cached_node.return_value = {
+ 'instance_info': {},
+ 'properties': {
+ 'root_device': {'wwn': 'fake-wwn'},
+ 'skip_block_devices': [{'vendor': 'fake-vendor'}]
+ }
+ }
+ mock_dev.return_value = [
+ hardware.BlockDevice(name='/dev/sda',
+ model='TinyUSB Drive',
+ size=3116853504,
+ rotational=False,
+ vendor='Super Vendor',
+ wwn='wwn0',
+ serial='serial0'),
+ hardware.BlockDevice(name='/dev/sdb',
+ model='Another Model',
+ size=10737418240,
+ rotational=False,
+ vendor='fake-vendor',
+ wwn='fake-wwn',
+ serial='fake-serial'),
+ ]
+ self.assertRaises(errors.DeviceNotFound,
+ self.hardware.get_os_install_device)
+ mock_cached_node.assert_called_once_with()
+ mock_dev.assert_called_once_with()
+
def test__get_device_info(self):
fileobj = mock.mock_open(read_data='fake-vendor')
with mock.patch(
@@ -1445,6 +1542,104 @@ class TestGenericHardwareManager(base.IronicAgentTest):
ignore_raid=True)],
list_mock.call_args_list)
+ @mock.patch.object(hardware.GenericHardwareManager,
+ 'list_block_devices', autospec=True)
+ def test_list_block_devices_check_skip_list_with_skip_list(self,
+ mock_list_devs):
+ mock_list_devs.return_value = [
+ hardware.BlockDevice('/dev/sdj', 'big', 1073741824, True),
+ hardware.BlockDevice('/dev/hdaa', 'small', 65535, False),
+ ]
+ device = hardware.BlockDevice('/dev/hdaa', 'small', 65535, False)
+ node = self.node
+
+ node['properties'] = {
+ 'skip_block_devices': [{
+ 'name': '/dev/sdj'
+ }]
+ }
+
+ returned_devices = self.hardware.list_block_devices_check_skip_list(
+ node)
+
+ self.assertEqual([device], returned_devices)
+
+ mock_list_devs.assert_called_once_with(self.hardware,
+ include_partitions=False)
+
+ @mock.patch.object(hardware.GenericHardwareManager,
+ 'list_block_devices', autospec=True)
+ def test_list_block_devices_check_skip_list_no_skip_list(self,
+ mock_list_devs):
+ devices = [
+ hardware.BlockDevice('/dev/sdj', 'big', 1073741824, True),
+ hardware.BlockDevice('/dev/hdaa', 'small', 65535, False),
+ ]
+
+ mock_list_devs.return_value = devices
+
+ returned_devices = self.hardware.list_block_devices_check_skip_list(
+ self.node)
+
+ self.assertEqual(devices, returned_devices)
+
+ mock_list_devs.assert_called_once_with(self.hardware,
+ include_partitions=False)
+
+ @mock.patch.object(hardware.GenericHardwareManager,
+ 'list_block_devices', autospec=True)
+ def test_list_block_devices_check_skip_list_with_skip_list_non_exist(
+ self, mock_list_devs):
+ devices = [
+ hardware.BlockDevice('/dev/sdj', 'big', 1073741824, True),
+ hardware.BlockDevice('/dev/hdaa', 'small', 65535, False),
+ ]
+
+ node = self.node
+
+ node['properties'] = {
+ 'skip_block_devices': [{
+ 'name': '/this/device/does/not/exist'
+ }]
+ }
+
+ mock_list_devs.return_value = devices
+
+ returned_devices = self.hardware.list_block_devices_check_skip_list(
+ self.node)
+
+ self.assertEqual(devices, returned_devices)
+
+ mock_list_devs.assert_called_once_with(self.hardware,
+ include_partitions=False)
+
+ @mock.patch.object(hardware.GenericHardwareManager,
+ 'list_block_devices', autospec=True)
+ def test_list_block_devices_check_skip_list_with_complete_skip_list(
+ self, mock_list_devs):
+ mock_list_devs.return_value = [
+ hardware.BlockDevice('/dev/sdj', 'big', 1073741824, True),
+ hardware.BlockDevice('/dev/hdaa', 'small', 65535, False),
+ ]
+
+ node = self.node
+
+ node['properties'] = {
+ 'skip_block_devices': [{
+ 'name': '/dev/sdj'
+ }, {
+ 'name': '/dev/hdaa'
+ }]
+ }
+
+ returned_devices = self.hardware.list_block_devices_check_skip_list(
+ self.node)
+
+ self.assertEqual([], returned_devices)
+
+ mock_list_devs.assert_called_once_with(self.hardware,
+ include_partitions=False)
+
@mock.patch.object(hardware, 'get_multipath_status', lambda *_: True)
@mock.patch.object(os, 'readlink', autospec=True)
@mock.patch.object(os, 'listdir', autospec=True)
@@ -2511,7 +2706,8 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual([mock.call('/dev/sda', self.node['uuid']),
mock.call('/dev/md0', self.node['uuid'])],
mock_destroy_disk_metadata.call_args_list)
- mock_list_erasable_devices.assert_called_with(self.hardware)
+ mock_list_erasable_devices.assert_called_with(self.hardware,
+ self.node)
mock_safety_check.assert_has_calls([
mock.call(self.node, '/dev/sda'),
mock.call(self.node, '/dev/md0'),
@@ -2544,7 +2740,8 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.erase_devices_express, self.node, [])
mock_nvme_erase.assert_not_called()
mock_destroy_disk_metadata.assert_not_called()
- mock_list_erasable_devices.assert_called_with(self.hardware)
+ mock_list_erasable_devices.assert_called_with(self.hardware,
+ self.node)
mock_safety_check.assert_has_calls([
mock.call(self.node, '/dev/sda')
])