blob: 4d384154257311c27276cf6b7f7c2681c9b6fb67 [file] [log] [blame]
Rahul Maheshwari71525ad2019-08-01 05:54:06 -05001*** Settings ***
2
3Documentation Module to test IPMI asset tag functionality.
4Resource ../lib/ipmi_client.robot
5Resource ../lib/openbmc_ffdc.robot
nagarjunb2298450742022-04-19 12:00:02 +05306Resource ../lib/bmc_network_utils.robot
Nandish-Matti18179e72023-10-26 10:29:55 -05007Resource ../lib/energy_scale_utils.robot
Tony Lee3fdd31e2020-02-15 11:21:40 +08008Variables ../data/ipmi_raw_cmd_table.py
Tony Lee18c6f9a2020-02-18 17:00:20 +08009Variables ../data/ipmi_variable.py
10Library ../lib/bmc_network_utils.py
11Library ../lib/ipmi_utils.py
Rahul Maheshwari71525ad2019-08-01 05:54:06 -050012
nagarjunb2298450742022-04-19 12:00:02 +053013Suite Setup IPMI General Test Suite Setup
Rahul Maheshwari71525ad2019-08-01 05:54:06 -050014Test Teardown FFDC On Test Case Fail
15
George Keishing87dc4422023-10-20 12:56:30 +053016Force Tags IPMI_General
17
Rahul Maheshwari71525ad2019-08-01 05:54:06 -050018*** Test Cases ***
19
Tony Lee3fdd31e2020-02-15 11:21:40 +080020Test Get Self Test Results via IPMI Raw Command
21 [Documentation] Get self test results via IPMI raw command and verify the output.
George Keishingb98036a2022-01-31 12:39:47 -060022 [Tags] Test_Get_Self_Test_Results_via_IPMI_Raw_Command
Tony Lee3fdd31e2020-02-15 11:21:40 +080023
24 ${resp}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Self_Test_Results']['Get'][0]}
25
26 # 55h = No error. All Self Tests Passed.
27 # 56h = Self Test function not implemented in this controller.
28 Should Contain Any ${resp} 55 00 56 00
29
30
31Test Get Device GUID Via IPMI Raw Command
32 [Documentation] Get device GUID via IPMI raw command and verify it using Redfish.
George Keishingb98036a2022-01-31 12:39:47 -060033 [Tags] Test_Get_Device_GUID_Via_IPMI_Raw_Command
Tony Lee3fdd31e2020-02-15 11:21:40 +080034 [Teardown] Run Keywords Redfish.Logout AND FFDC On Test Case Fail
35 # Get GUIDS via IPMI.
ganesanb4d430282023-04-27 14:33:23 +000036 # This should match the /redfish/v1/Managers/${MANAGER_ID}'s UUID data.
Tony Lee3fdd31e2020-02-15 11:21:40 +080037 ${guids}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Device GUID']['Get'][0]}
38 # Reverse the order and remove space delims.
39 ${guids}= Split String ${guids}
40 Reverse List ${guids}
41 ${guids}= Evaluate "".join(${guids})
42
43 Redfish.Login
ganesanb4d430282023-04-27 14:33:23 +000044 ${uuid}= Redfish.Get Attribute /redfish/v1/Managers/${MANAGER_ID} UUID
Tony Lee3fdd31e2020-02-15 11:21:40 +080045 ${uuid}= Remove String ${uuid} -
46
47 Rprint Vars guids uuid
48 Valid Value uuid ['${guids}']
Tony Lee18c6f9a2020-02-18 17:00:20 +080049
50
51Verify Get Channel Info via IPMI
52 [Documentation] Verify get channel info via IPMI.
53 [Tags] Verify_Get_Channel_Info_via_IPMI
54
55 # Get channel info via ipmi command "ipmitool channel info [channel number]".
Tony Lee87c9cb92020-03-04 14:47:09 +080056 # Verify channel info with files "channel_access_volatile.json", "channel_access_nv.json"
57 # and "channel_config.json" in BMC.
Tony Lee18c6f9a2020-02-18 17:00:20 +080058
59 # Example output from 'Get Channel Info':
60 # channel_info:
61 # [channel_0x2_info]:
62 # [channel_medium_type]: 802.3 LAN
63 # [channel_protocol_type]: IPMB-1.0
64 # [session_support]: multi-session
65 # [active_session_count]: 0
66 # [protocol_vendor_id]: 7154
Tony Lee87c9cb92020-03-04 14:47:09 +080067 # [volatile(active)_settings]:
68 # [alerting]: enabled
69 # [per-message_auth]: enabled
70 # [user_level_auth]: enabled
71 # [access_mode]: always available
72 # [Non-Volatile Settings]:
73 # [alerting]: enabled
74 # [per-message_auth]: enabled
75 # [user_level_auth]: enabled
76 # [access_mode]: always available
Tony Lee18c6f9a2020-02-18 17:00:20 +080077
78 ${channel_info_ipmi}= Get Channel Info ${CHANNEL_NUMBER}
79 ${active_channel_config}= Get Active Channel Config
Tony Lee87c9cb92020-03-04 14:47:09 +080080 ${channel_volatile_data_config}= Get Channel Access Config /run/ipmi/channel_access_volatile.json
81 ${channel_nv_data_config}= Get Channel Access Config /var/lib/ipmi/channel_access_nv.json
82
George Keishing33be3592022-03-08 08:52:25 -060083 Rprint Vars channel_info_ipmi
84 Rprint Vars active_channel_config
85 Rprint Vars channel_volatile_data_config
86 Rprint Vars channel_nv_data_config
Tony Lee18c6f9a2020-02-18 17:00:20 +080087
88 Valid Value medium_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_medium_type']}']
89 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['medium_type']}']
90
91 Valid Value protocol_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_protocol_type']}']
92 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['protocol_type']}']
93
94 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['session_support']
95 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['session_supported']}']
96
97 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['active_session_count']
98 ... ['${active_channel_config['${CHANNEL_NUMBER}']['active_sessions']}']
99 # IPMI Spec: The IPMI Enterprise Number is: 7154 (decimal)
100 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['protocol_vendor_id'] ['7154']
101
Tony Lee87c9cb92020-03-04 14:47:09 +0800102 # Verify volatile(active)_settings
103 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['alerting']}']
104 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}']
Tony Lee18c6f9a2020-02-18 17:00:20 +0800105
Tony Lee87c9cb92020-03-04 14:47:09 +0800106 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['per-message_auth']}']
107 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}']
Tony Lee18c6f9a2020-02-18 17:00:20 +0800108
Tony Lee87c9cb92020-03-04 14:47:09 +0800109 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['user_level_auth']}']
110 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}']
Tony Lee18c6f9a2020-02-18 17:00:20 +0800111
Tony Lee87c9cb92020-03-04 14:47:09 +0800112 Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['access_mode']}']
113 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['access_mode']}']
114
115 # Verify Non-Volatile Settings
116 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['alerting']}']
117 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}']
118
119 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['per-message_auth']}']
120 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}']
121
122 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['user_level_auth']}']
123 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}']
124
125 Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['access_mode']}']
126 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['access_mode']}']
Tony Lee0754c5f2020-03-13 19:38:24 +0800127
128
129Test Get Channel Authentication Capabilities via IPMI
nagarjunb2298450742022-04-19 12:00:02 +0530130 [Documentation] Verify channel authentication capabilities via IPMI.
Tony Lee0754c5f2020-03-13 19:38:24 +0800131 [Tags] Test_Get_Channel_Authentication_Capabilities_via_IPMI
nagarjunb2298450742022-04-19 12:00:02 +0530132 [Template] Verify Channel Auth Capabilities
Tony Lee0754c5f2020-03-13 19:38:24 +0800133
nagarjunb2298450742022-04-19 12:00:02 +0530134 FOR ${channel} IN @{active_channel_list}
135 FOR ${privilege} IN 4 3 2
136 # Input Channel Privilege Level
137 ${channel} ${privilege}
138 END
139 END
Tony Lee0754c5f2020-03-13 19:38:24 +0800140
nagarjunb2298450742022-04-19 12:00:02 +0530141
142Test Get Channel Authentication Capabilities IPMI Command For Invalid Channel
143 [Documentation] Verify get channel authentication capabilities for invalid channel.
144 [Tags] Test_Get_Channel_Authentication_Capabilities_IPMI_Command_For_Invalid_Channel
George Keishing13b7afd2022-05-23 07:36:16 -0500145 [Template] Verify Channel Auth Capabilities For Invalid Channel
nagarjunb2298450742022-04-19 12:00:02 +0530146
147 FOR ${channel} IN @{inactive_channel_list}
148 # Input Channel
149 ${channel}
150 END
151
152
George Keishing13b7afd2022-05-23 07:36:16 -0500153Verify Get Channel Authentication Capabilities IPMI Raw Command With Invalid Data Length
154 [Documentation] Verify get channel authentication capabilities IPMI raw command with invalid data length.
155 [Tags] Verify_Get_Channel_Authentication_Capabilities_IPMI_Raw_Command_With_Invalid_Data_Length
nagarjunb2298450742022-04-19 12:00:02 +0530156 [Template] Verify Channel Auth Command For Invalid Data Length
157
158 # Bytes
159 low
160 high
Tony Lee2d071822020-02-19 16:37:58 +0800161
162
163Verify Set Session Privilege Level via IPMI Raw Command
164 [Documentation] Set session privilege with given privilege level and verify the response with
165 ... expected level.
166 [Tags] Verify_Set_Session_Privilege_Level_via_IPMI_Raw_Command
167 [Template] Set Session Privilege Level And Verify
168
169 # privilege_level expected_level
170 0x00 04
171 0x02 02
172 0x03 03
173 0x04 04
174
175
George Keishingb98036a2022-01-31 12:39:47 -0600176Verify Set Invalid Session Privilege Level Via IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800177 [Documentation] Verify set invalid session privilege level via IPMI raw command.
178 [Tags] Verify_Set_Invalid_Session_Privilege_Level_Via_IPMI_Raw_Command
179 [Template] Set Invalid Session Privilege Level And Verify
180
181 # invalid_privilege_level
Nagarjun Bbb3365c2023-05-25 14:40:57 +0530182 0x01
Tony Lee94f1a6c2020-03-25 10:37:46 +0800183 0x05
184 0x06
185 0x07
186 0x0F
187
188
George Keishingb98036a2022-01-31 12:39:47 -0600189Verify Close Session Via IPMI
Tony Leed12b40d2020-03-19 10:45:21 +0800190 [Documentation] Verify close session via IPMI.
191 [Tags] Verify_Close_Session_Via_IPMI
192
193 # The "close session command" can be tested with any out-of-band IPMI command.
194 # When the session is about to close, it will execute the close session command at the end.
195
196 ${cmd}= Catenate mc info -vvv 2>&1 | grep "Closed Session"
197 ${cmd_output}= Run External IPMI Standard Command ${cmd}
198
199 Should Contain ${cmd_output} Closed Session
200
201
Ashwini Chandrappa4ec70852021-09-07 09:10:36 -0500202Verify Chassis Identify via IPMI
203 [Documentation] Set chassis identify using IPMI and verify.
204 [Tags] Verify_Chassis_Identify_via_IPMI
205 [Setup] Redfish.Login
206 [Teardown] Redfish.logout
207
208 # Set to default "chassis identify" and verify that LED blinks for 15s.
209 Run IPMI Standard Command chassis identify
210 Verify Identify LED State Via Redfish Lit
211
212 Sleep 18s
213 Verify Identify LED State Via Redfish Off
214
215 # Set "chassis identify" to 10s and verify that the LED blinks for 10s.
216 Run IPMI Standard Command chassis identify 10
217 Verify Identify LED State Via Redfish Lit
218
219 Sleep 12s
220 Verify Identify LED State Via Redfish Off
221
222
223Verify Chassis Identify Off And Force Identify On via IPMI
224 [Documentation] Set chassis identify to "off" and "force" using IPMI and verify.
225 [Tags] Verify_Chassis_Identify_Off_And_Force_Identify_On_via_IPMI
226 [Setup] Redfish.Login
227 [Teardown] Redfish.logout
228
229 # Set the LED to "Force Identify On".
230 Run IPMI Standard Command chassis identify force
231 Verify Identify LED State Via Redfish Lit
232
233 # Set "chassis identify" to 0 and verify that the LED turns off.
234 Run IPMI Standard Command chassis identify 0
235 Verify Identify LED State Via Redfish Off
236
237
Nandish-Matti18179e72023-10-26 10:29:55 -0500238Set Power Cap Value Via IPMI And Verify Using Redfish
239 [Documentation] Set power cap value via IPMI and verify using Redfish.
240 [Setup] Redfish.Login
241 [Teardown] Run Keywords Set Power Cap Value Via Redfish ${initial_power_value} AND Redfish.Logout
242 [Tags] Set_Power_Cap_Value_Via_IPMI_And_Verify_Using_Redfish
243
244 # Get initial power cap value via Redfish.
245 ${power_limit_watts}= Get System Power Cap Limit
246 ${initial_power_value}= Set Variable ${power_limit_watts['SetPoint']}
247
248 # Get the allowable min and max power cap value via Redfish.
249 ${min_power_value}= Set Variable ${power_limit_watts['AllowableMin']}
250 ${max_power_value}= Set Variable ${power_limit_watts['AllowableMax']}
251
252 # Generate a random power cap value within the allowable range.
253 ${random_power_cap}= Evaluate random.randint(${min_power_value}, ${max_power_value}) modules=random
254
255 # Set power cap value via IPMI.
256 Run Keyword Run IPMI Standard Command dcmi power set_limit limit ${random_power_cap}
257
258 # Verify the power cap value with the Redfish value.
259 ${updated_power_limits}= Get System Power Cap Limit
260 Should Be Equal ${updated_power_limits['SetPoint']} ${random_power_cap}
261
262
Tony Lee2d071822020-02-19 16:37:58 +0800263*** Keywords ***
264
nagarjunb2298450742022-04-19 12:00:02 +0530265IPMI General Test Suite Setup
266 [Documentation] Get active and inactive/invalid channels from channel_config.json file
267 ... in list type and set it as suite variable.
268
269 # Get active channel list and set as suite variable.
270 @{active_channel_list}= Get Active Ethernet Channel List
271 Set Suite Variable @{active_channel_list}
272
273 # Get Inactive/Invalid channel list and set as suite variable.
274 @{inactive_channel_list}= Get Invalid Channel Number List
275 Set Suite Variable @{inactive_channel_list}
276
277
Tony Lee2d071822020-02-19 16:37:58 +0800278Set Session Privilege Level And Verify
279 [Documentation] Set session privilege with given privilege level and verify the response with
280 ... expected level.
281 [Arguments] ${privilege_level} ${expected_level}
282 # Description of argument(s):
283 # privilege_level Requested Privilege Level.
George Keishing33be3592022-03-08 08:52:25 -0600284 # expected_level New Privilege Level (or present level if ‘return present privilege level’
285 # was selected).
Tony Lee2d071822020-02-19 16:37:58 +0800286
Tony Leeb49853c2020-06-03 15:27:56 +0800287 ${resp}= Run External IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800288 ... 0x06 0x3b ${privilege_level}
Tony Lee2d071822020-02-19 16:37:58 +0800289 Should Contain ${resp} ${expected_level}
Tony Lee94f1a6c2020-03-25 10:37:46 +0800290
291
292Set Invalid Session Privilege Level And Verify
293 [Documentation] Set invalid session privilege level and verify the response.
294 [Arguments] ${privilege_level}
295 # Description of argument(s):
296 # privilege_level Requested Privilege Level.
297
298 # Verify requested level exceeds Channel and/or User Privilege Limit.
Tony Leeb49853c2020-06-03 15:27:56 +0800299 ${msg}= Run Keyword And Expect Error * Run External IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800300 ... 0x06 0x3b ${privilege_level}
Nagarjun Bbb3365c2023-05-25 14:40:57 +0530301
302 # 0x05 is OEM proprietary level.
303 IF ${privilege_level} == 0x05
304 Should Contain ${msg} Unknown rsp=0x81
305 ELSE
George Keishingc2b95042023-06-27 12:25:33 +0530306 # According to IPMI spec privilege level except 0x00-0x05, others are
307 # reserved. So if we try to set those privilege we will get rsp as
308 # 0xcc(Invalid data filed in request)
Nagarjun Bbb3365c2023-05-25 14:40:57 +0530309 Should Contain ${msg} Invalid data field in request rsp=0xcc
310 END
Ashwini Chandrappa4ec70852021-09-07 09:10:36 -0500311
312
313Verify Identify LED State Via Redfish
314 [Documentation] Verify that Redfish identify LED system with given state.
315 [Arguments] ${expected_state}
316 # Description of argument(s):
317 # expected_led_status Expected value of Identify LED.
318
George Keishingb0614552022-07-08 02:52:57 -0500319 # Get the following URI(s) and iterate to find the attribute IndicatorLED.
320 # Example:
321 # /redfish/v1/Systems/system
322 # /redfish/v1/Systems/hypervisor
323
George Keishing52eb7c22022-03-11 10:58:53 -0600324 # Python module: get_member_list(resource_path)
325 ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems
326 FOR ${system} IN @{systems}
327 ${led_value}= Redfish.Get Attribute ${system} IndicatorLED
George Keishingf6b4d532022-07-08 07:07:54 -0500328 # Get attribute return None if IndicatorLED does not exist in the URI.
George Keishingb0614552022-07-08 02:52:57 -0500329 Continue For Loop If '${led_value}' == 'None'
George Keishing52eb7c22022-03-11 10:58:53 -0600330 Should Be True '${led_value}' == '${expected_state}'
331 END
nagarjunb2298450742022-04-19 12:00:02 +0530332
333
334Verify Channel Auth Capabilities
335 [Documentation] Verify authentication capabilities for given channel and privilege.
336 [Arguments] ${channel} ${privilege_level}
337
338 # Description of argument(s):
339 # channel Interface channel number.
George Keishing13b7afd2022-05-23 07:36:16 -0500340 # privilege_level User Privilege level (e.g. 4-Administator, 3-Operator, 2-Readonly).
nagarjunb2298450742022-04-19 12:00:02 +0530341
342 # Python module: get_channel_auth_capabilities(channel_number, privilege_level)
343 ${channel_auth_cap}= Get Channel Auth Capabilities ${channel} ${privilege_level}
344 Rprint Vars channel_auth_cap
345
346 Valid Value channel_auth_cap['channel_number'] ['${channel}']
347 Valid Value channel_auth_cap['kg_status'] ['default (all zeroes)']
348 Valid Value channel_auth_cap['per_message_authentication'] ['enabled']
349 Valid Value channel_auth_cap['user_level_authentication'] ['enabled']
350 Valid Value channel_auth_cap['non-null_user_names_exist'] ['yes']
351 Valid Value channel_auth_cap['null_user_names_exist'] ['no']
352 Valid Value channel_auth_cap['anonymous_login_enabled'] ['no']
353 Valid Value channel_auth_cap['channel_supports_ipmi_v1.5'] ['no']
354 Valid Value channel_auth_cap['channel_supports_ipmi_v2.0'] ['yes']
355
356
George Keishing13b7afd2022-05-23 07:36:16 -0500357Verify Channel Auth Capabilities For Invalid Channel
nagarjunb2298450742022-04-19 12:00:02 +0530358 [Documentation] Verify authentication capabilities of invalid channels.
359 [Arguments] ${channel}
360
361 # Description of argument(s):
362 # channel Interface channel number.
363
364 ${channel_in_hex}= Convert To Hex ${channel} prefix=0x
365 ${cmd}= Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${channel_in_hex} 0x04
366
367 Verify Invalid IPMI Command ${cmd} 0xcc
368
369
370Verify Channel Auth Command For Invalid Data Length
371 [Documentation] Verify channel authentication command for invalid data length.
372 [Arguments] ${byte_length}
373
374 # Description of argument(s):
375 # byte_length high or low.
376 # e.g. high - add extra byte to request data like "0x06 0x38 0x01 0x04 0x01".
377 # low - reduce bytes in actual request data like "0x06 0x38".
378
379 ${req_cmd}= Run Keyword If '${byte_length}' == 'low'
380 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER}
381 ... ELSE
382 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} 0x04 0x01
383
384 Verify Invalid IPMI Command ${req_cmd} 0xc7
Nandish-Matti18179e72023-10-26 10:29:55 -0500385
386
387Set Power Cap Value Via Redfish
388 [Documentation] Set power cap value via Redfish.
389 [Arguments] ${power_cap_value}
390
391 # Description of argument(s):
392 # power_cap_value Power cap value which need to be set.
393
394 # Set power cap value based on argument.
395 Redfish.Patch /redfish/v1/Chassis/chassis/EnvironmentMetrics
396 ... body={"PowerLimitWatts":{"SetPoint": ${power_cap_value}}}
397 ... valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}]