blob: 841ac30a46fd949f37b251e75a01e2e60a5a486f [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}
160 \ Continue For Loop If '${status}' == '${True}'
161 \ ${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}
189 \ Continue For Loop If '${status}' == '${True}'
190 \ ${present}= Read Attribute ${dimm_uri} Present
191 \ Should Be True ${present}
192 ... msg=${dimm_uri} is functional but not present.
193
Chris Austenb29d2e82016-06-07 12:25:35 -0500194*** Keywords ***
195
George Keishingc8166ed2017-02-24 03:53:38 -0600196Test Suite Setup
197 [Documentation] Do the initial suite setup.
198 ${current_state}= Get Host State
199 Run Keyword If '${current_state}' == 'Off'
200 ... Initiate Host Boot
Rahul Maheshwari4a4eb6e2016-09-24 01:06:36 -0500201
George Keishingcaac9f32017-03-09 02:14:27 -0600202 Wait Until Keyword Succeeds
203 ... 10 min 10 sec Is OS Starting
204
Chris Austenb29d2e82016-06-07 12:25:35 -0500205
George Keishingc8166ed2017-02-24 03:53:38 -0600206Get Inventory
207 [Documentation] Get the properties of an endpoint.
208 [Arguments] ${endpoint}
209 # Description of arguments:
210 # endpoint string for which url path ending.
211 # Example: "system" is the endpoint for url
212 # /xyz/openbmc_project/inventory/system
213 ${resp}= OpenBMC Get Request ${HOST_INVENTORY_URI}${endpoint}
214 Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
215 ${jsondata}= To JSON ${resp.content}
216 [Return] ${jsondata}
George Keishingefa97352017-03-13 07:13:03 -0500217
218
219Qualified FRU List
220 [Documentation] Build the list of valid FRUs.
221 [Arguments] @{system_list}
222 # Description of arguments:
223 # system_list List of system inventory URLs.
224 # Example:
225 # /xyz/openbmc_project/inventory/system/chassis/motherboard
226 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0
227 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu1
228 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
229 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm1
230 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm2
231 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm3
232 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm4
233 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm5
234 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm6
235 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm7
236
237 ${fru_list}= Create List
238 :FOR ${fru_uri} IN @{system_list}
George Keishingdf5ab122017-04-17 04:01:11 -0500239 \ ${resp}= OpenBMC Get Request ${fru_uri}/attr/FieldReplaceable
240 \ ${jsondata}= To JSON ${resp.content}
241 \ ${status}= Run Keyword And Return Status
242 ... Should Be True ${jsondata['data']} == ${1}
George Keishingefa97352017-03-13 07:13:03 -0500243 \ Run Keyword If '${status}' == '${True}'
244 ... Append To List ${fru_list} ${fru_uri}
245
246 [Return] ${fru_list}
247
248
249Validate FRU Properties Fields
250 [Documentation] Compare valid FRUs from system vs expected FRU set.
251 [Arguments] @{fru_list}
252 # Description of arguments:
253 # fru_list List of qualified FRU URLs.
254
255 # Build the pre-defined set list from data/inventory.py derived from
256 # a group of YAML files.
257 # Example:
258 # set(['Version', 'PartNumber', 'SerialNumber', 'FieldReplaceable',
259 # 'BuildDate', 'Present', 'Manufacturer', 'PrettyName', 'Cached', 'Model'])
260 ${fru_set}= List To Set ${inventory_dict['fru']}
261
262 # Iterate through the FRU's url and compare the set dictionary keys
263 # with the pre-define inventory data.
264 :FOR ${fru_url_path} IN @{fru_list}
265 \ ${fru_field}= Read Properties ${fru_url_path}
266 # ------------------------------------------------------------
267 # ${fru_field.viewkeys()} extracts the list of keys from the
268 # JSON dictionary as a set.
269 # ------------------------------------------------------------
270 \ Should Be Equal ${fru_field.viewkeys()} ${fru_set}
271
George Keishing071d8da2017-03-24 09:13:16 -0500272
273Check URL Property If Functional
274 [Arguments] ${url_path}
275 # Description of arguments:
276 # url_path Full url path of the inventory object.
277 # Example: DIMM / core property url's
278 # /xyz/openbmc_project/inventory/system/chassis/motherboard/dimm0
279 # /xyz/openbmc_project/inventory/system/chassis/motherboard/cpu0/core0
280 ${state}= Read Attribute ${url_path} Functional
281 Should Be True ${state}