|  | *** 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 | 
|  |  | 
|  |  | 
|  | Library             Collections | 
|  | Library             ../lib/ipmi_utils.py | 
|  | Library             ../lib/var_funcs.py | 
|  | Resource            ../lib/ipmi_client.robot | 
|  | Resource            ../lib/openbmc_ffdc.robot | 
|  | 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} |