Call execute from ironic-lib in hardware.py

Replace the execute wrapper from utils with execute from ironic-lib in
hardware.py

Adjust unit tests as needed.

Change-Id: I63a3b0407b2ca2246bd0e6624bfa0f748c0d73f7
This commit is contained in:
Riccardo Pittau 2021-11-04 17:04:42 +01:00
parent 36d4a18fbc
commit 7b03fbbb36
2 changed files with 187 additions and 189 deletions

View File

@ -103,7 +103,7 @@ def _get_system_lshw_dict():
:return: A python dict from the lshw json output
"""
out, _e = utils.execute('lshw', '-quiet', '-json', log_stdout=False)
out, _e = il_utils.execute('lshw', '-quiet', '-json', log_stdout=False)
out = json.loads(out)
# Depending on lshw version, output might be a list, starting with
# https://github.com/lyonel/lshw/commit/135a853c60582b14c5b67e5cd988a8062d9896f4 # noqa
@ -120,7 +120,7 @@ def _udev_settle():
"""
try:
utils.execute('udevadm', 'settle')
il_utils.execute('udevadm', 'settle')
except processutils.ProcessExecutionError as e:
LOG.warning('Something went wrong when waiting for udev '
'to settle. Error: %s', e)
@ -147,13 +147,13 @@ def _check_for_iscsi():
- If no connection is detected we simply return.
"""
try:
utils.execute('iscsistart', '-f')
il_utils.execute('iscsistart', '-f')
except (processutils.ProcessExecutionError, EnvironmentError) as e:
LOG.debug("No iscsi connection detected. Skipping iscsi. "
"Error: %s", e)
return
try:
utils.execute('iscsistart', '-b')
il_utils.execute('iscsistart', '-b')
except processutils.ProcessExecutionError as e:
LOG.warning("Something went wrong executing 'iscsistart -b' "
"Error: %s", e)
@ -166,8 +166,8 @@ def _get_md_uuid(raid_device):
:returns: A string containing the UUID of an md device.
"""
try:
out, _ = utils.execute('mdadm', '--detail', raid_device,
use_standard_locale=True)
out, _ = il_utils.execute('mdadm', '--detail', raid_device,
use_standard_locale=True)
except processutils.ProcessExecutionError as e:
LOG.warning('Could not get the details of %(dev)s: %(err)s',
{'dev': raid_device, 'err': e})
@ -205,8 +205,8 @@ def _get_component_devices(raid_device):
ignore_raid=True))
for bdev in block_devices:
try:
out, _ = utils.execute('mdadm', '--examine', bdev.name,
use_standard_locale=True)
out, _ = il_utils.execute('mdadm', '--examine', bdev.name,
use_standard_locale=True)
except processutils.ProcessExecutionError as e:
if "No md superblock detected" in str(e):
# actually not a component device
@ -259,8 +259,8 @@ def get_holder_disks(raid_device):
return []
try:
out, _ = utils.execute('mdadm', '--detail', raid_device,
use_standard_locale=True)
out, _ = il_utils.execute('mdadm', '--detail', raid_device,
use_standard_locale=True)
except processutils.ProcessExecutionError as e:
LOG.warning('Could not get holder disks of %(dev)s: %(err)s',
{'dev': raid_device, 'err': e})
@ -303,7 +303,7 @@ def is_md_device(raid_device):
:returns: True if the device is an md device, False otherwise.
"""
try:
utils.execute('mdadm', '--detail', raid_device)
il_utils.execute('mdadm', '--detail', raid_device)
LOG.debug("%s is an md device", raid_device)
return True
except FileNotFoundError:
@ -326,9 +326,9 @@ def md_restart(raid_device):
try:
LOG.debug('Restarting software RAID device %s', raid_device)
component_devices = _get_component_devices(raid_device)
utils.execute('mdadm', '--stop', raid_device)
utils.execute('mdadm', '--assemble', raid_device,
*component_devices)
il_utils.execute('mdadm', '--stop', raid_device)
il_utils.execute('mdadm', '--assemble', raid_device,
*component_devices)
except processutils.ProcessExecutionError as e:
error_msg = ('Could not restart md device %(dev)s: %(err)s' %
{'dev': raid_device, 'err': e})
@ -342,7 +342,7 @@ def md_get_raid_devices():
:return: A python dict containing details about the discovered RAID
devices
"""
report = utils.execute('mdadm', '--examine', '--scan')[0]
report = il_utils.execute('mdadm', '--examine', '--scan')[0]
lines = report.splitlines()
result = {}
for line in lines:
@ -360,7 +360,7 @@ def _md_scan_and_assemble():
This call does not fail if no md devices are present.
"""
try:
utils.execute('mdadm', '--assemble', '--scan', '--verbose')
il_utils.execute('mdadm', '--assemble', '--scan', '--verbose')
except FileNotFoundError:
LOG.warning('mdadm has not been found, RAID devices will not be '
'supported')
@ -424,8 +424,8 @@ def list_all_block_devices(block_type='disk',
"Cause: %(error)s", {'path': disk_by_path_dir, 'error': e})
columns = utils.LSBLK_COLUMNS
report = utils.execute('lsblk', '-Pbia',
'-o{}'.format(','.join(columns)))[0]
report = il_utils.execute('lsblk', '-Pbia',
'-o{}'.format(','.join(columns)))[0]
lines = report.splitlines()
context = pyudev.Context()
@ -1087,8 +1087,7 @@ class GenericHardwareManager(HardwareManager):
return
try:
stdout, _ = utils.execute('biosdevname', '-i',
interface_name)
stdout, _ = il_utils.execute('biosdevname', '-i', interface_name)
return stdout.rstrip('\n')
except OSError:
if not WARN_BIOSDEVNAME_NOT_FOUND:
@ -1150,7 +1149,7 @@ class GenericHardwareManager(HardwareManager):
return network_interfaces_list
def get_cpus(self):
lines = utils.execute('lscpu')[0]
lines = il_utils.execute('lscpu')[0]
cpu_info = {k.strip().lower(): v.strip() for k, v in
(line.split(':', 1)
for line in lines.split('\n')
@ -1469,7 +1468,7 @@ class GenericHardwareManager(HardwareManager):
args += ('--verbose', '--iterations', str(npasses), block_device.name)
try:
utils.execute(*args)
il_utils.execute(*args)
except (processutils.ProcessExecutionError, OSError) as e:
LOG.error("Erasing block device %(dev)s failed with error %(err)s",
{'dev': block_device.name, 'err': e})
@ -1502,8 +1501,8 @@ class GenericHardwareManager(HardwareManager):
try:
# Don't use the '--nodeps' of lsblk to also catch the
# parent device of partitions which are RAID members.
out, _ = utils.execute('lsblk', '--fs', '--noheadings',
block_device.name)
out, _ = il_utils.execute('lsblk', '--fs', '--noheadings',
block_device.name)
except processutils.ProcessExecutionError as e:
LOG.warning("Could not determine if %(name)s is a RAID member: "
"%(err)s",
@ -1544,7 +1543,7 @@ class GenericHardwareManager(HardwareManager):
return False
def _get_ata_security_lines(self, block_device):
output = utils.execute('hdparm', '-I', block_device.name)[0]
output = il_utils.execute('hdparm', '-I', block_device.name)[0]
if '\nSecurity: ' not in output:
return []
@ -1577,9 +1576,9 @@ class GenericHardwareManager(HardwareManager):
# instead of `scsi` or `sat` as smartctl will not be able to read
# a bridged device that it doesn't understand, and accordingly
# return an error code.
output = utils.execute('smartctl', '-d', 'ata', block_device.name,
'-g', 'security',
check_exit_code=[0, 127])[0]
output = il_utils.execute('smartctl', '-d', 'ata',
block_device.name, '-g', 'security',
check_exit_code=[0, 127])[0]
if 'Unavailable' in output:
# Smartctl is reporting it is unavailable, lets return false.
LOG.debug('Smartctl has reported that security is '
@ -1612,9 +1611,9 @@ class GenericHardwareManager(HardwareManager):
if 'not locked' in security_lines:
break
try:
utils.execute('hdparm', '--user-master', 'u',
'--security-unlock', password,
block_device.name)
il_utils.execute('hdparm', '--user-master', 'u',
'--security-unlock', password,
block_device.name)
except processutils.ProcessExecutionError as e:
LOG.info('Security unlock failed for device '
'%(name)s using password "%(password)s": %(err)s',
@ -1660,8 +1659,9 @@ class GenericHardwareManager(HardwareManager):
# SEC1. Try to transition to SEC5 by setting empty user
# password.
try:
utils.execute('hdparm', '--user-master', 'u',
'--security-set-pass', 'NULL', block_device.name)
il_utils.execute('hdparm', '--user-master', 'u',
'--security-set-pass', 'NULL',
block_device.name)
except processutils.ProcessExecutionError as e:
error_msg = ('Security password set failed for device '
'{name}: {err}'
@ -1674,8 +1674,8 @@ class GenericHardwareManager(HardwareManager):
erase_option += '-enhanced'
try:
utils.execute('hdparm', '--user-master', 'u', erase_option,
'NULL', block_device.name)
il_utils.execute('hdparm', '--user-master', 'u', erase_option,
'NULL', block_device.name)
except processutils.ProcessExecutionError as e:
# NOTE(TheJulia): Attempt unlock to allow fallback to shred
# to occur, otherwise shred will fail as well, as the security
@ -1720,8 +1720,8 @@ class GenericHardwareManager(HardwareManager):
try:
LOG.debug("Attempting to fetch NVMe capabilities for device %s",
block_device.name)
nvme_info, _e = utils.execute('nvme', 'id-ctrl',
block_device.name, '-o', 'json')
nvme_info, _e = il_utils.execute('nvme', 'id-ctrl',
block_device.name, '-o', 'json')
nvme_info = json.loads(nvme_info)
except processutils.ProcessExecutionError as e:
@ -1763,8 +1763,8 @@ class GenericHardwareManager(HardwareManager):
try:
LOG.debug("Attempting to nvme-format %s using secure format mode "
"(ses) %s", block_device.name, format_mode)
utils.execute('nvme', 'format', block_device.name, '-s',
format_mode, '-f')
il_utils.execute('nvme', 'format', block_device.name, '-s',
format_mode, '-f')
LOG.info("nvme-cli format for device %s (ses= %s ) completed "
"successfully.", block_device.name, format_mode)
return True
@ -1785,7 +1785,7 @@ class GenericHardwareManager(HardwareManager):
# different types of communication media and protocols and
# effectively used
for channel in range(1, 12):
out, e = utils.execute(
out, e = il_utils.execute(
"ipmitool lan print {} | awk '/IP Address[ \\t]*:/"
" {{print $4}}'".format(channel), shell=True)
if e.startswith("Invalid channel"):
@ -1822,7 +1822,7 @@ class GenericHardwareManager(HardwareManager):
# different types of communication media and protocols and
# effectively used
for channel in range(1, 12):
out, e = utils.execute(
out, e = il_utils.execute(
"ipmitool lan print {} | awk '/(IP|MAC) Address[ \\t]*:/"
" {{print $4}}'".format(channel), shell=True)
if e.startswith("Invalid channel"):
@ -1870,7 +1870,7 @@ class GenericHardwareManager(HardwareManager):
cmd = "ipmitool lan6 print {} {}_addr".format(
channel, 'dynamic' if dynamic else 'static')
try:
out, exc = utils.execute(cmd, shell=True)
out, exc = il_utils.execute(cmd, shell=True)
except processutils.ProcessExecutionError:
return
@ -1900,7 +1900,7 @@ class GenericHardwareManager(HardwareManager):
# different types of communication media and protocols and
# effectively used
for channel in range(1, 12):
addr_mode, e = utils.execute(
addr_mode, e = il_utils.execute(
r"ipmitool lan6 print {} enables | "
r"awk '/IPv6\/IPv4 Addressing Enables[ \t]*:/"
r"{{print $NF}}'".format(channel), shell=True)
@ -2149,9 +2149,11 @@ class GenericHardwareManager(HardwareManager):
LOG.debug("Creating partition on %(dev)s: %(str)s %(end)s",
{'dev': device, 'str': start_str,
'end': end_str})
utils.execute('parted', device, '-s', '-a',
'optimal', '--', 'mkpart', 'primary',
start_str, end_str)
il_utils.execute('parted', device, '-s', '-a',
'optimal', '--', 'mkpart', 'primary',
start_str, end_str)
except processutils.ProcessExecutionError as e:
msg = "Failed to create partitions on {}: {}".format(
device, e)
@ -2185,8 +2187,8 @@ class GenericHardwareManager(HardwareManager):
"""
def _scan_raids():
utils.execute('mdadm', '--assemble', '--scan',
check_exit_code=False)
il_utils.execute('mdadm', '--assemble', '--scan',
check_exit_code=False)
raid_devices = list_all_block_devices(block_type='raid',
ignore_raid=False,
ignore_empty=False)
@ -2236,12 +2238,12 @@ class GenericHardwareManager(HardwareManager):
# Remove md devices.
try:
utils.execute('wipefs', '-af', raid_device.name)
il_utils.execute('wipefs', '-af', raid_device.name)
except processutils.ProcessExecutionError as e:
LOG.warning('Failed to wipefs %(device)s: %(err)s',
{'device': raid_device.name, 'err': e})
try:
utils.execute('mdadm', '--stop', raid_device.name)
il_utils.execute('mdadm', '--stop', raid_device.name)
except processutils.ProcessExecutionError as e:
LOG.warning('Failed to stop %(device)s: %(err)s',
{'device': raid_device.name, 'err': e})
@ -2249,8 +2251,8 @@ class GenericHardwareManager(HardwareManager):
# Remove md metadata from component devices.
for component_device in component_devices:
try:
utils.execute('mdadm', '--examine', component_device,
use_standard_locale=True)
il_utils.execute('mdadm', '--examine', component_device,
use_standard_locale=True)
except processutils.ProcessExecutionError as e:
if "No md superblock detected" in str(e):
# actually not a component device
@ -2262,8 +2264,8 @@ class GenericHardwareManager(HardwareManager):
LOG.debug('Deleting md superblock on %s', component_device)
try:
utils.execute('mdadm', '--zero-superblock',
component_device)
il_utils.execute('mdadm', '--zero-superblock',
component_device)
except processutils.ProcessExecutionError as e:
LOG.warning('Failed to remove superblock from'
'%(device)s: %(err)s',
@ -2302,8 +2304,8 @@ class GenericHardwareManager(HardwareManager):
all_blks = reversed(self.list_block_devices(include_partitions=True))
for blk in all_blks:
try:
utils.execute('mdadm', '--examine', blk.name,
use_standard_locale=True)
il_utils.execute('mdadm', '--examine', blk.name,
use_standard_locale=True)
except processutils.ProcessExecutionError as e:
if "No md superblock detected" in str(e):
# actually not a component device
@ -2313,7 +2315,7 @@ class GenericHardwareManager(HardwareManager):
{'name': blk.name, 'err': e})
continue
try:
utils.execute('mdadm', '--zero-superblock', blk.name)
il_utils.execute('mdadm', '--zero-superblock', blk.name)
except processutils.ProcessExecutionError as e:
LOG.warning('Failed to remove superblock from'
'%(device)s: %(err)s',
@ -2325,7 +2327,7 @@ class GenericHardwareManager(HardwareManager):
for holder_disk in all_holder_disks_uniq:
LOG.info('Removing partitions on holder disk %s', holder_disk)
try:
utils.execute('wipefs', '-af', holder_disk)
il_utils.execute('wipefs', '-af', holder_disk)
except processutils.ProcessExecutionError as e:
LOG.warning('Failed to remove partitions on %s: %s',
holder_disk, e)

View File

@ -253,7 +253,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_interfaces(self,
@ -297,7 +297,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_interfaces_with_biosdevname(self,
@ -333,7 +333,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertTrue(interfaces[0].has_carrier)
self.assertEqual('em0', interfaces[0].biosdevname)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bios_given_nic_name_ok(self, mock_execute):
interface_name = 'eth0'
mock_execute.return_value = ('em0\n', '')
@ -342,7 +342,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock_execute.assert_called_once_with('biosdevname', '-i',
interface_name)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bios_given_nic_name_oserror(self, mock_execute):
interface_name = 'eth0'
mock_execute.side_effect = OSError()
@ -351,7 +351,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock_execute.assert_called_once_with('biosdevname', '-i',
interface_name)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(hardware, 'LOG', autospec=True)
def test_get_bios_given_nic_name_process_exec_err4(self, mock_log,
mock_execute):
@ -368,7 +368,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock_execute.assert_called_once_with('biosdevname', '-i',
interface_name)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(hardware, 'LOG', autospec=True)
def test_get_bios_given_nic_name_process_exec_err3(self, mock_log,
mock_execute):
@ -390,7 +390,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_interfaces_with_lldp(self,
@ -448,7 +448,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_list_network_interfaces_with_lldp_error(
self, mocked_execute, mocked_open, mocked_exists, mocked_listdir,
mocked_ifaddresses, mocked_lldp_info, mockedget_managers,
@ -484,7 +484,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_interfaces_no_carrier(self,
@ -526,7 +526,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_interfaces_with_vendor_info(self,
@ -569,7 +569,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_vlan_interfaces(self,
@ -613,7 +613,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_vlan_interfaces_using_lldp(self,
@ -666,7 +666,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
@mock.patch.object(netutils, 'interface_has_carrier', autospec=True)
def test_list_network_vlan_invalid_int(self,
@ -705,7 +705,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch('os.listdir', autospec=True)
@mock.patch('os.path.exists', autospec=True)
@mock.patch('builtins.open', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(netutils, 'get_mac_addr', autospec=True)
def test_list_network_vlan_interfaces_using_lldp_all(self,
mock_get_mac,
@ -747,7 +747,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(os, 'readlink', autospec=True)
@mock.patch.object(os, 'listdir', autospec=True)
@mock.patch.object(hardware, 'get_cached_node', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_os_install_device(self, mocked_execute, mock_cached_node,
mocked_listdir, mocked_readlink):
mocked_readlink.return_value = '../../sda'
@ -762,7 +762,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(os, 'readlink', autospec=True)
@mock.patch.object(os, 'listdir', autospec=True)
@mock.patch.object(hardware, 'get_cached_node', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_os_install_device_raid(self, mocked_execute,
mock_cached_node, mocked_listdir,
mocked_readlink):
@ -783,7 +783,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(os, 'readlink', autospec=True)
@mock.patch.object(os, 'listdir', autospec=True)
@mock.patch.object(hardware, 'get_cached_node', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_os_install_device_fails(self, mocked_execute,
mock_cached_node,
mocked_listdir, mocked_readlink):
@ -999,10 +999,9 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('fake-vendor', vendor)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
def test_get_cpus(self, mocked_execute, mte):
mocked_execute.return_value = (hws.LSCPU_OUTPUT, '')
mte.return_value = (hws.CPUINFO_FLAGS_OUTPUT, '')
def test_get_cpus(self, mocked_execute):
mocked_execute.side_effect = [(hws.LSCPU_OUTPUT, ''),
(hws.CPUINFO_FLAGS_OUTPUT, '')]
cpus = self.hardware.get_cpus()
self.assertEqual('Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz',
@ -1013,10 +1012,9 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(['fpu', 'vme', 'de', 'pse'], cpus.flags)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
def test_get_cpus2(self, mocked_execute, mte):
mocked_execute.return_value = (hws.LSCPU_OUTPUT_NO_MAX_MHZ, '')
mte.return_value = (hws.CPUINFO_FLAGS_OUTPUT, '')
def test_get_cpus2(self, mocked_execute):
mocked_execute.side_effect = [(hws.LSCPU_OUTPUT_NO_MAX_MHZ, ''),
(hws.CPUINFO_FLAGS_OUTPUT, '')]
cpus = self.hardware.get_cpus()
self.assertEqual('Intel(R) Xeon(R) CPU E5-1650 v3 @ 3.50GHz',
@ -1027,10 +1025,9 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(['fpu', 'vme', 'de', 'pse'], cpus.flags)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
def test_get_cpus_no_flags(self, mocked_execute, mte):
mocked_execute.return_value = (hws.LSCPU_OUTPUT, '')
mte.side_effect = processutils.ProcessExecutionError()
def test_get_cpus_no_flags(self, mocked_execute):
mocked_execute.side_effect = [(hws.LSCPU_OUTPUT, ''),
processutils.ProcessExecutionError()]
cpus = self.hardware.get_cpus()
self.assertEqual('Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz',
@ -1041,10 +1038,9 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual([], cpus.flags)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
def test_get_cpus_illegal_flags(self, mocked_execute, mte):
mocked_execute.return_value = (hws.LSCPU_OUTPUT, '')
mte.return_value = ('I am not a flag', '')
def test_get_cpus_illegal_flags(self, mocked_execute):
mocked_execute.side_effect = [(hws.LSCPU_OUTPUT, ''),
('I am not a flag', '')]
cpus = self.hardware.get_cpus()
self.assertEqual('Intel(R) Xeon(R) CPU E5-2609 0 @ 2.40GHz',
@ -1055,7 +1051,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual([], cpus.flags)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_psutil_v1(self, mocked_execute, mocked_psutil):
mocked_psutil.return_value.total = 3952 * 1024 * 1024
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_V1
@ -1065,7 +1061,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(4096, mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_psutil_v2(self, mocked_execute, mocked_psutil):
mocked_psutil.return_value.total = 3952 * 1024 * 1024
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_V2
@ -1075,7 +1071,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(65536, mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_psutil_bank_size(self, mocked_execute, mocked_psutil):
mocked_psutil.return_value.total = 3952 * 1024 * 1024
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_NO_MEMORY_BANK_SIZE
@ -1085,7 +1081,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(65536, mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_psutil_exception_v1(self, mocked_execute,
mocked_psutil):
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_V1
@ -1096,7 +1092,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(4096, mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_psutil_exception_v2(self, mocked_execute,
mocked_psutil):
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_V2
@ -1107,7 +1103,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(65536, mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_lshw_exception(self, mocked_execute, mocked_psutil):
mocked_execute.side_effect = OSError()
mocked_psutil.return_value.total = 3952 * 1024 * 1024
@ -1117,7 +1113,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertIsNone(mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_arm64_lshw(self, mocked_execute, mocked_psutil):
mocked_psutil.return_value.total = 3952 * 1024 * 1024
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_ARM64
@ -1127,7 +1123,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual(3952, mem.physical_mb)
@mock.patch('psutil.virtual_memory', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_memory_lshw_list(self, mocked_execute, mocked_psutil):
mocked_psutil.return_value.total = 3952 * 1024 * 1024
mocked_execute.return_value = (f"[{hws.LSHW_JSON_OUTPUT_V2[0]}]", "")
@ -1209,7 +1205,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(os, 'listdir', autospec=True)
@mock.patch.object(hardware, '_get_device_info', autospec=True)
@mock.patch.object(pyudev.Devices, 'from_device_file', autospec=False)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_list_all_block_device(self, mocked_execute, mocked_udev,
mocked_dev_vendor, mock_listdir,
mock_readlink):
@ -1278,7 +1274,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(os, 'listdir', autospec=True)
@mock.patch.object(hardware, '_get_device_info', autospec=True)
@mock.patch.object(pyudev.Devices, 'from_device_file', autospec=False)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_list_all_block_device_hctl_fail(self, mocked_execute, mocked_udev,
mocked_dev_vendor,
mocked_listdir):
@ -1298,7 +1294,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(os, 'listdir', autospec=True)
@mock.patch.object(hardware, '_get_device_info', autospec=True)
@mock.patch.object(pyudev.Devices, 'from_device_file', autospec=False)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_list_all_block_device_with_udev(self, mocked_execute, mocked_udev,
mocked_dev_vendor, mocked_listdir,
mocked_readlink):
@ -1452,7 +1448,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_success(self, mocked_execute,
mocked_raid_member):
mocked_execute.side_effect = [
@ -1484,7 +1480,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_success_no_smartctl(self, mocked_execute,
mocked_raid_member):
mocked_execute.side_effect = [
@ -1516,7 +1512,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_nosecurity_shred(self, mocked_execute,
mocked_raid_member):
hdparm_output = hws.HDPARM_INFO_TEMPLATE.split('\nSecurity:')[0]
@ -1541,7 +1537,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_notsupported_shred(self, mocked_execute,
mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1567,7 +1563,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_smartctl_unsupported_shred(self,
mocked_execute,
mocked_raid_member):
@ -1594,7 +1590,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_smartctl_fails_security_fallback_to_shred(
self, mocked_execute, mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1620,7 +1616,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_shred_uses_internal_info(self, mocked_execute,
mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1650,7 +1646,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_shred_0_pass_no_zeroize(self, mocked_execute,
mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1725,7 +1721,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mocked_exists.assert_called_once_with('/dev/disk/by-label/ir-vfd-dev')
self.assertFalse(mocked_link.called)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_shred_fail_oserror(self, mocked_execute):
mocked_execute.side_effect = OSError
block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
@ -1736,7 +1732,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'shred', '--force', '--zero', '--verbose', '--iterations', '1',
'/dev/sda')
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_shred_fail_processerror(self, mocked_execute):
mocked_execute.side_effect = processutils.ProcessExecutionError
block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
@ -1749,7 +1745,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_security_unlock_fallback_pass(
self, mocked_execute, mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1783,7 +1779,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'_is_linux_raid_member', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device',
autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_security_enabled(
self, mocked_execute, mock_shred, mocked_raid_member):
# Tests that an exception is thrown if all of the recovery passwords
@ -1820,7 +1816,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'_is_linux_raid_member', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device',
autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_security_enabled_unlock_attempt(
self, mocked_execute, mock_shred, mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1845,7 +1841,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.erase_block_device(self.node, block_device)
self.assertFalse(mock_shred.called)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__ata_erase_security_enabled_unlock_exception(
self, mocked_execute):
# test that an exception is thrown when security unlock fails with
@ -1871,7 +1867,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mocked_execute.assert_any_call('hdparm', '--user-master', 'u',
'--security-unlock', 'NULL', '/dev/sda')
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__ata_erase_security_enabled_set_password_exception(
self, mocked_execute):
hdparm_output = create_hdparm_info(
@ -1890,7 +1886,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware._ata_erase,
block_device)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__ata_erase_security_erase_exec_exception(
self, mocked_execute):
# Exception on security erase
@ -1919,7 +1915,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'_is_linux_raid_member', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device',
autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_frozen(self, mocked_execute, mock_shred,
mocked_raid_member):
hdparm_output = create_hdparm_info(
@ -1944,7 +1940,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'_is_linux_raid_member', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device',
autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_failed(self, mocked_execute, mock_shred,
mocked_raid_member):
hdparm_output_before = create_hdparm_info(
@ -1978,7 +1974,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'_is_linux_raid_member', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device',
autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_failed_continued(
self, mocked_execute, mock_shred, mocked_raid_member):
@ -2012,7 +2008,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'_is_linux_raid_member', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device',
autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_ata_erase_disabled(
self, mocked_execute, mock_shred, mocked_raid_member):
@ -2030,7 +2026,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
def test_normal_vs_enhanced_security_erase(self):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_security_erase_option(test_case,
enhanced_erase,
expected_option,
@ -2099,7 +2095,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock.call('/sys/fs/pstore/' + arg) for arg in pstore_entries
])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager,
'_is_virtual_media_device', autospec=True)
@mock.patch.object(hardware.GenericHardwareManager,
@ -2186,14 +2182,14 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock.call(self.hardware, block_devices[0])],
mock__is_vmedia.call_args_list)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__is_linux_raid_member(self, mocked_execute):
raid_member = hardware.BlockDevice('/dev/sda1', 'small', 65535, False)
mocked_execute.return_value = ('linux_raid_member host.domain:0 '
'85fa41e4-e0ae'), ''
self.assertTrue(self.hardware._is_linux_raid_member(raid_member))
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__is_linux_raid_member_false(self, mocked_execute):
raid_member = hardware.BlockDevice('/dev/md0', 'small', 65535, False)
mocked_execute.return_value = 'md0', ''
@ -2246,34 +2242,34 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock_dev_file.side_effect = reads
self.assertTrue(self.hardware._is_read_only_device(device))
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address(self, mocked_execute):
mocked_execute.return_value = '192.1.2.3\n', ''
self.assertEqual('192.1.2.3', self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address_virt(self, mocked_execute):
mocked_execute.side_effect = processutils.ProcessExecutionError()
self.assertIsNone(self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address_zeroed(self, mocked_execute):
mocked_execute.return_value = '0.0.0.0\n', ''
self.assertEqual('0.0.0.0', self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address_invalid(self, mocked_execute):
# In case of invalid lan channel, stdout is empty and the error
# on stderr is "Invalid channel"
mocked_execute.return_value = '\n', 'Invalid channel: 55'
self.assertEqual('0.0.0.0', self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address_random_error(self, mocked_execute):
mocked_execute.return_value = '192.1.2.3\n', 'Random error message'
self.assertEqual('192.1.2.3', self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address_iterate_channels(self, mocked_execute):
# For channel 1 we simulate unconfigured IP
# and for any other we return a correct IP address
@ -2289,34 +2285,34 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mocked_execute.side_effect = side_effect
self.assertEqual('192.1.2.3', self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_address_not_available(self, mocked_execute):
mocked_execute.return_value = '', ''
self.assertEqual('0.0.0.0', self.hardware.get_bmc_address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac_not_available(self, mocked_execute):
mocked_execute.return_value = '', ''
self.assertRaises(errors.IncompatibleHardwareMethodError,
self.hardware.get_bmc_mac)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac(self, mocked_execute):
mocked_execute.return_value = '192.1.2.3\n01:02:03:04:05:06', ''
self.assertEqual('01:02:03:04:05:06', self.hardware.get_bmc_mac())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac_virt(self, mocked_execute):
mocked_execute.side_effect = processutils.ProcessExecutionError()
self.assertIsNone(self.hardware.get_bmc_mac())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac_zeroed(self, mocked_execute):
mocked_execute.return_value = '0.0.0.0\n00:00:00:00:00:00', ''
self.assertRaises(errors.IncompatibleHardwareMethodError,
self.hardware.get_bmc_mac)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac_invalid(self, mocked_execute):
# In case of invalid lan channel, stdout is empty and the error
# on stderr is "Invalid channel"
@ -2324,13 +2320,13 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertRaises(errors.IncompatibleHardwareMethodError,
self.hardware.get_bmc_mac)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac_random_error(self, mocked_execute):
mocked_execute.return_value = ('192.1.2.3\n00:00:00:00:00:02',
'Random error message')
self.assertEqual('00:00:00:00:00:02', self.hardware.get_bmc_mac())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_mac_iterate_channels(self, mocked_execute):
# For channel 1 we simulate unconfigured IP
# and for any other we return a correct IP address
@ -2349,12 +2345,12 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mocked_execute.side_effect = side_effect
self.assertEqual('01:02:03:04:05:06', self.hardware.get_bmc_mac())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_not_enabled(self, mocked_execute):
mocked_execute.side_effect = [('ipv4\n', '')] * 11
self.assertEqual('::/0', self.hardware.get_bmc_v6address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_dynamic_address(self, mocked_execute):
mocked_execute.side_effect = [
('ipv6\n', ''),
@ -2363,7 +2359,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('2001:1234:1234:1234:1234:1234:1234:1234',
self.hardware.get_bmc_v6address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_static_address_both(self, mocked_execute):
dynamic_disabled = \
hws.IPMITOOL_LAN6_PRINT_DYNAMIC_ADDR.replace('active', 'disabled')
@ -2375,12 +2371,12 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('2001:5678:5678:5678:5678:5678:5678:5678',
self.hardware.get_bmc_v6address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_virt(self, mocked_execute):
mocked_execute.side_effect = processutils.ProcessExecutionError()
self.assertIsNone(self.hardware.get_bmc_v6address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_invalid_enables(self, mocked_execute):
def side_effect(*args, **kwargs):
if args[0].startswith('ipmitool lan6 print'):
@ -2389,7 +2385,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mocked_execute.side_effect = side_effect
self.assertEqual('::/0', self.hardware.get_bmc_v6address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_invalid_get_address(self, mocked_execute):
def side_effect(*args, **kwargs):
if args[0].startswith('ipmitool lan6 print'):
@ -2402,7 +2398,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('::/0', self.hardware.get_bmc_v6address())
@mock.patch.object(hardware, 'LOG', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_ipmitool_invalid_stdout_format(
self, mocked_execute, mocked_log):
def side_effect(*args, **kwargs):
@ -2418,7 +2414,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
'command: %(e)s', mock.ANY)
mocked_log.warning.assert_has_calls([one_call] * 14)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_bmc_v6address_channel_7(self, mocked_execute):
def side_effect(*args, **kwargs):
if not args[0].startswith('ipmitool lan6 print 7'):
@ -2437,7 +2433,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('2001:5678:5678:5678:5678:5678:5678:5678',
self.hardware.get_bmc_v6address())
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_validate_configuration_no_configuration(self, mocked_execute):
self.assertRaises(errors.SoftwareRAIDError,
self.hardware.validate_configuration,
@ -2509,7 +2505,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(raid_utils, '_get_actual_component_devices',
autospec=True)
@mock.patch.object(disk_utils, 'list_partitions', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration(self, mocked_os_path_isdir, mocked_execute,
mock_list_parts, mocked_actual_comp):
@ -2604,7 +2600,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(utils, 'get_node_boot_mode', lambda node: 'bios')
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_raid_5(self, mocked_execute,
mock_list_parts, mocked_actual_comp):
node = self.node
@ -2703,7 +2699,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(utils, 'get_node_boot_mode', lambda node: 'bios')
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_raid_6(self, mocked_execute,
mock_list_parts, mocked_actual_comp):
node = self.node
@ -2818,7 +2814,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
autospec=True)
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=True)
def test_create_configuration_efi(self, mocked_os_path_isdir,
mocked_execute, mock_list_parts,
@ -2899,7 +2895,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
autospec=True)
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration_force_gpt_with_disk_label(
self, mocked_os_path_isdir, mocked_execute, mock_list_part,
@ -2986,7 +2982,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
autospec=True)
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration_no_max(self, _mocked_isdir, mocked_execute,
mock_list_parts, mocked_actual_comp):
@ -3068,7 +3064,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
autospec=True)
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration_max_is_first_logical(self, _mocked_isdir,
mocked_execute,
@ -3153,7 +3149,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(utils, 'get_node_boot_mode', lambda node: 'bios')
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_with_hints(self, mocked_execute,
mock_list_parts,
mocked_actual_comp):
@ -3246,7 +3242,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock.call(x) for x in ['/dev/sda', '/dev/sdb']
])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration_invalid_raid_config(self,
mocked_os_path_is_dir,
@ -3270,7 +3266,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.create_configuration,
self.node, [])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_invalid_hints(self, mocked_execute):
for hints in [
[],
@ -3293,7 +3289,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.create_configuration,
self.node, [])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_mismatching_hints(self, mocked_execute):
device1 = hardware.BlockDevice('/dev/sda', 'sda', 107374182400, True)
device2 = hardware.BlockDevice('/dev/sdb', 'sdb', 107374182400, True)
@ -3325,7 +3321,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.node, [])
@mock.patch.object(disk_utils, 'list_partitions', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration_partitions_detected(self,
mocked_os_path_is_dir,
@ -3364,7 +3360,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=False)
def test_create_configuration_device_handling_failures(
self, mocked_os_path_is_dir, mocked_execute, mock_list_parts):
@ -3432,7 +3428,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_device_handling_failures_raid5(
self, mocked_execute, mock_list_parts):
raid_config = {
@ -3466,7 +3462,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.create_configuration,
self.node, [])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_create_configuration_device_handling_failures_raid6(
self, mocked_execute):
raid_config = {
@ -3511,7 +3507,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
autospec=True)
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=True)
def test_create_configuration_with_nvme(self, mocked_os_path_isdir,
mocked_execute, mock_list_parts,
@ -3590,7 +3586,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(disk_utils, 'list_partitions', autospec=True,
return_value=[])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'isdir', autospec=True, return_value=True)
def test_create_configuration_failure_with_nvme(self,
mocked_os_path_isdir,
@ -3655,7 +3651,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.create_configuration,
self.node, [])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__get_md_uuid(self, mocked_execute):
mocked_execute.side_effect = [(hws.MDADM_DETAIL_OUTPUT, '')]
md_uuid = hardware._get_md_uuid('/dev/md0')
@ -3663,7 +3659,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware, '_get_md_uuid', autospec=True)
@mock.patch.object(hardware, 'list_all_block_devices', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test__get_component_devices(self, mocked_execute,
mocked_list_all_block_devices,
mocked_md_uuid):
@ -3698,13 +3694,13 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock.call('mdadm', '--examine', '/dev/sdz1',
use_standard_locale=True)])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_holder_disks(self, mocked_execute):
mocked_execute.side_effect = [(hws.MDADM_DETAIL_OUTPUT, '')]
holder_disks = hardware.get_holder_disks('/dev/md0')
self.assertEqual(['/dev/vde', '/dev/vdf'], holder_disks)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
@mock.patch.object(os.path, 'exists', autospec=True)
@mock.patch.object(os, 'stat', autospec=True)
def test_get_holder_disks_with_whole_device(self, mocked_stat,
@ -3717,13 +3713,13 @@ class TestGenericHardwareManager(base.IronicAgentTest):
holder_disks = hardware.get_holder_disks('/dev/md0')
self.assertEqual(['/dev/vde', '/dev/vdf'], holder_disks)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_holder_disks_with_nvme(self, mocked_execute):
mocked_execute.side_effect = [(hws.MDADM_DETAIL_OUTPUT_NVME, '')]
holder_disks = hardware.get_holder_disks('/dev/md0')
self.assertEqual(['/dev/nvme0n1', '/dev/nvme1n1'], holder_disks)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_holder_disks_unexpected_devices(self, mocked_execute):
side_effect = hws.MDADM_DETAIL_OUTPUT_NVME.replace('nvme1n1p1',
'notmatching1a')
@ -3735,7 +3731,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
r'/dev/notmatching1a$',
hardware.get_holder_disks, '/dev/md0')
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_holder_disks_broken_raid0(self, mocked_execute):
mocked_execute.side_effect = [(hws.MDADM_DETAIL_OUTPUT_BROKEN_RAID0,
'')]
@ -3745,7 +3741,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware, 'get_holder_disks', autospec=True)
@mock.patch.object(hardware, '_get_component_devices', autospec=True)
@mock.patch.object(hardware, 'list_all_block_devices', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_delete_configuration(self, mocked_execute, mocked_list,
mocked_get_component, mocked_get_holder):
raid_device1 = hardware.BlockDevice('/dev/md0', 'RAID-1',
@ -3833,7 +3829,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware, '_get_component_devices', autospec=True)
@mock.patch.object(hardware, 'list_all_block_devices', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_delete_configuration_partition(self, mocked_execute, mocked_list,
mocked_get_component):
# This test checks that if no components are returned for a given
@ -3858,7 +3854,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware, '_get_component_devices', autospec=True)
@mock.patch.object(hardware, 'list_all_block_devices', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_delete_configuration_failure_blocks_remaining(
self, mocked_execute, mocked_list, mocked_get_component):
@ -3894,7 +3890,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
mock.call('mdadm', '--assemble', '--scan', check_exit_code=False),
])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_validate_configuration_valid_raid1(self, mocked_execute):
raid_config = {
"logical_disks": [
@ -3908,7 +3904,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertIsNone(self.hardware.validate_configuration(raid_config,
self.node))
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_validate_configuration_valid_raid1_raidN(self, mocked_execute):
raid_config = {
"logical_disks": [
@ -3927,7 +3923,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertIsNone(self.hardware.validate_configuration(raid_config,
self.node))
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_validate_configuration_invalid_MAX_MAX(self, mocked_execute):
raid_config = {
"logical_disks": [
@ -3947,7 +3943,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.validate_configuration,
raid_config, self.node)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_validate_configuration_invalid_raid_level(self, mocked_execute):
raid_config = {
"logical_disks": [
@ -3967,7 +3963,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.validate_configuration,
raid_config, self.node)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_validate_configuration_invalid_no_of_raids(self, mocked_execute):
raid_config = {
"logical_disks": [
@ -3992,7 +3988,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.hardware.validate_configuration,
raid_config, self.node)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_system_vendor_info(self, mocked_execute):
mocked_execute.return_value = hws.LSHW_JSON_OUTPUT_V1
vendor_info = self.hardware.get_system_vendor_info()
@ -4000,7 +3996,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('1234567', vendor_info.serial_number)
self.assertEqual('GENERIC', vendor_info.manufacturer)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_system_vendor_info_lshw_list(self, mocked_execute):
mocked_execute.return_value = (f"[{hws.LSHW_JSON_OUTPUT_V2[0]}]", "")
vendor_info = self.hardware.get_system_vendor_info()
@ -4008,7 +4004,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('1234', vendor_info.serial_number)
self.assertEqual('ABCD', vendor_info.manufacturer)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_get_system_vendor_info_failure(self, mocked_execute):
mocked_execute.side_effect = processutils.ProcessExecutionError()
vendor_info = self.hardware.get_system_vendor_info()
@ -4042,7 +4038,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_nvme_crypto_success(self, mocked_execute,
mocked_raid_member):
info = self.node['driver_internal_info']
@ -4066,7 +4062,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_nvme_userdata_success(self, mocked_execute,
mocked_raid_member):
info = self.node['driver_internal_info']
@ -4090,7 +4086,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_nvme_failed(self, mocked_execute,
mocked_raid_member):
info = self.node['driver_internal_info']
@ -4108,7 +4104,7 @@ class TestGenericHardwareManager(base.IronicAgentTest):
@mock.patch.object(hardware.GenericHardwareManager,
'_is_linux_raid_member', autospec=True)
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
def test_erase_block_device_nvme_format_unsupported(self, mocked_execute,
mocked_raid_member):
info = self.node['driver_internal_info']
@ -4256,7 +4252,7 @@ class TestEvaluateHardwareSupport(base.IronicAgentTest):
@mock.patch.object(os, 'listdir', lambda *_: [])
@mock.patch.object(utils, 'execute', autospec=True)
@mock.patch.object(il_utils, 'execute', autospec=True)
class TestModuleFunctions(base.IronicAgentTest):
@mock.patch.object(os, 'readlink', autospec=True)