blob: 81922feb400efe43a258dbe2c7dce231face4eb9 [file] [log] [blame]
Sridevi Ramesh87cfb9e2025-06-10 02:06:46 -05001*** Settings ***
2Documentation Utility file for system Vital Product Data (VPD) using vpdtool.
3
4Library ../../lib/vpd_utils.py
5Variables ../../data/vpd_variables.py
6Resource ../../lib/boot_utils.robot
7
8
9*** Variables ***
10
11${DR_WRITE_VALUE} XYZ Component
12${PN_WRITE_VALUE} XYZ1234
13${SN_WRITE_VALUE} ABCD12345678
14@{fields} PN SN LocationCode
15@{vpd_fields} PN SN
16
17
18*** Keywords ***
19
20Verify VPD Component Read Operation
21 [Documentation] Verify reading VPD details of given component via vpdtool.
22 [Arguments] ${component}
23 # Description of arguments:
24 # component VDP component (e.g. /system/chassis/motherboard/vdd_vrm1).
25
26 ${vpd_records}= Vpdtool -o -O ${component}
27
28 # Example output from 'Vpdtool -o -O /system/chassis/motherboard/vdd_vrm1':
29 # [/system/chassis/motherboard/vdd_vrm1]:
30 # [DR]: CPU POWER CARD
31 # [type]: xyz.openbmc_project.Inventory.Item.Vrm
32 # [CC]: E123
33 # [FN]: F123456
34 # [LocationCode]: ABCD.XY1.1234567-P0
35 # [SN]: YL2E32010000
36 # [PN]: PN12345
37
38 ${vpdtool_res}= Set To Dictionary ${vpd_records}[${component}]
39 FOR ${vpd_field} IN @{fields}
40 ${match_key_exists}= Run Keyword And Return Status
41 ... Dictionary Should Contain Key ${vpdtool_res} ${vpd_field}
42 IF '${match_key_exists}' == 'True'
43 # drive components busctl field response in ascii due to that checking only locationcode.
44 IF 'drive' in '${component}'
45 ${vpd_field}= Set Variable LocationCode
46 END
47 # Skip check if VPD field is empty.
48 IF '${vpd_records['${component}']['${vpd_field}']}' == '' CONTINUE
49
50 # Get VPD field values via busctl.
51 ${busctl_field}= Set Variable If
52 ... '${vpd_field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode
53 ... '${vpd_field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
54 ... '${vpd_field}' == 'SN' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
55 ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY}
56 ... /xyz/openbmc_project/inventory${component} ${busctl_field}
57 ${cmd_output}= BMC Execute Command ${cmd}
58 # Check whether the vpdtool response and busctl response matching.
59 Valid Value vpd_records['${component}']['${vpd_field}']
60 ... ['${cmd_output[0].split('"')[1].strip('"')}']
61 ELSE
62 CONTINUE
63 END
64 END
65
66
67Verify VPD Field Read Operation
68 [Documentation] Verify reading all VPD fields for given component via vpdtool.
69 [Arguments] ${component}
70 # Description of arguments:
71 # component VDP component (e.g. /system/chassis/motherboard/vdd_vrm1).
72
73 ${vpd_records}= Vpdtool -o -O ${component}
74 ${vpdtool_res}= Set To Dictionary ${vpd_records}[${component}]
75 FOR ${field} IN @{vpd_fields}
76 ${match_key_exists}= Run Keyword And Return Status
77 ... Dictionary Should Contain Key ${vpdtool_res} ${field}
78 IF '${match_key_exists}' == 'True'
79 ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field}
80 # Skip check if field value is empty.
81 IF '${vpd_records['${component}']['${field}']}' == '' CONTINUE
82
83 ${busctl_field}= Set Variable If
84 ... '${field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
85 ... '${field}' == 'SN' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
86 ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY}
87 ... /xyz/openbmc_project/inventory${component} ${busctl_field}
88 ${cmd_output}= BMC Execute Command ${cmd}
89
90 # Check vpdtool response and busctl response for the component field.
91 Valid Value vpd_records['${component}']['${field}']
92 ... ['${cmd_output[0].split('"')[1].strip('"')}']
93 ELSE
94 CONTINUE
95 END
96 END
97
98
99Verify VPD Field Write Operation
100 [Documentation] Verify writing VPD fields for given component via vpdtool.
101 [Arguments] ${component} ${field}
102 [Teardown] Restore VPD Value ${component} ${field} ${old_field_value}
103
104 # Description of arguments:
105 # component VPD component (e.g. /system/chassis/motherboard/vdd_vrm1).
106 # field VPD component field (e.g. PN, SN)
107
108 ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field}
109 Set Test Variable ${old_field_value} ${vpd_records['${component}']['${field}']}
110
111 ${write_value}= Set Variable If
112 ... '${field}' == 'DR' ${DR_WRITE_VALUE}
113 ... '${field}' == 'PN' ${PN_WRITE_VALUE}
114 ... '${field}' == 'SN' ${SN_WRITE_VALUE}
115
116 Vpdtool -w -O ${component} -R VINI -K ${field} --value ${write_value}
117
118 Verify VPD Field Value ${component} ${field}
119
120
121Restore VPD Value
122 [Documentation] Restore VPD's field value of given component.
123 [Arguments] ${component} ${field} ${value}
124 # Description of arguments:
125 # component VPD component (e.g. /system/chassis/motherboard/vdd_vrm1).
126 # field VPD component field (e.g. PN, SN)
127 # value VPD value to be restore.
128
129 Vpdtool -w -O ${component} -R VINI -K ${field} --value ${value}
130
131
132Verify VPD Field Value
133 [Documentation] Verify VPD field value via vpdtool.
134 [Arguments] ${component} ${field}
135 # Description of arguments:
136 # component VDP component (e.g. /system/chassis/motherboard/vdd_vrm1).
137 # field VPD field (e.g. DR, SN, PN)
138
139 Redfish OBMC Reboot (off) stack_mode=normal
140 ${vpd_records}= Vpdtool -r -O ${component} -R VINI -K ${field}
141
142 ${busctl_field}= Set Variable If
143 ... '${field}' == 'DR' xyz.openbmc_project.Inventory.Item PrettyName
144 ... '${field}' == 'PN' xyz.openbmc_project.Inventory.Decorator.Asset PartNumber
145 ... '${field}' == 'SN' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
146
147 ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory${component}
148 ... ${busctl_field}
149 ${cmd_output}= BMC Execute Command ${cmd}
150
151 Valid Value vpd_records['${component}']['${field}'] ['${cmd_output[0].split('"')[1].strip('"')}']
152
153
154Verify VPD Data Via Vpdtool
155 [Documentation] Get VPD details of given component via vpdtool and verify it
156 ... using busctl command.
157 [Arguments] ${component} ${field}
158 # Description of arguments:
159 # component VPD component (e.g. System,Chassis etc).
160 # field VPD field (e.g. Serialnumber,LocationCode etc).
161
162 ${component_url}= Set Variable If
163 ... '${component}' == 'System' /system
164
165 # Get VPD details of given component via vpd-tool.
166 ${vpd_records}= Vpdtool -o -O ${component_url}
167
168 # Get VPD details of given component via busctl command.
169 ${busctl_field}= Set Variable If
170 ... '${field}' == 'LocationCode' com.ibm.ipzvpd.Location LocationCode
171 ... '${field}' == 'Model' xyz.openbmc_project.Inventory.Decorator.Asset Model
172 ... '${field}' == 'SerialNumber' xyz.openbmc_project.Inventory.Decorator.Asset SerialNumber
173
174 ${cmd}= Catenate ${CMD_GET_PROPERTY_INVENTORY} /xyz/openbmc_project/inventory/system
175 ... ${busctl_field}
176 ${cmd_output}= BMC Execute Command ${cmd}
177 # Example of cmd_output:
178 # [0]: s "ABCD.XY1.1234567-P0"
179 # [1]:
180 # [2]: 0
181
182 # Cross check vpdtool output with busctl response.
183 Should Be Equal As Strings ${vpd_records["/system"]["${field}"]}
184 ... ${cmd_output[0].split('"')[1].strip('"')}