*** Settings *** Documentation This suite tests System Vital Product Data (VPD) using vpdtool. Library ../../lib/vpd_utils.py Variables ../../data/vpd_variables.py Resource ../../lib/openbmc_ffdc.robot Test Teardown FFDC On Test Case Fail *** Variables *** ${CMD_GET_PROPERTY_INVENTORY} busctl get-property xyz.openbmc_project.Inventory.Manager ${DR_WRITE_VALUE} XYZ Component ${PN_WRITE_VALUE} XYZ1234 ${SN_WRITE_VALUE} ABCD12345678 *** Test Cases *** Verify System VPD [Documentation] Verify system VPD details via vpdtool '-i' option. [Tags] Verify_System_VPD ${vpd_records}= Vpdtool -i ${components}= Get Dictionary Keys ${vpd_records} FOR ${component} IN @{components} Verify VPD Data ${vpd_records} ${component} END Verify VPD Component Read [Documentation] Verify details of VPD component via vpdtool. [Tags] Verify_VPD_Component_Read ${components}= Get Dictionary Keys ${VPD_DETAILS} FOR ${component} IN @{components} Verify VPD Component Read Operation ${component} END Verify VPD Field Read [Documentation] Verify reading VPD field value via vpdtool. [Tags] Verify_VPD_Field_Read ${components}= Get Dictionary Keys ${VPD_DETAILS} FOR ${component} IN @{components} Verify VPD Field Read Operation ${component} END Verify VPD Field Write [Documentation] Verify writing VPD field value via vpdtool. [Tags] Verify_VPD_Field_Write ${components}= Get Dictionary Keys ${VPD_DETAILS} FOR ${component} IN @{components} # VPD fields "DR", "CC" and "FN" will be added later. @{vpd_fields}= Create List SN PN ${field}= Evaluate random.choice($vpd_fields) random Verify VPD Field Write Operation ${component} ${field} END *** Keywords *** Verify VPD Data [Documentation] Verify VPD data of given component. [Arguments] ${vpd_records} ${component} # Description of arguments: # vpd_records All VPD data Via vpdtool. # component VPD component (e.g. /system/chassis/motherboard/vdd_vrm1). # Verification of "CC" and "FN" will be added later. @{vpd_fields}= Create List DR LocationCode SN PN FOR ${field} IN @{vpd_fields} ${busctl_field}= Set Variable If ... '${field}' == 'DR' xyz.openbmc_project.Inventory.Item PrettyName ... '${field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode ... '${field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber ... '${field}' == 'SN' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory${component} ... ${busctl_field} ${cmd_output}= BMC Execute Command ${cmd} # Example of cmd_output: # [0]: s "ABCD.XY1.1234567-P0" # [1]: # [2]: 0 Valid Value vpd_records['${component}']['${field}'] ['${cmd_output[0].split('"')[1].strip('"')}'] END Valid Value vpd_records['${component}']['type'] ['${VPD_DETAILS['${component}']['type']}'] Verify VPD Component Read Operation [Documentation] Verify reading VPD details of given component via vpdtool. [Arguments] ${component} # Description of arguments: # component VDP component (e.g. /system/chassis/motherboard/vdd_vrm1). ${vpd_records}= Vpdtool -o -O ${component} # Example output from 'Vpdtool -o -O /system/chassis/motherboard/vdd_vrm1': # [/system/chassis/motherboard/vdd_vrm1]: # [DR]: CPU POWER CARD # [type]: xyz.openbmc_project.Inventory.Item.Vrm # [CC]: E123 # [FN]: F123456 # [LocationCode]: ABCD.XY1.1234567-P0 # [SN]: YL2E32010000 # [PN]: PN12345 Verify VPD Data ${vpd_records} ${component} Verify VPD Field Read Operation [Documentation] Verify reading all VPD fields for given component via vpdtool. [Arguments] ${component} # Description of arguments: # component VDP component (e.g. /system/chassis/motherboard/vdd_vrm1). # Verification of "CC" and "FN" will be added later. @{vpd_fields}= Create List DR SN PN FOR ${fields} IN @{vpd_fields} Verify VPD Field Value ${component} ${fields} END Verify VPD Field Write Operation [Documentation] Verify writing VPD fields for given component via vpdtool. [Arguments] ${component} ${field} [Teardown] Restore VPD Value ${component} ${field} ${old_field_value} # Description of arguments: # component VPD component (e.g. /system/chassis/motherboard/vdd_vrm1). # field VPD component field (e.g. PN, SN) ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field} ${old_field_value}= Set Variable ${vpd_records['${component}']['${field}']} ${write_value}= Set Variable If ... '${field}' == 'DR' ${DR_WRITE_VALUE} ... '${field}' == 'PN' ${PN_WRITE_VALUE} ... '${field}' == 'SN' ${SN_WRITE_VALUE} Vpdtool -w -O ${component} -R VINI -K ${field} --value ${write_value} Verify VPD Field Value ${component} ${field} Restore VPD Value [Documentation] Restore VPD's field value of given component. [Arguments] ${component} ${field} ${value} # Description of arguments: # component VPD component (e.g. /system/chassis/motherboard/vdd_vrm1). # field VPD component field (e.g. PN, SN) # value VPD value to be restore. Vpdtool -w -O ${component} -R VINI -K ${field} --value ${value} Verify VPD Field Value [Documentation] Verify VPD field value via vpdtool. [Arguments] ${component} ${field} # Description of arguments: # component VDP component (e.g. /system/chassis/motherboard/vdd_vrm1). # field VPD field (e.g. DR, SN, PN) ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field} ${busctl_field}= Set Variable If ... '${field}' == 'DR' xyz.openbmc_project.Inventory.Item PrettyName ... '${field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber ... '${field}' == 'SN' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory${component} ... ${busctl_field} ${cmd_output}= BMC Execute Command ${cmd} Valid Value vpd_records['${component}']['${field}'] ['${cmd_output[0].split('"')[1].strip('"')}']