blob: 041a3c0027d033a8db96cd97dd5378418e1f328d [file] [log] [blame]
Chris Austenb29d2e82016-06-07 12:25:35 -05001*** Settings ***
George Keishingc8166ed2017-02-24 03:53:38 -06002Documentation System inventory related test.
3
Chris Austenb29d2e82016-06-07 12:25:35 -05004Resource ../lib/rest_client.robot
5Resource ../lib/utils.robot
Rahul Maheshwari908df572017-02-16 04:41:54 -06006Resource ../lib/state_manager.robot
George Keishingd55a4be2016-08-26 03:28:17 -05007Resource ../lib/openbmc_ffdc.robot
George Keishingefa97352017-03-13 07:13:03 -05008Library ../lib/utilities.py
Chris Austenb29d2e82016-06-07 12:25:35 -05009
10Variables ../data/variables.py
George Keishingc8166ed2017-02-24 03:53:38 -060011Variables ../data/inventory.py
Chris Austenb29d2e82016-06-07 12:25:35 -050012
George Keishingc8166ed2017-02-24 03:53:38 -060013Suite setup Test Suite Setup
Rahul Maheshwari908df572017-02-16 04:41:54 -060014Test Teardown FFDC On Test Case Fail
Chris Austenb29d2e82016-06-07 12:25:35 -050015
Rahul Maheshwari3e9b0de2017-03-20 06:25:44 -050016Force Tags Inventory
17
Chris Austenb29d2e82016-06-07 12:25:35 -050018*** Test Cases ***
19
George Keishingc8166ed2017-02-24 03:53:38 -060020Verify System Inventory Path
21 [Documentation] Check if system inventory path exist.
22 [Tags] Verify_System_Inventory_Path
23 # When the host is booted, system inventory path should exist.
24 # Example: /xyz/openbmc_project/inventory/system
25 Get Inventory system
Chris Austenb29d2e82016-06-07 12:25:35 -050026
Rahul Maheshwaribb20f732016-10-24 06:27:14 -050027
George Keishingc8166ed2017-02-24 03:53:38 -060028Verify Chassis Motherboard Properties
29 [Documentation] Check if chassis motherboard properties are
30 ... populated valid.
31 [Tags] Verify_Chassis_Motherboard_Properties
32 # When the host is booted, the following properties should
33 # be populated Manufacturer, PartNumber, SerialNumber and
34 # it should not be zero's.
35 # Example:
36 # "data": {
37 # "/xyz/openbmc_project/inventory/system/chassis/motherboard": {
38 # "BuildDate": "",
39 # "Manufacturer": "0000000000000000",
40 # "Model": "",
41 # "PartNumber": "0000000",
42 # "Present": 0,
43 # "PrettyName": "SYSTEM PLANAR ",
44 # "SerialNumber": "000000000000"
45 # }
46 ${properties}= Get Inventory system/chassis/motherboard
47 Should Not Be Equal As Strings
48 ... ${properties["data"]["Manufacturer"]} 0000000000000000
49 ... msg=motherboard field invalid.
50 Should Not Be Equal As Strings
51 ... ${properties["data"]["PartNumber"]} 0000000
52 ... msg=motherboard part number invalid.
53 Should Not Be Equal As Strings
54 ... ${properties["data"]["SerialNumber"]} 000000000000
55 ... msg=motherboard serial number invalid.
Chris Austenb29d2e82016-06-07 12:25:35 -050056
George Keishingae355302017-03-13 04:34:58 -050057Verify CPU Present
58 [Documentation] Check if the FRU "Present" is set for CPU's.
59 [Tags] Verify_CPU_Present
60 # System inventory cpu list:
61 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
62 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
63 # Example:
64 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0": {
65 # "FieldReplaceable": 1,
66 # "BuildDate": "",
67 # "Cached": 0,
68 # "SerialNumber": "YA3933741574",
69 # "Version": "10",
70 # "Model": "",
71 # "PrettyName": "PROCESSOR MODULE",
72 # "PartNumber": "01HL322",
73 # "Present": 1,
74 # "Manufacturer": "IBM"
75 # },
76 # The CPU properties "Present" should be boolean 1.
77
78 ${cpu_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system cpu
79 :FOR ${cpu_uri} IN @{cpu_list}
80 \ ${present}= Read Attribute ${cpu_uri} Present
81 \ Should Be True ${present}
82
83
84Verify DIMM Present
85 [Documentation] Check if the FRU "Present" is set for DIMM's.
86 [Tags] Verify_DIMM_Present
87 # Example:
88 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
89 # "FieldReplaceable": 1,
90 # "BuildDate": "",
91 # "Cached": 0,
92 # "SerialNumber": "0x0300cf4f",
93 # "Version": "0x00",
94 # "Model": "M393A1G40EB1-CRC ",
95 # "PrettyName": "0x0c",
96 # "PartNumber": "",
97 # "Present": 1,
98 # "Manufacturer": "0xce80"
99 # },
100
101 # The DIMM properties "Present" should be boolean 1.
102
103 ${dimm_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system dimm
104 :FOR ${dimm_uri} IN @{dimm_list}
105 \ ${present}= Read Attribute ${dimm_uri} Present
106 \ Should Be True ${present}
107
108
George Keishingefa97352017-03-13 07:13:03 -0500109Verify FRU Properties
110 [Documentation] Verify the FRU properties fields.
111 [Tags] Verify_FRU_Properties
112 # Example:
113 # A FRU would have "FieldReplaceable" set to boolean 1 and should have
114 # the following entries
115 # "fru": [
116 # "FieldReplaceable"
117 # "BuildDate",
118 # "Cached"
119 # "SerialNumber",
120 # "Version",
121 # "Model",
122 # "PrettyName",
123 # "PartNumber",
124 # "Present",
125 # "Manufacturer",
126 # ]
127 # and FRU which doesn't have one of this fields is an error.
128 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
129 # "FieldReplaceable": 1,
130 # "BuildDate": "",
131 # "Cached": 0,
132 # "SerialNumber": "0x0300cf4f",
133 # "Version": "0x00",
134 # "Model": "M393A1G40EB1-CRC ",
135 # "PrettyName": "0x0c",
136 # "PartNumber": "",
137 # "Present": 1,
138 # "Manufacturer": "0xce80"
139 # },
140
141 ${system_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system *
142 ${fru_list}= Qualified FRU List @{system_list}
143 Validate FRU Properties Fields @{fru_list}
144
George Keishing071d8da2017-03-24 09:13:16 -0500145
146Verify Core Functional State
147 [Documentation] Verify that "Present" core property is set if "Functional"
148 ... core property is set.
149 [Tags] Verify_Core_Functional_State
150 # Example:
151 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core5":{
152 # "Functional": 1,
153 # "Present": 1,
154 # "PrettyName": ""
155 # },
156 ${core_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system core
157 :FOR ${core_uri} IN @{core_list}
158 \ ${status}= Run Keyword And Return Status
159 ... Check URL Property If Functional ${core_uri}
George Keishingc5658392017-04-27 23:05:18 -0500160 \ Continue For Loop If '${status}' == '${False}'
George Keishing071d8da2017-03-24 09:13:16 -0500161 \ ${present}= Read Attribute ${core_uri} Present
162 \ Should Be True ${present}
163 ... msg=${core_uri} is functional but not present.
164
165
166Verify DIMM Functional State
167 [Documentation] Verify that "Present" DIMM property is set if "Functional"
168 ... DIMM property is set.
169 [Tags] Verify_DIMM_Functional_State
170 # Example:
171 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0": {
172 # "BuildDate": "",
173 # "Cached": 0,
174 # "FieldReplaceable": 1,
175 # "Functional": 1,
176 # "Manufacturer": "0xce80",
177 # "Model": "M393A1G40EB1-CRC ",
178 # "PartNumber": "",
179 # "Present": 1,
180 # "PrettyName": "0x0c",
181 # "SerialNumber": "0x0300cf4f",
182 # "Version": "0x00"
183 # },
184
185 ${dimm_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system dimm
186 :FOR ${dimm_uri} IN @{dimm_list}
187 \ ${status}= Run Keyword And Return Status
188 ... Check URL Property If Functional ${dimm_uri}
George Keishingc5658392017-04-27 23:05:18 -0500189 \ Continue For Loop If '${status}' == '${False}'
George Keishing071d8da2017-03-24 09:13:16 -0500190 \ ${present}= Read Attribute ${dimm_uri} Present
191 \ Should Be True ${present}
192 ... msg=${dimm_uri} is functional but not present.
193
George Keishing3c205b12017-05-13 04:09:33 -0500194
195Verify Fan Functional State
196 [Documentation] Verify that "Present" fan property is set if "Functional"
197 ... fan property is set.
198 [Tags] Verify_Fan_Functional_State
199 # Example:
200 # "/xyz/openbmc_project/inventory/system/chassis/motherboard/fan0": {
201 # "Functional": 1,
202 # "Present": 1,
203 # "PrettyName": "fan0"
204 # },
205
206 ${fan_list}= Get Endpoint Paths ${HOST_INVENTORY_URI}system fan*
207 Should Not Be Empty ${fan_list}
208 :FOR ${fan_uri} IN @{fan_list}
209 \ ${status}= Run Keyword And Return Status
210 ... Check URL Property If Functional ${fan_uri}
211 \ Continue For Loop If '${status}' == '${False}'
212 \ ${present}= Read Attribute ${fan_uri} Present
213 \ Should Be True ${present}
214 ... msg=${fan_uri} is functional but "Present" is not set.
215
216
Chris Austenb29d2e82016-06-07 12:25:35 -0500217*** Keywords ***
218
George Keishingc8166ed2017-02-24 03:53:38 -0600219Test Suite Setup
220 [Documentation] Do the initial suite setup.
221 ${current_state}= Get Host State
222 Run Keyword If '${current_state}' == 'Off'
223 ... Initiate Host Boot
Rahul Maheshwari4a4eb6e2016-09-24 01:06:36 -0500224
George Keishingcaac9f32017-03-09 02:14:27 -0600225 Wait Until Keyword Succeeds
226 ... 10 min 10 sec Is OS Starting
227
Chris Austenb29d2e82016-06-07 12:25:35 -0500228
George Keishingc8166ed2017-02-24 03:53:38 -0600229Get Inventory
230 [Documentation] Get the properties of an endpoint.
231 [Arguments] ${endpoint}
232 # Description of arguments:
233 # endpoint string for which url path ending.
234 # Example: "system" is the endpoint for url
235 # /xyz/openbmc_project/inventory/system
236 ${resp}= OpenBMC Get Request ${HOST_INVENTORY_URI}${endpoint}
237 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
238 ${jsondata}= To JSON ${resp.content}
239 [Return] ${jsondata}
George Keishingefa97352017-03-13 07:13:03 -0500240
241
242Qualified FRU List
243 [Documentation] Build the list of valid FRUs.
244 [Arguments] @{system_list}
245 # Description of arguments:
246 # system_list List of system inventory URLs.
247 # Example:
248 # /xyz/openbmc_project/inventory/system/chassis/motherboard
249 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
250 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
251 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
252 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1
253 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2
254 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm3
255 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm4
256 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm5
257 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm6
258 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm7
259
260 ${fru_list}= Create List
261 :FOR ${fru_uri} IN @{system_list}
George Keishingdf5ab122017-04-17 04:01:11 -0500262 \ ${resp}= OpenBMC Get Request ${fru_uri}/attr/FieldReplaceable
263 \ ${jsondata}= To JSON ${resp.content}
264 \ ${status}= Run Keyword And Return Status
265 ... Should Be True ${jsondata['data']} == ${1}
George Keishingefa97352017-03-13 07:13:03 -0500266 \ Run Keyword If '${status}' == '${True}'
267 ... Append To List ${fru_list} ${fru_uri}
268
269 [Return] ${fru_list}
270
271
272Validate FRU Properties Fields
273 [Documentation] Compare valid FRUs from system vs expected FRU set.
274 [Arguments] @{fru_list}
275 # Description of arguments:
276 # fru_list List of qualified FRU URLs.
277
278 # Build the pre-defined set list from data/inventory.py derived from
279 # a group of YAML files.
280 # Example:
281 # set(['Version', 'PartNumber', 'SerialNumber', 'FieldReplaceable',
282 # 'BuildDate', 'Present', 'Manufacturer', 'PrettyName', 'Cached', 'Model'])
283 ${fru_set}= List To Set ${inventory_dict['fru']}
284
285 # Iterate through the FRU's url and compare the set dictionary keys
286 # with the pre-define inventory data.
287 :FOR ${fru_url_path} IN @{fru_list}
288 \ ${fru_field}= Read Properties ${fru_url_path}
289 # ------------------------------------------------------------
290 # ${fru_field.viewkeys()} extracts the list of keys from the
291 # JSON dictionary as a set.
292 # ------------------------------------------------------------
293 \ Should Be Equal ${fru_field.viewkeys()} ${fru_set}
294
George Keishing071d8da2017-03-24 09:13:16 -0500295
296Check URL Property If Functional
297 [Arguments] ${url_path}
298 # Description of arguments:
299 # url_path Full url path of the inventory object.
300 # Example: DIMM / core property url's
301 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
302 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0
303 ${state}= Read Attribute ${url_path} Functional
304 Should Be True ${state}