Create VPD tool utility file
Changes:
Move the vpd-tool specific keywords to independent
resource file.
Tested:
Executed test_vpd_tool.robot on BMC environment.
Change-Id: Icc578f80c4de171339cb37e606daff334d1c8a21
Signed-off-by: Sridevi Ramesh <sridevra@in.ibm.com>
diff --git a/lib/vpd_tool_resource.robot b/lib/vpd_tool_resource.robot
new file mode 100644
index 0000000..81922fe
--- /dev/null
+++ b/lib/vpd_tool_resource.robot
@@ -0,0 +1,184 @@
+*** Settings ***
+Documentation Utility file for system Vital Product Data (VPD) using vpdtool.
+
+Library ../../lib/vpd_utils.py
+Variables ../../data/vpd_variables.py
+Resource ../../lib/boot_utils.robot
+
+
+*** Variables ***
+
+${DR_WRITE_VALUE} XYZ Component
+${PN_WRITE_VALUE} XYZ1234
+${SN_WRITE_VALUE} ABCD12345678
+@{fields} PN SN LocationCode
+@{vpd_fields} PN SN
+
+
+*** Keywords ***
+
+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
+
+ ${vpdtool_res}= Set To Dictionary ${vpd_records}[${component}]
+ FOR ${vpd_field} IN @{fields}
+ ${match_key_exists}= Run Keyword And Return Status
+ ... Dictionary Should Contain Key ${vpdtool_res} ${vpd_field}
+ IF '${match_key_exists}' == 'True'
+ # drive components busctl field response in ascii due to that checking only locationcode.
+ IF 'drive' in '${component}'
+ ${vpd_field}= Set Variable LocationCode
+ END
+ # Skip check if VPD field is empty.
+ IF '${vpd_records['${component}']['${vpd_field}']}' == '' CONTINUE
+
+ # Get VPD field values via busctl.
+ ${busctl_field}= Set Variable If
+ ... '${vpd_field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode
+ ... '${vpd_field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
+ ... '${vpd_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}
+ # Check whether the vpdtool response and busctl response matching.
+ Valid Value vpd_records['${component}']['${vpd_field}']
+ ... ['${cmd_output[0].split('"')[1].strip('"')}']
+ ELSE
+ CONTINUE
+ END
+ END
+
+
+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).
+
+ ${vpd_records}= Vpdtool -o -O ${component}
+ ${vpdtool_res}= Set To Dictionary ${vpd_records}[${component}]
+ FOR ${field} IN @{vpd_fields}
+ ${match_key_exists}= Run Keyword And Return Status
+ ... Dictionary Should Contain Key ${vpdtool_res} ${field}
+ IF '${match_key_exists}' == 'True'
+ ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field}
+ # Skip check if field value is empty.
+ IF '${vpd_records['${component}']['${field}']}' == '' CONTINUE
+
+ ${busctl_field}= Set Variable If
+ ... '${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}
+
+ # Check vpdtool response and busctl response for the component field.
+ Valid Value vpd_records['${component}']['${field}']
+ ... ['${cmd_output[0].split('"')[1].strip('"')}']
+ ELSE
+ CONTINUE
+ END
+ 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}
+ Set Test Variable ${old_field_value} ${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)
+
+ Redfish OBMC Reboot (off) stack_mode=normal
+ ${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('"')}']
+
+
+Verify VPD Data Via Vpdtool
+ [Documentation] Get VPD details of given component via vpdtool and verify it
+ ... using busctl command.
+ [Arguments] ${component} ${field}
+ # Description of arguments:
+ # component VPD component (e.g. System,Chassis etc).
+ # field VPD field (e.g. Serialnumber,LocationCode etc).
+
+ ${component_url}= Set Variable If
+ ... '${component}' == 'System' /system
+
+ # Get VPD details of given component via vpd-tool.
+ ${vpd_records}= Vpdtool -o -O ${component_url}
+
+ # Get VPD details of given component via busctl command.
+ ${busctl_field}= Set Variable If
+ ... '${field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode
+ ... '${field}' == 'Model' xyz.openbmc_project.Inventory.Decorator.Asset Model
+ ... '${field}' == 'SerialNumber' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
+
+ ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory/system
+ ... ${busctl_field}
+ ${cmd_output}= BMC Execute Command ${cmd}
+ # Example of cmd_output:
+ # [0]: s "ABCD.XY1.1234567-P0"
+ # [1]:
+ # [2]: 0
+
+ # Cross check vpdtool output with busctl response.
+ Should Be Equal As Strings ${vpd_records["/system"]["${field}"]}
+ ... ${cmd_output[0].split('"')[1].strip('"')}
diff --git a/openpower/vpd/test_vpd_tool.robot b/openpower/vpd/test_vpd_tool.robot
index 862cbb7..e9467df 100644
--- a/openpower/vpd/test_vpd_tool.robot
+++ b/openpower/vpd/test_vpd_tool.robot
@@ -3,21 +3,18 @@
Library ../../lib/vpd_utils.py
Variables ../../data/vpd_variables.py
+
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/boot_utils.robot
+Resource ../../lib/vpd_tool_resource.robot
Test Teardown FFDC On Test Case Fail
-Test Tags VPD_Tool
+Test Tags VPD_Tool
*** 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
-@{fields} PN SN LocationCode
-@{vpd_fields} PN SN
*** Test Cases ***
@@ -74,172 +71,3 @@
${field}= Evaluate random.choice($vpd_fields) random
Verify VPD Field Write Operation ${component} ${field}
END
-
-
-*** Keywords ***
-
-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
-
- ${vpdtool_res}= Set To Dictionary ${vpd_records}[${component}]
- FOR ${vpd_field} IN @{fields}
- ${match_key_exists}= Run Keyword And Return Status
- ... Dictionary Should Contain Key ${vpdtool_res} ${vpd_field}
- IF '${match_key_exists}' == 'True'
- # drive components busctl field response in ascii due to that checking only locationcode.
- IF 'drive' in '${component}'
- ${vpd_field}= Set Variable LocationCode
- END
- # Skip check if VPD field is empty.
- IF '${vpd_records['${component}']['${vpd_field}']}' == '' CONTINUE
-
- # Get VPD field values via busctl.
- ${busctl_field}= Set Variable If
- ... '${vpd_field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode
- ... '${vpd_field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
- ... '${vpd_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}
- # Check whether the vpdtool response and busctl response matching.
- Valid Value vpd_records['${component}']['${vpd_field}']
- ... ['${cmd_output[0].split('"')[1].strip('"')}']
- ELSE
- CONTINUE
- END
- END
-
-
-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).
-
- ${vpd_records}= Vpdtool -o -O ${component}
- ${vpdtool_res}= Set To Dictionary ${vpd_records}[${component}]
- FOR ${field} IN @{vpd_fields}
- ${match_key_exists}= Run Keyword And Return Status
- ... Dictionary Should Contain Key ${vpdtool_res} ${field}
- IF '${match_key_exists}' == 'True'
- ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field}
- # Skip check if field value is empty.
- IF '${vpd_records['${component}']['${field}']}' == '' CONTINUE
-
- ${busctl_field}= Set Variable If
- ... '${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}
-
- # Check vpdtool response and busctl response for the component field.
- Valid Value vpd_records['${component}']['${field}']
- ... ['${cmd_output[0].split('"')[1].strip('"')}']
- ELSE
- CONTINUE
- END
- 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}
- Set Test Variable ${old_field_value} ${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)
-
- Redfish OBMC Reboot (off) stack_mode=normal
- ${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('"')}']
-
-
-Verify VPD Data Via Vpdtool
- [Documentation] Get VPD details of given component via vpdtool and verify it
- ... using busctl command.
- [Arguments] ${component} ${field}
- # Description of arguments:
- # component VPD component (e.g. System,Chassis etc).
- # field VPD field (e.g. Serialnumber,LocationCode etc).
-
- ${component_url}= Set Variable If
- ... '${component}' == 'System' /system
-
- # Get VPD details of given component via vpd-tool.
- ${vpd_records}= Vpdtool -o -O ${component_url}
-
- # Get VPD details of given component via busctl command.
- ${busctl_field}= Set Variable If
- ... '${field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode
- ... '${field}' == 'Model' xyz.openbmc_project.Inventory.Decorator.Asset Model
- ... '${field}' == 'SerialNumber' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
-
- ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory/system
- ... ${busctl_field}
- ${cmd_output}= BMC Execute Command ${cmd}
- # Example of cmd_output:
- # [0]: s "ABCD.XY1.1234567-P0"
- # [1]:
- # [2]: 0
-
- # Cross check vpdtool output with busctl response.
- Should Be Equal As Strings ${vpd_records["/system"]["${field}"]}
- ... ${cmd_output[0].split('"')[1].strip('"')}