blob: a3587015456d910f061a062807f93e2f88b33842 [file] [log] [blame]
Rahul Maheshwarifdd5ff62017-08-01 04:15:03 -05001*** Settings ***
2Documentation This suite is for testing general IPMI functions.
3
4Resource ../../lib/ipmi_client.robot
5Resource ../../lib/openbmc_ffdc.robot
George Keishing0825a112018-03-30 10:48:07 -05006Resource ../../lib/boot_utils.robot
George Keishing78ce8dc2018-03-30 11:49:06 -05007Resource ../../lib/utils.robot
Sweta Potthurif39022d2018-02-06 03:40:07 -06008Resource ../../lib/bmc_network_utils.robot
George Keishingd6273802018-09-07 07:06:53 -05009Resource ../../lib/logging_utils.robot
George Keishing78ce8dc2018-03-30 11:49:06 -050010Library ../../lib/ipmi_utils.py
George Keishing0825a112018-03-30 10:48:07 -050011Variables ../../data/ipmi_raw_cmd_table.py
Rahul Maheshwaridf6f05d2018-09-04 03:48:37 -050012Library ../../lib/gen_misc.py
Rahul Maheshwarifdd5ff62017-08-01 04:15:03 -050013
Michael Walshc9eb34e2019-01-23 11:08:43 -060014Test Setup Log to Console ${EMPTY}
Rahul Maheshwarifdd5ff62017-08-01 04:15:03 -050015Test Teardown FFDC On Test Case Fail
16
17*** Variables ***
18
Rahul Maheshwari901dcde2018-02-06 03:14:31 -060019${allowed_temp_diff}= ${1}
Rahul Maheshwari615da152018-02-13 23:53:36 -060020${allowed_power_diff}= ${10}
Sweta Potthuri5c6c72e2018-01-23 05:48:35 -060021
Rahul Maheshwarifdd5ff62017-08-01 04:15:03 -050022*** Test Cases ***
23
Rahul Maheshwarifdd5ff62017-08-01 04:15:03 -050024Set Asset Tag With Valid String Length Via REST
25 [Documentation] Set valid asset tag via REST and verify.
26 [Tags] Set_Asset_Tag_With_Valid_String_Length_Via_REST
27
28 ${random_string}= Generate Random String 63
29 ${args}= Create Dictionary data=${random_string}
30 Write Attribute /xyz/openbmc_project/inventory/system AssetTag
31 ... data=${args}
32
33 ${asset_tag}= Read Attribute /xyz/openbmc_project/inventory/system
34 ... AssetTag
35 Should Be Equal As Strings ${asset_tag} ${random_string}
36
Sweta Potthurif39022d2018-02-06 03:40:07 -060037
Sweta Potthuri0cc60502018-01-24 00:36:17 -060038Verify Chassis Identify via IPMI
39 [Documentation] Verify "chassis identify" using IPMI command.
40 [Tags] Verify_Chassis_Identify_via_IPMI
41
42 # Set to default "chassis identify" and verify that LED blinks for 15s.
43 Run IPMI Standard Command chassis identify
44 Verify Identify LED State Blink
45
46 Sleep 15s
47 Verify Identify LED State Off
48
49 # Set "chassis identify" to 10s and verify that the LED blinks for 10s.
50 Run IPMI Standard Command chassis identify 10
51 Verify Identify LED State Blink
52
53 Sleep 10s
54 Verify Identify LED State Off
55
Sweta Potthurif39022d2018-02-06 03:40:07 -060056
Sweta Potthuri0cc60502018-01-24 00:36:17 -060057Verify Chassis Identify Off And Force Identify On via IPMI
58 [Documentation] Verify "chassis identify" off
59 ... and "force identify on" via IPMI.
60 [Tags] Verify_Chassis_Identify_Off_And_Force_Identify_On_via_IPMI
61
62 # Set the LED to "Force Identify On".
63 Run IPMI Standard Command chassis identify force
64 Verify Identify LED State Blink
65
66 # Set "chassis identify" to 0 and verify that the LED turns off.
67 Run IPMI Standard Command chassis identify 0
68 Verify Identify LED State Off
69
Sweta Potthurif39022d2018-02-06 03:40:07 -060070
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -060071Test Watchdog Reset Via IPMI And Verify Using REST
72 [Documentation] Test watchdog reset via IPMI and verify using REST.
73 [Tags] Test_Watchdog_Reset_Via_IPMI_And_Verify_Using_REST
74
75 Initiate Host Boot
76
77 Set Watchdog Enabled Using REST ${1}
78
79 Watchdog Object Should Exist
80
81 # Resetting the watchdog via IPMI.
82 Run IPMI Standard Command mc watchdog reset
83
84 # Verify the watchdog is reset using REST after an interval of 1000ms.
85 Sleep 1000ms
86 ${watchdog_time_left}=
87 ... Read Attribute ${HOST_WATCHDOG_URI} TimeRemaining
88 Should Be True
89 ... ${watchdog_time_left}<${1200000} and ${watchdog_time_left}>${2000}
90 ... msg=Watchdog timer didn't reset.
91
Sweta Potthurif39022d2018-02-06 03:40:07 -060092
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -060093Test Watchdog Off Via IPMI And Verify Using REST
94 [Documentation] Test watchdog off via IPMI and verify using REST.
95 [Tags] Test_Watchdog_Off_Via_IPMI_And_Verify_Using_REST
96
97 Initiate Host Boot
98
99 Set Watchdog Enabled Using REST ${1}
100
101 Watchdog Object Should Exist
102
103 # Turn off the watchdog via IPMI.
104 Run IPMI Standard Command mc watchdog off
105
106 # Verify the watchdog is off using REST
107 ${watchdog_state}= Read Attribute ${HOST_WATCHDOG_URI} Enabled
108 Should Be Equal ${watchdog_state} ${0}
109 ... msg=msg=Verification failed for watchdog off check.
Rahul Maheshwari901dcde2018-02-06 03:14:31 -0600110
111
112Test Ambient Temperature Via IPMI
113 [Documentation] Test ambient temperature via IPMI and verify using REST.
114 [Tags] Test_Ambient_Temperature_Via_IPMI
115
116 # Entity ID Entity Instance Temp. Readings
117 # Inlet air temperature(40h) 1 +19 C
118 # CPU temperature sensors(41h) 5 +51 C
119 # CPU temperature sensors(41h) 6 +50 C
120 # CPU temperature sensors(41h) 7 +50 C
121 # CPU temperature sensors(41h) 8 +50 C
122 # CPU temperature sensors(41h) 9 +50 C
123 # CPU temperature sensors(41h) 10 +48 C
124 # CPU temperature sensors(41h) 11 +49 C
125 # CPU temperature sensors(41h) 12 +47 C
126 # CPU temperature sensors(41h) 8 +50 C
127 # CPU temperature sensors(41h) 16 +51 C
128 # CPU temperature sensors(41h) 24 +50 C
129 # CPU temperature sensors(41h) 32 +43 C
130 # CPU temperature sensors(41h) 40 +43 C
131 # Baseboard temperature sensors(42h) 1 +35 C
132
133 ${temp_reading}= Run IPMI Standard Command dcmi get_temp_reading -N 10
George Keishing77f1ad22018-07-23 12:39:28 -0500134 Should Contain ${temp_reading} Inlet air temperature
135 ... msg="Unable to get inlet temperature via DCMI".
Rahul Maheshwari901dcde2018-02-06 03:14:31 -0600136 ${ambient_temp_line}=
137 ... Get Lines Containing String ${temp_reading}
138 ... Inlet air temperature case-insensitive
139
140 ${ambient_temp_ipmi}= Fetch From Right ${ambient_temp_line} +
141 ${ambient_temp_ipmi}= Remove String ${ambient_temp_ipmi} ${SPACE}C
142
143 ${ambient_temp_rest}= Read Attribute
144 ... ${SENSORS_URI}temperature/ambient Value
145
146 # Example of ambient temperature via REST
147 # "CriticalAlarmHigh": 0,
148 # "CriticalAlarmLow": 0,
149 # "CriticalHigh": 35000,
150 # "CriticalLow": 0,
151 # "Scale": -3,
152 # "Unit": "xyz.openbmc_project.Sensor.Value.Unit.DegreesC",
153 # "Value": 21775,
154 # "WarningAlarmHigh": 0,
155 # "WarningAlarmLow": 0,
156 # "WarningHigh": 25000,
157 # "WarningLow": 0
158
159 # Get temperature value based on scale i.e. Value * (10 power Scale Value)
160 # e.g. from above case 21775 * (10 power -3) = 21775/1000
161
162 ${ambient_temp_rest}= Evaluate ${ambient_temp_rest}/1000
163 ${ipmi_rest_temp_diff}=
164 ... Evaluate abs(${ambient_temp_rest} - ${ambient_temp_ipmi})
165
166 Should Be True ${ipmi_rest_temp_diff} <= ${allowed_temp_diff}
167 ... msg=Ambient temperature above allowed threshold ${allowed_temp_diff}.
168
169
Rahul Maheshwari43556632018-02-05 23:42:52 -0600170Verify Get DCMI Capabilities
171 [Documentation] Verify get DCMI capabilities command output.
172 [Tags] Verify_Get_DCMI_Capabilities
173
174 ${cmd_output}= Run IPMI Standard Command dcmi discover
175
176 @{supported_capabilities}= Create List
177 # Supported DCMI capabilities:
George Keishing2ee2f002019-02-16 09:36:02 -0600178 ... Mandatory platform capabilities
179 ... Optional platform capabilities
Rahul Maheshwari43556632018-02-05 23:42:52 -0600180 ... Power management available
George Keishing2ee2f002019-02-16 09:36:02 -0600181 ... Managebility access capabilities
Rahul Maheshwari43556632018-02-05 23:42:52 -0600182 ... In-band KCS channel available
183 # Mandatory platform attributes:
184 ... 200 SEL entries
185 ... SEL automatic rollover is enabled
186 # Optional Platform Attributes:
187 ... Slave address of device: 0h (8bits)(Satellite/External controller)
188 ... Channel number is 0h (Primary BMC)
189 ... Device revision is 0
190 # Manageability Access Attributes:
191 ... Primary LAN channel number: 1 is available
192 ... Secondary LAN channel is not available for OOB
193 ... No serial channel is available
194
195 :FOR ${capability} IN @{supported_capabilities}
196 \ Should Contain ${cmd_output} ${capability} ignore_case=True
197 ... msg=Supported DCMI capabilities not present.
198
199
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600200Test Power Reading Via IPMI With Host Off
201 [Documentation] Test power reading via IPMI with host off state and
202 ... verify using REST.
203 [Tags] Test_Power_Reading_Via_IPMI_With_Host_Off
Rahul Maheshwari615da152018-02-13 23:53:36 -0600204
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600205 REST Power Off stack_mode=skip quiet=1
Rahul Maheshwari615da152018-02-13 23:53:36 -0600206
George Keishing04bf06c2018-10-05 08:28:50 -0500207 Wait Until Keyword Succeeds 1 min 30 sec Verify Power Reading
George Keishinge78f1fd2018-09-04 13:34:59 -0500208
209
210Test Power Reading Via IPMI With Host Booted
211 [Documentation] Test power reading via IPMI with host booted state and
212 ... verify using REST.
213 [Tags] Test_Power_Reading_Via_IPMI_With_Host_Booted
214
215 REST Power On stack_mode=skip quiet=1
216
217 # For a good power reading take a 3 samples for 15 seconds interval and
218 # average it out.
219
George Keishing04bf06c2018-10-05 08:28:50 -0500220 Wait Until Keyword Succeeds 2 min 30 sec Verify Power Reading
Rahul Maheshwari615da152018-02-13 23:53:36 -0600221
222
Rahul Maheshwariabe13af2018-02-15 22:42:08 -0600223Test Power Reading Via IPMI Raw Command
224 [Documentation] Test power reading via IPMI raw command and verify
225 ... using REST.
226 [Tags] Test_Power_Reading_Via_IPMI_Raw_Command
227
228 # Response data structure of power reading command output via IPMI.
229 # 1 Completion Code. Refer to section 8, DCMI Completion Codes.
230 # 2 Group Extension Identification = DCh
231 # 3:4 Current Power in watts
232
George Keishinge78f1fd2018-09-04 13:34:59 -0500233 REST Power On stack_mode=skip quiet=1
Rahul Maheshwariabe13af2018-02-15 22:42:08 -0600234
George Keishing04bf06c2018-10-05 08:28:50 -0500235 Wait Until Keyword Succeeds 2 min 30 sec Verify Power Reading Via Raw Command
Rahul Maheshwariabe13af2018-02-15 22:42:08 -0600236
237
Rahul Maheshwari91a18ef2018-02-15 04:54:59 -0600238Test Baseboard Temperature Via IPMI
239 [Documentation] Test baseboard temperature via IPMI and verify using REST.
240 [Tags] Test_Baseboard_Temperature_Via_IPMI
241
242 # Example of IPMI dcmi get_temp_reading output:
243 # Entity ID Entity Instance Temp. Readings
244 # Inlet air temperature(40h) 1 +19 C
245 # CPU temperature sensors(41h) 5 +51 C
246 # CPU temperature sensors(41h) 6 +50 C
247 # CPU temperature sensors(41h) 7 +50 C
248 # CPU temperature sensors(41h) 8 +50 C
249 # CPU temperature sensors(41h) 9 +50 C
250 # CPU temperature sensors(41h) 10 +48 C
251 # CPU temperature sensors(41h) 11 +49 C
252 # CPU temperature sensors(41h) 12 +47 C
253 # CPU temperature sensors(41h) 8 +50 C
254 # CPU temperature sensors(41h) 16 +51 C
255 # CPU temperature sensors(41h) 24 +50 C
256 # CPU temperature sensors(41h) 32 +43 C
257 # CPU temperature sensors(41h) 40 +43 C
258 # Baseboard temperature sensors(42h) 1 +35 C
259
260 ${temp_reading}= Run IPMI Standard Command dcmi get_temp_reading -N 10
George Keishing77f1ad22018-07-23 12:39:28 -0500261 Should Contain ${temp_reading} Baseboard temperature sensors
262 ... msg="Unable to get baseboard temperature via DCMI".
Rahul Maheshwari91a18ef2018-02-15 04:54:59 -0600263 ${baseboard_temp_line}=
264 ... Get Lines Containing String ${temp_reading}
265 ... Baseboard temperature case-insensitive=True
266
267 ${baseboard_temp_ipmi}= Fetch From Right ${baseboard_temp_line} +
268 ${baseboard_temp_ipmi}= Remove String ${baseboard_temp_ipmi} ${SPACE}C
269
270 ${baseboard_temp_rest}= Read Attribute
271 ... /xyz/openbmc_project/sensors/temperature/pcie Value
272 ${baseboard_temp_rest}= Evaluate ${baseboard_temp_rest}/1000
273
274 Should Be True
275 ... ${baseboard_temp_rest} - ${baseboard_temp_ipmi} <= ${allowed_temp_diff}
276 ... msg=Baseboard temperature above allowed threshold ${allowed_temp_diff}.
277
278
Sweta Potthurif39022d2018-02-06 03:40:07 -0600279Retrieve Default Gateway Via IPMI And Verify Using REST
280 [Documentation] Retrieve default gateway from LAN print using IPMI.
281 [Tags] Retrieve_Default_Gateway_Via_IPMI_And_Verify_Using_REST
282
283 # Fetch "Default Gateway" from IPMI LAN print.
284 ${default_gateway_ipmi}= Fetch Details From LAN Print Default Gateway IP
285
286 # Verify "Default Gateway" using REST.
Steven Sombara8800da2018-12-18 16:19:05 -0600287 Read Attribute ${NETWORK_MANAGER}config DefaultGateway
Sweta Potthurif39022d2018-02-06 03:40:07 -0600288 ... expected_value=${default_gateway_ipmi}
289
290
291Retrieve MAC Address Via IPMI And Verify Using REST
292 [Documentation] Retrieve MAC Address from LAN print using IPMI.
293 [Tags] Retrieve_MAC_Address_Via_IPMI_And_Verify_Using_REST
294
295 # Fetch "MAC Address" from IPMI LAN print.
296 ${mac_address_ipmi}= Fetch Details From LAN Print MAC Address
297
298 # Verify "MAC Address" using REST.
299 ${mac_address_rest}= Get BMC MAC Address
300 Should Be Equal ${mac_address_ipmi} ${mac_address_rest}
301 ... msg=Verification of MAC address from lan print using IPMI failed.
302
303
304Retrieve Network Mode Via IPMI And Verify Using REST
305 [Documentation] Retrieve network mode from LAN print using IPMI.
306 [Tags] Retrieve_Network_Mode_Via_IPMI_And_Verify_Using_REST
307
308 # Fetch "Mode" from IPMI LAN print.
309 ${network_mode_ipmi}= Fetch Details From LAN Print Source
310
311 # Verify "Mode" using REST.
312 ${network_mode_rest}= Read Attribute
Steven Sombara8800da2018-12-18 16:19:05 -0600313 ... ${NETWORK_MANAGER}eth0 DHCPEnabled
Sweta Potthurif39022d2018-02-06 03:40:07 -0600314 Run Keyword If '${network_mode_ipmi}' == 'Static Address'
315 ... Should Be Equal ${network_mode_rest} ${0}
316 ... msg=Verification of network setting failed.
317 ... ELSE IF '${network_mode_ipmi}' == 'DHCP'
318 ... Should Be Equal ${network_mode_rest} ${1}
319 ... msg=Verification of network setting failed.
320
321
322Retrieve IP Address Via IPMI And Verify With BMC Details
323 [Documentation] Retrieve IP address from LAN print using IPMI.
324 [Tags] Retrieve_IP_Address_Via_IPMI_And_Verify_With_BMC_Details
325
326 # Fetch "IP Address" from IPMI LAN print.
327 ${ip_addr_ipmi}= Fetch Details From LAN Print IP Address
328
329 # Verify the IP address retrieved via IPMI with BMC IPs.
330 ${ip_address_rest}= Get BMC IP Info
331 Validate IP On BMC ${ip_addr_ipmi} ${ip_address_rest}
332
333
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600334Verify Get Device ID
335 [Documentation] Verify get device ID command output.
336 [Tags] Verify_Get_Device_ID
337
338 # Example of get device ID command output:
339 # Device ID : 0
340 # Device Revision : 0
341 # Firmware Revision : 2.01
342 # IPMI Version : 2.0
343 # Manufacturer ID : 42817
344 # Manufacturer Name : Unknown (0xA741)
345 # Product ID : 16975 (0x424f)
346 # Product Name : Unknown (0x424F)
347 # Device Available : yes
348 # Provides Device SDRs : yes
349 # Additional Device Support :
350 # Sensor Device
351 # SEL Device
352 # FRU Inventory Device
353 # Chassis Device
354 # Aux Firmware Rev Info :
George Keishing3511a3f2018-04-19 10:38:30 -0500355 # 0x04
356 # 0x38
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600357 # 0x00
George Keishing3511a3f2018-04-19 10:38:30 -0500358 # 0x03
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600359
360 ${mc_info}= Get MC Info
361
362 Should Be Equal ${mc_info['device_id']} 0
363 Should Be Equal ${mc_info['device_revision']} 0
364
Rahul Maheshwaribb9e2572018-04-02 05:24:37 -0500365 # Get firmware revision from mc info command output i.e. 2.01
366 ${ipmi_fw_major_version} ${ipmi_fw_minor_version}=
367 ... Split String ${mc_info['firmware_revision']} .
368 # Convert minor firmware version from BCD format to integer. i.e. 01 to 1
369 ${ipmi_fw_minor_version}= Convert To Integer ${ipmi_fw_minor_version}
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600370
George Keishinge0a81282018-06-08 10:02:30 -0500371 # Get BMC version from BMC CLI i.e. 2.2 from "v2.2-253-g00050f1"
George Keishing3511a3f2018-04-19 10:38:30 -0500372 ${bmc_version_full}= Get BMC Version
Rahul Maheshwaribb9e2572018-04-02 05:24:37 -0500373 ${bmc_version}=
George Keishing3511a3f2018-04-19 10:38:30 -0500374 ... Remove String Using Regexp ${bmc_version_full} ^[^0-9]+ [^0-9\.].*
Rahul Maheshwaribb9e2572018-04-02 05:24:37 -0500375
376 # Get major and minor version from BMC version i.e. 2 and 1 from 2.1
George Keishingc95e9982019-01-14 09:27:45 -0600377 @{major_minor_version}= Split String ${bmc_version} .
Rahul Maheshwaribb9e2572018-04-02 05:24:37 -0500378
George Keishingc95e9982019-01-14 09:27:45 -0600379 Should Be Equal As Strings ${ipmi_fw_major_version} ${major_minor_version[0]}
George Keishing2ee2f002019-02-16 09:36:02 -0600380 ... msg=Major version mismatch.
George Keishingc95e9982019-01-14 09:27:45 -0600381 Should Be Equal As Strings ${ipmi_fw_minor_version} ${major_minor_version[1]}
George Keishing2ee2f002019-02-16 09:36:02 -0600382 ... msg=Minor version mismatch.
Rahul Maheshwaribb9e2572018-04-02 05:24:37 -0500383
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600384 Should Be Equal ${mc_info['ipmi_version']} 2.0
385
Gunnar Mills917ba1a2018-04-08 16:42:12 -0500386 # TODO: Verify Manufacturer and Product IDs directly from json file.
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600387 # Reference : openbmc/openbmc-test-automation#1244
388 Should Be Equal ${mc_info['manufacturer_id']} 42817
389 Should Be Equal ${mc_info['product_id']} 16975 (0x424f)
390
391 Should Be Equal ${mc_info['device_available']} yes
392 Should Be Equal ${mc_info['provides_device_sdrs']} yes
393 Should Contain ${mc_info['additional_device_support']} Sensor Device
394 Should Contain ${mc_info['additional_device_support']} SEL Device
395 Should Contain
396 ... ${mc_info['additional_device_support']} FRU Inventory Device
397 Should Contain ${mc_info['additional_device_support']} Chassis Device
George Keishingb746d3f2018-04-19 10:53:10 -0500398
George Keishing3511a3f2018-04-19 10:38:30 -0500399 # Auxiliary revision data verification.
400 ${aux_version}= Get Aux Version ${bmc_version_full}
401
402 # From aux_firmware_rev_info field ['0x04', '0x38', '0x00', '0x03']
403 ${bmc_aux_version}= Catenate
404 ... SEPARATOR=
405 ... ${mc_info['aux_firmware_rev_info'][0][2:]}
406 ... ${mc_info['aux_firmware_rev_info'][1][2:]}
407 ... ${mc_info['aux_firmware_rev_info'][2][2:]}
408 ... ${mc_info['aux_firmware_rev_info'][3][2:]}
409
410 Should Be Equal As Integers
411 ... ${bmc_aux_version} ${aux_version}
412 ... msg=BMC aux version ${bmc_aux_version} does not match expected value of ${aux_version}.
Rahul Maheshwarife8639b2018-02-05 22:42:24 -0600413
414
Rahul Maheshwaridc6a32c2018-03-15 05:21:55 -0500415Verify SDR Info
416 [Documentation] Verify sdr info command output.
417 [Tags] Verify_SDR_Info
418
419 # Example of SDR info command output:
420 # SDR Version : 0x51
421 # Record Count : 216
422 # Free Space : unspecified
423 # Most recent Addition :
424 # Most recent Erase :
425 # SDR overflow : no
426 # SDR Repository Update Support : unspecified
427 # Delete SDR supported : no
428 # Partial Add SDR supported : no
429 # Reserve SDR repository supported : no
430 # SDR Repository Alloc info supported : no
431
432 ${sdr_info}= Get SDR Info
433 Should Be Equal ${sdr_info['sdr_version']} 0x51
434
435 # Get sensor count from "sdr elist all" command output.
436 ${sensor_count}= Get Sensor Count
437 Should Be Equal As Strings
438 ... ${sdr_info['record_count']} ${sensor_count}
439
440 Should Be Equal ${sdr_info['free_space']} unspecified
441 Should Be Equal ${sdr_info['most_recent_addition']} ${EMPTY}
442 Should Be Equal ${sdr_info['most_recent_erase']} ${EMPTY}
443 Should Be Equal ${sdr_info['sdr_overflow']} no
444 Should Be Equal ${sdr_info['sdr_repository_update_support']} unspecified
445 Should Be Equal ${sdr_info['delete_sdr_supported']} no
446 Should Be Equal ${sdr_info['partial_add_sdr_supported']} no
447 Should Be Equal ${sdr_info['reserve_sdr_repository_supported']} no
448 Should Be Equal ${sdr_info['sdr_repository_alloc_info_supported']} no
449
450
George Keishing02651f02018-04-11 02:07:16 -0500451Test Valid IPMI Channels Supported
452 [Documentation] Verify IPMI channels supported on a given system.
453 [Tags] Test_Valid_IPMI_Channels_Supported
454
455 ${channel_count}= Get Physical Network Interface Count
456
457 # Note: IPMI network channel logically starts from 1.
458 :FOR ${channel_number} IN RANGE 1 ${channel_count}
Rahul Maheshwari20f3bf72018-12-18 04:24:20 -0600459 \ Run IPMI Standard Command lan print ${channel_number}
George Keishing02651f02018-04-11 02:07:16 -0500460
461
462Test Invalid IPMI Channel Response
463 [Documentation] Verify invalid IPMI channels supported response.
464 [Tags] Test_Invalid_IPMI_Channel_Response
465
466 ${channel_count}= Get Physical Network Interface Count
467
468 # To target invalid channel, increment count.
469 ${channel_number}= Evaluate ${channel_count} + 1
470
471 # Example of invalid channel:
George Keishing72d0ac82018-09-20 09:33:01 -0500472 # $ ipmitool -I lanplus -H xx.xx.xx.xx -P password lan print 3
George Keishing02651f02018-04-11 02:07:16 -0500473 # Get Channel Info command failed: Parameter out of range
474 # Invalid channel: 3
475
476 ${stdout}= Run External IPMI Standard Command
477 ... lan print ${channel_number} fail_on_err=${0}
478 Should Contain ${stdout} Invalid channel
479 ... msg=IPMI channel ${channel_number} is invalid but seen working.
480
481
George Keishinge85113a2019-06-07 08:21:51 -0500482Test IPMI Restriction Mode
483 [Documentation] Set restricition mode via REST and verify IPMI operation.
484 [Tags] Test_IPMI_Restriction_Mode
485 # Forego normal test setup:
486 [Setup] No Operation
487 [Teardown] Run Keywords FFDC On Test Case Fail AND
488 ... Set IPMI Restriction Mode xyz.openbmc_project.Control.Security.RestrictionMode.Modes.None
489
490 # By default no IPMI operations are restricted.
491 # /xyz/openbmc_project/control/host0/restriction_mode/attr/RestrictionMode
492 # {
493 # "data": "xyz.openbmc_project.Control.Security.RestrictionMode.Modes.None",
494 # "message": "200 OK",
495 # "status": "ok"
496 # }
497
498 # Refer to: #openbmc/phosphor-host-ipmid/blob/master/host-ipmid-whitelist.conf
499 # Set the restriction mode to Whitelist IPMI commands only:
500 # /xyz/openbmc_project/control/host0/restriction_mode/attr/RestrictionMode
501 # {
502 # "data": "xyz.openbmc_project.Control.Security.RestrictionMode.Modes.Whitelist",
503 # "message": "200 OK",
504 # "status": "ok"
505 # }
506
507 Set IPMI Restriction Mode xyz.openbmc_project.Control.Security.RestrictionMode.Modes.Whitelist
508
509 # Attempt white-listed operation expecting success.
510 IPMI Power On
511
512 # Attempt non white-listed operation expecting failure.
513 Run Keyword And Expect Error *Insufficient privilege level*
514 ... Run Inband IPMI Standard Command mc reset cold
515
516
Rahul Maheshwarifdd5ff62017-08-01 04:15:03 -0500517*** Keywords ***
Sweta Potthuri5c6c72e2018-01-23 05:48:35 -0600518
Rahul Maheshwaridc6a32c2018-03-15 05:21:55 -0500519Get Sensor Count
520 [Documentation] Get sensors count using "sdr elist all" command.
521
522 # Example of "sdr elist all" command output:
523 # BootProgress | 03h | ok | 34.2 |
524 # OperatingSystemS | 05h | ok | 35.1 |
525 # AttemptsLeft | 07h | ok | 34.1 |
526 # occ0 | 08h | ok | 210.1 | Device Disabled
527 # occ1 | 09h | ok | 210.2 | Device Disabled
528 # p0_core0_temp | 11h | ns | 3.1 | Disabled
529 # cpu0_core0 | 12h | ok | 208.1 | Presence detected
530 # p0_core1_temp | 14h | ns | 3.2 | Disabled
531 # cpu0_core1 | 15h | ok | 208.2 | Presence detected
532 # p0_core2_temp | 17h | ns | 3.3 | Disabled
533 # ..
534 # ..
535 # ..
536 # ..
537 # ..
538 # ..
539 # fan3 | 00h | ns | 29.4 | Logical FRU @35h
540 # bmc | 00h | ns | 6.1 | Logical FRU @3Ch
541 # ethernet | 00h | ns | 1.1 | Logical FRU @46h
542
543 ${output}= Run IPMI Standard Command sdr elist all
544 ${sensor_list}= Split String ${output} \n
545 ${sensor_count}= Get Length ${sensor_list}
546 [Return] ${sensor_count}
Sweta Potthurif39022d2018-02-06 03:40:07 -0600547
Sweta Potthurif39022d2018-02-06 03:40:07 -0600548
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -0600549Set Watchdog Enabled Using REST
550 [Documentation] Set watchdog Enabled field using REST.
551 [Arguments] ${value}
552
553 # Description of argument(s):
554 # value Integer value (eg. "0-Disabled", "1-Enabled").
555
556 ${value_dict}= Create Dictionary data=${value}
Steven Sombaraaaab222018-12-19 13:16:23 -0600557 ${resp}= OpenBMC Put Request ${HOST_WATCHDOG_URI}attr/Enabled
Sweta Potthuri7d3af3c2018-01-29 03:07:07 -0600558 ... data=${value_dict}
Sweta Potthurif39022d2018-02-06 03:40:07 -0600559
560
Sweta Potthurif39022d2018-02-06 03:40:07 -0600561Fetch Details From LAN Print
562 [Documentation] Fetch details from LAN print.
563 [Arguments] ${field_name}
564
565 # Description of argument(s):
566 # ${field_name} Field name to be fetched from LAN print
567 # (e.g. "MAC Address", "Source").
568
Rahul Maheshwarid8037d32018-12-17 00:59:57 -0600569 ${stdout}= Run IPMI Standard Command lan print
Sweta Potthurif39022d2018-02-06 03:40:07 -0600570 ${fetch_value}= Get Lines Containing String ${stdout} ${field_name}
571 ${value_fetch}= Fetch From Right ${fetch_value} :${SPACE}
572 [Return] ${value_fetch}
573
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600574
575Verify Power Reading
576 [Documentation] Get dcmi power reading via IPMI.
577
578 # Example of power reading command output via IPMI.
579 # Instantaneous power reading: 235 Watts
580 # Minimum during sampling period: 235 Watts
581 # Maximum during sampling period: 235 Watts
582 # Average power reading over sample period: 235 Watts
583 # IPMI timestamp: Thu Jan 1 00:00:00 1970
584 # Sampling period: 00000000 Seconds.
585 # Power reading state is: deactivated
586
587 ${power_reading}= Get IPMI Power Reading
588
589 ${host_state}= Get Host State
590 Run Keyword If '${host_state}' == 'Off'
George Keishing51314872018-03-31 13:24:35 -0500591 ... Should Be Equal ${power_reading['instantaneous_power_reading']} 0
592 ... msg=Power reading not zero when power is off.
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600593
George Keishing51314872018-03-31 13:24:35 -0500594 Run Keyword If '${power_reading['instantaneous_power_reading']}' != '0'
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600595 ... Verify Power Reading Using REST ${power_reading['instantaneous_power_reading']}
596
597
George Keishinge78f1fd2018-09-04 13:34:59 -0500598Verify Power Reading Via Raw Command
599 [Documentation] Get dcmi power reading via IPMI raw command.
600
601 ${ipmi_raw_output}= Run IPMI Standard Command
602 ... raw ${IPMI_RAW_CMD['power_reading']['Get'][0]}
603
604 @{raw_output_list}= Split String ${ipmi_raw_output} ${SPACE}
605
606 # On successful execution of raw IPMI power reading command, completion
607 # code does not come in output. So current power value will start from 2
608 # byte instead of 3.
609
610 ${power_reading_ipmi_raw_3_item}= Get From List ${raw_output_list} 2
611 ${power_reading_ipmi_raw_3_item}=
612 ... Convert To Integer 0x${power_reading_ipmi_raw_3_item}
613
614 ${power_reading_rest}= Read Attribute
615 ... ${SENSORS_URI}power/total_power Value
616
617 # Example of power reading via REST
618 # "CriticalAlarmHigh": 0,
619 # "CriticalAlarmLow": 0,
620 # "CriticalHigh": 3100000000,
621 # "CriticalLow": 0,
622 # "Scale": -6,
623 # "Unit": "xyz.openbmc_project.Sensor.Value.Unit.Watts",
624 # "Value": 228000000,
625 # "WarningAlarmHigh": 0,
626 # "WarningAlarmLow": 0,
627 # "WarningHigh": 3050000000,
628 # "WarningLow": 0
629
630 # Get power value based on scale i.e. Value * (10 power Scale Value)
631 # e.g. from above case 228000000 * (10 power -6) = 228000000/1000000
632
633 ${power_reading_rest}= Evaluate ${power_reading_rest}/1000000
634 ${ipmi_rest_power_diff}=
635 ... Evaluate abs(${power_reading_rest} - ${power_reading_ipmi_raw_3_item})
636
637 Should Be True ${ipmi_rest_power_diff} <= ${allowed_power_diff}
638 ... msg=Power Reading above allowed threshold ${allowed_power_diff}.
639
640
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600641Verify Power Reading Using REST
642 [Documentation] Verify power reading using REST.
643 [Arguments] ${power_reading}
644
Gunnar Mills948e2e22018-03-23 12:54:27 -0500645 # Description of argument(s):
Sweta Potthuri78dd1e12018-02-21 00:03:33 -0600646 # power_reading IPMI Power reading
647
648 ${power_reading_rest}= Read Attribute
649 ... ${SENSORS_URI}power/total_power Value
650
651 # Example of power reading via REST
652 # "CriticalAlarmHigh": 0,
653 # "CriticalAlarmLow": 0,
654 # "CriticalHigh": 3100000000,
655 # "CriticalLow": 0,
656 # "Scale": -6,
657 # "Unit": "xyz.openbmc_project.Sensor.Value.Unit.Watts",
658 # "Value": 228000000,
659 # "WarningAlarmHigh": 0,
660 # "WarningAlarmLow": 0,
661 # "WarningHigh": 3050000000,
662 # "WarningLow": 0
663
664 # Get power value based on scale i.e. Value * (10 power Scale Value)
665 # e.g. from above case 228000000 * (10 power -6) = 228000000/1000000
666 ${power_reading_rest}= Evaluate ${power_reading_rest}/1000000
667 ${ipmi_rest_power_diff}=
668 ... Evaluate abs(${power_reading_rest} - ${power_reading})
669
670 Should Be True ${ipmi_rest_power_diff} <= ${allowed_power_diff}
671 ... msg=Power reading above allowed threshold ${allowed_power_diff}.
George Keishing02651f02018-04-11 02:07:16 -0500672
673
674Get Physical Network Interface Count
675 [Documentation] Return valid physical network interfaces count.
676
677 # Example:
678 # link/ether 22:3a:7f:70:92:cb brd ff:ff:ff:ff:ff:ff
679 # link/ether 0e:8e:0d:6b:e9:e4 brd ff:ff:ff:ff:ff:ff
680
681 ${mac_entry_list}= Get BMC MAC Address List
682 ${mac_unique_list}= Remove Duplicates ${mac_entry_list}
683 ${physical_interface_count}= Get Length ${mac_unique_list}
684
685 [Return] ${physical_interface_count}
George Keishing39967eb2018-04-30 11:36:23 -0500686
George Keishinge85113a2019-06-07 08:21:51 -0500687
688Set IPMI Restriction Mode
689 [Documentation] Set the IPMI restriction mode.
690 [Arguments] ${restriction_mode}
691
692 # Description of argument(s):
693 # restriction_mode IPMI valid restriction modes.
694
695 ${valueDict}= Create Dictionary data=${restriction_mode}
696
697 Write Attribute ${CONTROL_HOST_URI}restriction_mode/
698 ... RestrictionMode data=${valueDict}