*** Settings *** Documentation This suite tests IPMI Payload in OpenBMC. ... This script verifies Get Device ID IPMI command. ... ... Response data validated for each and every byte, ... with respect to expected response. ... ... Following data validated in response bytes : ... Device ID, Device Revision, Firmware Revision 1 & 2, ... IPMI Version, Manufacture ID, Product ID, ... Auxiliary Firmware Revision Information ... ... Request Data for Get Device ID defined under, ... - data/ipmi_raw_cmd_table.py Resource ../lib/ipmi_client.robot Resource ../lib/openbmc_ffdc.robot Library Collections Library ../lib/ipmi_utils.py Library ../lib/var_funcs.py Variables ../data/ipmi_raw_cmd_table.py *** Test Cases *** Get Device ID Via IPMI [Documentation] Verify Get Device ID using IPMI and check whether a response is received. [Tags] Get_Device_ID_Via_IPMI # Verify Get Device ID. ${resp}= Run External IPMI Raw Command ... ${IPMI_RAW_CMD['Device ID']['Get'][0]} Should Not Contain ${resp} ${IPMI_RAW_CMD['Device ID']['Get'][1]} Verify Get Device ID With Invalid Data Request [Documentation] Verify Get Device ID with invalid data request via IPMI. [Tags] Verify_Get_Device_ID_With_Invalid_Data_Request # Run IPMI Get Device ID command with invalid request data byte. ${resp}= Run Keyword and Expect Error *Request data length invalid* ... Run External IPMI Raw Command ${IPMI_RAW_CMD['Device ID']['Get'][0]} 0x00 # Verify error code in 'rsp='. Should Contain ${resp} ${IPMI_RAW_CMD['Device ID']['Get'][2]} Verify Device ID Response Data Via IPMI [Documentation] Verify Get Device ID response data bytes using IPMI. [Tags] Verify_Device_ID_Response_Data_Via_IPMI # Get Device ID IPMI command. ${resp}= Run External IPMI Raw Command ... ${IPMI_RAW_CMD['Device ID']['Get'][0]} # Split each and every byte and form list. ${resp}= Split String ${resp} # Checking Device ID. Run Keyword And Continue On Failure Should Not Be Equal ${resp[0]} 00 ... msg=Device ID cannot be Unspecified # Verify Device Revision. ${device_rev}= Set Variable ${resp[1]} ${device_rev}= Convert To Binary ${device_rev} base=16 ${device_rev}= Zfill Data ${device_rev} 8 # Comparing the reserved bits from Device Revision. Run Keyword And Continue On Failure Should Be Equal As Strings ${device_rev[1:4]} 000 # Get version details from /etc/os-release. ${os_release}= Get BMC OS Release Details ${version}= Get Version Details From BMC OS Release ${os_release['version']} # Verify Firmware Revision 1. ${firmware_rev1}= Set Variable ${version[0]} Run Keyword And Continue On Failure Should Be Equal ${resp[2]} 0${firmware_rev1} # Verify Firmware Revision 2. ${firmware_rev2}= Set Variable ${version[1]} Run Keyword And Continue On Failure Should Be Equal ${resp[3]} 0${firmware_rev2} # Verify IPMI Version. Run Keyword And Continue On Failure Should Be Equal ${resp[4]} 02 # Verify Manufacture ID. ${manufacture_id}= Set Variable ${resp[6:9]} ${manufacture_id}= Evaluate "".join(${manufacture_id}) ${manufacture_data}= Convert To Binary ${manufacture_id} base=16 # Manufacure ID has Most significant four bits - reserved (0000b) Run Keyword And Continue On Failure Should Be Equal ${manufacture_data[-5:-1]} 0000 # Verify Product ID. ${product_id}= Set Variable ${resp[9:11]} ${product_id}= Evaluate "".join(${product_id}) Run Keyword And Continue On Failure Should Not Be Equal ${product_id} 0000 ... msg=Product ID cannot be Zero # Verify Auxiliary Firmware Revision Information. # etc/os-release - from bmc. ${auxiliary_info}= Get Auxiliary Firmware Revision Information # Get Auxiliary Firmware Revision Information from IPMI response. ${auxiliary_rev_version}= Set Variable ${resp[11:]} Reverse List ${auxiliary_rev_version} ${auxiliary_rev_version}= Evaluate "".join(${auxiliary_rev_version}) ${auxiliary_rev_version}= Convert To Integer ${auxiliary_rev_version} 16 # Compare both IPMI aux version and dev_id.json aux version. ${dev_id_data}= Get Device Info From BMC ${aux_info}= Get From Dictionary ${dev_id_data} aux Run Keyword And Continue On Failure Should Be Equal ${aux_info} ${auxiliary_rev_version} # Compare both IPMI version and /etc/os-release version. Run Keyword And Continue On Failure Should Be Equal ${auxiliary_info} ${auxiliary_rev_version} *** Keywords *** Get BMC OS Release Details [Documentation] To get the release details from bmc etc/os-release. # The BMC OS Release information will be, # for example, # ID=openbmc-phosphor # NAME="ADCD EFG BMC (OpenBMC Project Reference Distro)" # VERSION="2.9.1-2719" # VERSION_ID=2.9.1-2719-xxxxxxxx # PRETTY_NAME="ABCD EFG BMC (OpenBMC Project Reference Distro) 2.9.1-2719" # BUILD_ID="xxxxxxxxxx" # OPENBMC_TARGET_MACHINE="efg" ${os_release}= Get BMC Release Info ${os_release}= Convert To Dictionary ${os_release} [Return] ${os_release} Get Version Details From BMC OS Release [Documentation] To get the Version details from bmc etc/os-release, ... and returns list consists of major, minor and auxiliary version. [Arguments] ${version} # As per BMC, VERSION="X.Y.Z-ZZZZ" # ${version} - ["X", "Y" ,"Z-ZZZZ"] # here, X - major version, Y - minor version, # Z-ZZZZ - auxiliary version. ${version}= Split String ${version} . [Return] ${version} Get Auxiliary Firmware Revision Information [Documentation] To Get the Auxiliary Firmware Revision Information from BMC etc/os-release. # Get the Auxiliary Firmware Revision Information version from etc/os-release. ${os_release}= Get BMC OS Release Details # Fetch the version from dictionary response and identify Auxiliary version. ${version}= Get Version Details From BMC OS Release ${os_release['version']} ${aux_rev}= Set Variable ${version[2]} # Remove extra special character. ${aux_rev}= Replace String ${aux_rev} - ${EMPTY} ${aux_rev}= Convert To Integer ${aux_rev} [Return] ${aux_rev} Get Device Info From BMC [Documentation] To get the device information from BMC. # Get Device ID information from BMC. ${data}= Bmc Execute Command cat /usr/share/ipmi-providers/dev_id.json ${data}= Convert To List ${data} # Fetching dictionary from the response. ${info}= Set Variable ${data[0]} ${info}= Evaluate dict(${info}) [Return] ${info}