Merge "Filter null NIC firmware versions from cache"
This commit is contained in:
@@ -180,6 +180,8 @@ class RedfishFirmware(base.FirmwareInterface):
|
||||
for net_adp in chassis.network_adapters.get_members():
|
||||
for net_adp_ctrl in net_adp.controllers:
|
||||
fw_pkg_v = net_adp_ctrl.firmware_package_version
|
||||
if not fw_pkg_v:
|
||||
continue
|
||||
net_adp_fw = {'component': redfish_utils.NIC_COMPONENT_PREFIX
|
||||
+ net_adp.identity, 'current_version': fw_pkg_v}
|
||||
nic_list.append(net_adp_fw)
|
||||
|
||||
@@ -353,6 +353,64 @@ class RedfishFirmwareTestCase(db_base.DbTestCase):
|
||||
'NetworkAdapters' in str(call)]
|
||||
self.assertEqual(len(debug_calls), 0)
|
||||
|
||||
@mock.patch.object(redfish_fw, 'LOG', autospec=True)
|
||||
@mock.patch.object(redfish_utils, 'get_system', autospec=True)
|
||||
@mock.patch.object(redfish_utils, 'get_manager', autospec=True)
|
||||
@mock.patch.object(redfish_utils, 'get_chassis', autospec=True)
|
||||
@mock.patch.object(objects, 'FirmwareComponentList', autospec=True)
|
||||
@mock.patch.object(objects, 'FirmwareComponent', spec_set=True,
|
||||
autospec=True)
|
||||
def test_retrieve_nic_components_invalid_firmware_version(
|
||||
self, fw_cmp_mock, fw_cmp_list, chassis_mock, manager_mock,
|
||||
system_mock, log_mock):
|
||||
"""Test that NIC components with missing versions are skipped."""
|
||||
for invalid_version in [None, ""]:
|
||||
fw_cmp_list.reset_mock()
|
||||
fw_cmp_mock.reset_mock()
|
||||
log_mock.reset_mock()
|
||||
|
||||
create_list = [{'component': 'bios', 'current_version': 'v1.0.0'},
|
||||
{'component': 'bmc', 'current_version': 'v1.0.0'}]
|
||||
fw_cmp_list.sync_firmware_components.return_value = (
|
||||
create_list, [], []
|
||||
)
|
||||
|
||||
bios_component = {'component': 'bios',
|
||||
'current_version': 'v1.0.0',
|
||||
'node_id': self.node.id}
|
||||
|
||||
bmc_component = {'component': 'bmc', 'current_version': 'v1.0.0',
|
||||
'node_id': self.node.id}
|
||||
|
||||
with task_manager.acquire(self.context, self.node.uuid,
|
||||
shared=True) as task:
|
||||
manager_mock.return_value.firmware_version = "v1.0.0"
|
||||
system_mock.return_value.bios_version = "v1.0.0"
|
||||
|
||||
netadp_ctrl = mock.MagicMock()
|
||||
netadp_ctrl.firmware_package_version = invalid_version
|
||||
netadp = mock.MagicMock()
|
||||
netadp.identity = 'NIC1'
|
||||
netadp.controllers = [netadp_ctrl]
|
||||
net_adapters = mock.MagicMock()
|
||||
net_adapters.get_members.return_value = [netadp]
|
||||
chassis_mock.return_value.network_adapters = net_adapters
|
||||
task.driver.firmware.cache_firmware_components(task)
|
||||
|
||||
fw_cmp_list.sync_firmware_components.assert_called_once_with(
|
||||
task.context, task.node.id,
|
||||
[{'component': 'bios', 'current_version': 'v1.0.0'},
|
||||
{'component': 'bmc', 'current_version': 'v1.0.0'}])
|
||||
|
||||
fw_cmp_calls = [
|
||||
mock.call(task.context, **bios_component),
|
||||
mock.call().create(),
|
||||
mock.call(task.context, **bmc_component),
|
||||
mock.call().create()
|
||||
]
|
||||
fw_cmp_mock.assert_has_calls(fw_cmp_calls)
|
||||
log_mock.warning.assert_not_called()
|
||||
|
||||
@mock.patch.object(redfish_utils, 'LOG', autospec=True)
|
||||
@mock.patch.object(redfish_utils, '_get_connection', autospec=True)
|
||||
def test_missing_updateservice(self, conn_mock, log_mock):
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
NIC firmware components with null or empty firmware package versions
|
||||
are now filtered out during caching to avoid NOT NULL database
|
||||
constraint violations.
|
||||
Reference in New Issue
Block a user