Handle a different related properties for missing TransferProtocolType

Closes-Bug: 2048430
Change-Id: I413830261c8e1538c9bc4745c0a72176771cc631
This commit is contained in:
Fedor Tarasenko 2024-01-06 22:06:54 +03:00
parent ac0c3e10c6
commit f4b84abadf
4 changed files with 40 additions and 1 deletions

View File

@ -0,0 +1,6 @@
---
fixes:
- |
Correctly handles error code ``Base.1.12.ActionParameterMissing`` when dealing with
hardware that requires ``TransferProtocolType`` for virtual media
operations and has different message in RelatedProperties response.

View File

@ -118,7 +118,8 @@ class VirtualMedia(base.ResourceBase):
return (
(error.code.endswith(".ActionParameterMissing")
or error.code.endswith(".PropertyMissing"))
and "#/TransferProtocolType" in error.related_properties
and (("#/TransferProtocolType" in error.related_properties)
or ("/TransferProtocolType" in error.related_properties))
)
def is_transfer_method_required(self, error=None):

View File

@ -0,0 +1,22 @@
{
"error": {
"@Message.ExtendedInfo": [
{
"@odata.type": "#Message.v1_0_8.Message",
"Message": "The action /redfish/v1/Managers/Self/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia requires the parameter TransferProtocolType to be present in the request body.",
"MessageArgs": [
"/redfish/v1/Managers/Self/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia",
"TransferProtocolType"
],
"MessageId": "Base.1.12.ActionParameterMissing",
"RelatedProperties": [
"/TransferProtocolType"
],
"Resolution": "Supply the action with the required parameter in the request body when the request is resubmitted.",
"Severity": "Critical"
}
],
"code": "Base.1.12.ActionParameterMissing",
"message": "The action /redfish/v1/Managers/Self/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia requires the parameter TransferProtocolType to be present in the request body."
}
}

View File

@ -207,6 +207,16 @@ class VirtualMediaTestCase(base.TestCase):
retval = self.sys_virtual_media.is_transfer_protocol_required(error)
self.assertTrue(retval)
def test_is_transfer_protocol_required_alt3(self):
with open('sushy/tests/unit/json_samples/'
'transfer_proto_required_error3.json') as f:
response_obj = json.load(f)
response = mock.Mock(spec=['json', 'status_code'])
response.json.return_value = response_obj
error = exceptions.HTTPError('GET', 'VirtualMedia', response)
retval = self.sys_virtual_media.is_transfer_protocol_required(error)
self.assertTrue(retval)
def test_is_transfer_method_required(self):
with open('sushy/tests/unit/json_samples/'
'transfer_method_required_error.json') as f: