blob: 8995df95b564f7640dbc3a58e499b4e4180d8a6a [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
Tony Lee3fdd31e2020-02-15 11:21:40 +08007Variables ../data/ipmi_raw_cmd_table.py
Tony Lee18c6f9a2020-02-18 17:00:20 +08008Variables ../data/ipmi_variable.py
9Library ../lib/bmc_network_utils.py
10Library ../lib/ipmi_utils.py
Rahul Maheshwari71525ad2019-08-01 05:54:06 -050011
nagarjunb2298450742022-04-19 12:00:02 +053012Suite Setup IPMI General Test Suite Setup
Rahul Maheshwari71525ad2019-08-01 05:54:06 -050013Test Teardown FFDC On Test Case Fail
14
15*** Test Cases ***
16
Tony Lee3fdd31e2020-02-15 11:21:40 +080017Test Get Self Test Results via IPMI Raw Command
18 [Documentation] Get self test results via IPMI raw command and verify the output.
George Keishingb98036a2022-01-31 12:39:47 -060019 [Tags] Test_Get_Self_Test_Results_via_IPMI_Raw_Command
Tony Lee3fdd31e2020-02-15 11:21:40 +080020
21 ${resp}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Self_Test_Results']['Get'][0]}
22
23 # 55h = No error. All Self Tests Passed.
24 # 56h = Self Test function not implemented in this controller.
25 Should Contain Any ${resp} 55 00 56 00
26
27
28Test Get Device GUID Via IPMI Raw Command
29 [Documentation] Get device GUID via IPMI raw command and verify it using Redfish.
George Keishingb98036a2022-01-31 12:39:47 -060030 [Tags] Test_Get_Device_GUID_Via_IPMI_Raw_Command
Tony Lee3fdd31e2020-02-15 11:21:40 +080031 [Teardown] Run Keywords Redfish.Logout AND FFDC On Test Case Fail
32 # Get GUIDS via IPMI.
ganesanb4d430282023-04-27 14:33:23 +000033 # This should match the /redfish/v1/Managers/${MANAGER_ID}'s UUID data.
Tony Lee3fdd31e2020-02-15 11:21:40 +080034 ${guids}= Run IPMI Standard Command raw ${IPMI_RAW_CMD['Device GUID']['Get'][0]}
35 # Reverse the order and remove space delims.
36 ${guids}= Split String ${guids}
37 Reverse List ${guids}
38 ${guids}= Evaluate "".join(${guids})
39
40 Redfish.Login
ganesanb4d430282023-04-27 14:33:23 +000041 ${uuid}= Redfish.Get Attribute /redfish/v1/Managers/${MANAGER_ID} UUID
Tony Lee3fdd31e2020-02-15 11:21:40 +080042 ${uuid}= Remove String ${uuid} -
43
44 Rprint Vars guids uuid
45 Valid Value uuid ['${guids}']
Tony Lee18c6f9a2020-02-18 17:00:20 +080046
47
48Verify Get Channel Info via IPMI
49 [Documentation] Verify get channel info via IPMI.
50 [Tags] Verify_Get_Channel_Info_via_IPMI
51
52 # Get channel info via ipmi command "ipmitool channel info [channel number]".
Tony Lee87c9cb92020-03-04 14:47:09 +080053 # Verify channel info with files "channel_access_volatile.json", "channel_access_nv.json"
54 # and "channel_config.json" in BMC.
Tony Lee18c6f9a2020-02-18 17:00:20 +080055
56 # Example output from 'Get Channel Info':
57 # channel_info:
58 # [channel_0x2_info]:
59 # [channel_medium_type]: 802.3 LAN
60 # [channel_protocol_type]: IPMB-1.0
61 # [session_support]: multi-session
62 # [active_session_count]: 0
63 # [protocol_vendor_id]: 7154
Tony Lee87c9cb92020-03-04 14:47:09 +080064 # [volatile(active)_settings]:
65 # [alerting]: enabled
66 # [per-message_auth]: enabled
67 # [user_level_auth]: enabled
68 # [access_mode]: always available
69 # [Non-Volatile Settings]:
70 # [alerting]: enabled
71 # [per-message_auth]: enabled
72 # [user_level_auth]: enabled
73 # [access_mode]: always available
Tony Lee18c6f9a2020-02-18 17:00:20 +080074
75 ${channel_info_ipmi}= Get Channel Info ${CHANNEL_NUMBER}
76 ${active_channel_config}= Get Active Channel Config
Tony Lee87c9cb92020-03-04 14:47:09 +080077 ${channel_volatile_data_config}= Get Channel Access Config /run/ipmi/channel_access_volatile.json
78 ${channel_nv_data_config}= Get Channel Access Config /var/lib/ipmi/channel_access_nv.json
79
George Keishing33be3592022-03-08 08:52:25 -060080 Rprint Vars channel_info_ipmi
81 Rprint Vars active_channel_config
82 Rprint Vars channel_volatile_data_config
83 Rprint Vars channel_nv_data_config
Tony Lee18c6f9a2020-02-18 17:00:20 +080084
85 Valid Value medium_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_medium_type']}']
86 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['medium_type']}']
87
88 Valid Value protocol_type_ipmi_conf_map['${channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['channel_protocol_type']}']
89 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['protocol_type']}']
90
91 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['session_support']
92 ... ['${active_channel_config['${CHANNEL_NUMBER}']['channel_info']['session_supported']}']
93
94 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['active_session_count']
95 ... ['${active_channel_config['${CHANNEL_NUMBER}']['active_sessions']}']
96 # IPMI Spec: The IPMI Enterprise Number is: 7154 (decimal)
97 Valid Value channel_info_ipmi['channel_0x${CHANNEL_NUMBER}_info']['protocol_vendor_id'] ['7154']
98
Tony Lee87c9cb92020-03-04 14:47:09 +080099 # Verify volatile(active)_settings
100 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['alerting']}']
101 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}']
Tony Lee18c6f9a2020-02-18 17:00:20 +0800102
Tony Lee87c9cb92020-03-04 14:47:09 +0800103 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['per-message_auth']}']
104 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['per_msg_auth_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']['user_level_auth']}']
107 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}']
Tony Lee18c6f9a2020-02-18 17:00:20 +0800108
Tony Lee87c9cb92020-03-04 14:47:09 +0800109 Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['volatile(active)_settings']['access_mode']}']
110 ... ['${channel_volatile_data_config['${CHANNEL_NUMBER}']['access_mode']}']
111
112 # Verify Non-Volatile Settings
113 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['alerting']}']
114 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['alerting_disabled']}']
115
116 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['per-message_auth']}']
117 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['per_msg_auth_disabled']}']
118
119 Valid Value disabled_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['user_level_auth']}']
120 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['user_auth_disabled']}']
121
122 Valid Value access_mode_ipmi_conf_map['${channel_info_ipmi['non-volatile_settings']['access_mode']}']
123 ... ['${channel_nv_data_config['${CHANNEL_NUMBER}']['access_mode']}']
Tony Lee0754c5f2020-03-13 19:38:24 +0800124
125
126Test Get Channel Authentication Capabilities via IPMI
nagarjunb2298450742022-04-19 12:00:02 +0530127 [Documentation] Verify channel authentication capabilities via IPMI.
Tony Lee0754c5f2020-03-13 19:38:24 +0800128 [Tags] Test_Get_Channel_Authentication_Capabilities_via_IPMI
nagarjunb2298450742022-04-19 12:00:02 +0530129 [Template] Verify Channel Auth Capabilities
Tony Lee0754c5f2020-03-13 19:38:24 +0800130
nagarjunb2298450742022-04-19 12:00:02 +0530131 FOR ${channel} IN @{active_channel_list}
132 FOR ${privilege} IN 4 3 2
133 # Input Channel Privilege Level
134 ${channel} ${privilege}
135 END
136 END
Tony Lee0754c5f2020-03-13 19:38:24 +0800137
nagarjunb2298450742022-04-19 12:00:02 +0530138
139Test Get Channel Authentication Capabilities IPMI Command For Invalid Channel
140 [Documentation] Verify get channel authentication capabilities for invalid channel.
141 [Tags] Test_Get_Channel_Authentication_Capabilities_IPMI_Command_For_Invalid_Channel
George Keishing13b7afd2022-05-23 07:36:16 -0500142 [Template] Verify Channel Auth Capabilities For Invalid Channel
nagarjunb2298450742022-04-19 12:00:02 +0530143
144 FOR ${channel} IN @{inactive_channel_list}
145 # Input Channel
146 ${channel}
147 END
148
149
George Keishing13b7afd2022-05-23 07:36:16 -0500150Verify Get Channel Authentication Capabilities IPMI Raw Command With Invalid Data Length
151 [Documentation] Verify get channel authentication capabilities IPMI raw command with invalid data length.
152 [Tags] Verify_Get_Channel_Authentication_Capabilities_IPMI_Raw_Command_With_Invalid_Data_Length
nagarjunb2298450742022-04-19 12:00:02 +0530153 [Template] Verify Channel Auth Command For Invalid Data Length
154
155 # Bytes
156 low
157 high
Tony Lee2d071822020-02-19 16:37:58 +0800158
159
160Verify Set Session Privilege Level via IPMI Raw Command
161 [Documentation] Set session privilege with given privilege level and verify the response with
162 ... expected level.
163 [Tags] Verify_Set_Session_Privilege_Level_via_IPMI_Raw_Command
164 [Template] Set Session Privilege Level And Verify
165
166 # privilege_level expected_level
167 0x00 04
168 0x02 02
169 0x03 03
170 0x04 04
171
172
George Keishingb98036a2022-01-31 12:39:47 -0600173Verify Set Invalid Session Privilege Level Via IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800174 [Documentation] Verify set invalid session privilege level via IPMI raw command.
175 [Tags] Verify_Set_Invalid_Session_Privilege_Level_Via_IPMI_Raw_Command
176 [Template] Set Invalid Session Privilege Level And Verify
177
178 # invalid_privilege_level
179 0x05
180 0x06
181 0x07
182 0x0F
183
184
George Keishingb98036a2022-01-31 12:39:47 -0600185Verify Close Session Via IPMI
Tony Leed12b40d2020-03-19 10:45:21 +0800186 [Documentation] Verify close session via IPMI.
187 [Tags] Verify_Close_Session_Via_IPMI
188
189 # The "close session command" can be tested with any out-of-band IPMI command.
190 # When the session is about to close, it will execute the close session command at the end.
191
192 ${cmd}= Catenate mc info -vvv 2>&1 | grep "Closed Session"
193 ${cmd_output}= Run External IPMI Standard Command ${cmd}
194
195 Should Contain ${cmd_output} Closed Session
196
197
Ashwini Chandrappa4ec70852021-09-07 09:10:36 -0500198Verify Chassis Identify via IPMI
199 [Documentation] Set chassis identify using IPMI and verify.
200 [Tags] Verify_Chassis_Identify_via_IPMI
201 [Setup] Redfish.Login
202 [Teardown] Redfish.logout
203
204 # Set to default "chassis identify" and verify that LED blinks for 15s.
205 Run IPMI Standard Command chassis identify
206 Verify Identify LED State Via Redfish Lit
207
208 Sleep 18s
209 Verify Identify LED State Via Redfish Off
210
211 # Set "chassis identify" to 10s and verify that the LED blinks for 10s.
212 Run IPMI Standard Command chassis identify 10
213 Verify Identify LED State Via Redfish Lit
214
215 Sleep 12s
216 Verify Identify LED State Via Redfish Off
217
218
219Verify Chassis Identify Off And Force Identify On via IPMI
220 [Documentation] Set chassis identify to "off" and "force" using IPMI and verify.
221 [Tags] Verify_Chassis_Identify_Off_And_Force_Identify_On_via_IPMI
222 [Setup] Redfish.Login
223 [Teardown] Redfish.logout
224
225 # Set the LED to "Force Identify On".
226 Run IPMI Standard Command chassis identify force
227 Verify Identify LED State Via Redfish Lit
228
229 # Set "chassis identify" to 0 and verify that the LED turns off.
230 Run IPMI Standard Command chassis identify 0
231 Verify Identify LED State Via Redfish Off
232
233
Tony Lee2d071822020-02-19 16:37:58 +0800234*** Keywords ***
235
nagarjunb2298450742022-04-19 12:00:02 +0530236IPMI General Test Suite Setup
237 [Documentation] Get active and inactive/invalid channels from channel_config.json file
238 ... in list type and set it as suite variable.
239
240 # Get active channel list and set as suite variable.
241 @{active_channel_list}= Get Active Ethernet Channel List
242 Set Suite Variable @{active_channel_list}
243
244 # Get Inactive/Invalid channel list and set as suite variable.
245 @{inactive_channel_list}= Get Invalid Channel Number List
246 Set Suite Variable @{inactive_channel_list}
247
248
Tony Lee2d071822020-02-19 16:37:58 +0800249Set Session Privilege Level And Verify
250 [Documentation] Set session privilege with given privilege level and verify the response with
251 ... expected level.
252 [Arguments] ${privilege_level} ${expected_level}
253 # Description of argument(s):
254 # privilege_level Requested Privilege Level.
George Keishing33be3592022-03-08 08:52:25 -0600255 # expected_level New Privilege Level (or present level if ‘return present privilege level’
256 # was selected).
Tony Lee2d071822020-02-19 16:37:58 +0800257
Tony Leeb49853c2020-06-03 15:27:56 +0800258 ${resp}= Run External IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800259 ... 0x06 0x3b ${privilege_level}
Tony Lee2d071822020-02-19 16:37:58 +0800260 Should Contain ${resp} ${expected_level}
Tony Lee94f1a6c2020-03-25 10:37:46 +0800261
262
263Set Invalid Session Privilege Level And Verify
264 [Documentation] Set invalid session privilege level and verify the response.
265 [Arguments] ${privilege_level}
266 # Description of argument(s):
267 # privilege_level Requested Privilege Level.
268
269 # Verify requested level exceeds Channel and/or User Privilege Limit.
Tony Leeb49853c2020-06-03 15:27:56 +0800270 ${msg}= Run Keyword And Expect Error * Run External IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800271 ... 0x06 0x3b ${privilege_level}
272 Should Contain ${msg} Unknown rsp=0x81
Ashwini Chandrappa4ec70852021-09-07 09:10:36 -0500273
274
275Verify Identify LED State Via Redfish
276 [Documentation] Verify that Redfish identify LED system with given state.
277 [Arguments] ${expected_state}
278 # Description of argument(s):
279 # expected_led_status Expected value of Identify LED.
280
George Keishingb0614552022-07-08 02:52:57 -0500281 # Get the following URI(s) and iterate to find the attribute IndicatorLED.
282 # Example:
283 # /redfish/v1/Systems/system
284 # /redfish/v1/Systems/hypervisor
285
George Keishing52eb7c22022-03-11 10:58:53 -0600286 # Python module: get_member_list(resource_path)
287 ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems
288 FOR ${system} IN @{systems}
289 ${led_value}= Redfish.Get Attribute ${system} IndicatorLED
George Keishingf6b4d532022-07-08 07:07:54 -0500290 # Get attribute return None if IndicatorLED does not exist in the URI.
George Keishingb0614552022-07-08 02:52:57 -0500291 Continue For Loop If '${led_value}' == 'None'
George Keishing52eb7c22022-03-11 10:58:53 -0600292 Should Be True '${led_value}' == '${expected_state}'
293 END
nagarjunb2298450742022-04-19 12:00:02 +0530294
295
296Verify Channel Auth Capabilities
297 [Documentation] Verify authentication capabilities for given channel and privilege.
298 [Arguments] ${channel} ${privilege_level}
299
300 # Description of argument(s):
301 # channel Interface channel number.
George Keishing13b7afd2022-05-23 07:36:16 -0500302 # privilege_level User Privilege level (e.g. 4-Administator, 3-Operator, 2-Readonly).
nagarjunb2298450742022-04-19 12:00:02 +0530303
304 # Python module: get_channel_auth_capabilities(channel_number, privilege_level)
305 ${channel_auth_cap}= Get Channel Auth Capabilities ${channel} ${privilege_level}
306 Rprint Vars channel_auth_cap
307
308 Valid Value channel_auth_cap['channel_number'] ['${channel}']
309 Valid Value channel_auth_cap['kg_status'] ['default (all zeroes)']
310 Valid Value channel_auth_cap['per_message_authentication'] ['enabled']
311 Valid Value channel_auth_cap['user_level_authentication'] ['enabled']
312 Valid Value channel_auth_cap['non-null_user_names_exist'] ['yes']
313 Valid Value channel_auth_cap['null_user_names_exist'] ['no']
314 Valid Value channel_auth_cap['anonymous_login_enabled'] ['no']
315 Valid Value channel_auth_cap['channel_supports_ipmi_v1.5'] ['no']
316 Valid Value channel_auth_cap['channel_supports_ipmi_v2.0'] ['yes']
317
318
George Keishing13b7afd2022-05-23 07:36:16 -0500319Verify Channel Auth Capabilities For Invalid Channel
nagarjunb2298450742022-04-19 12:00:02 +0530320 [Documentation] Verify authentication capabilities of invalid channels.
321 [Arguments] ${channel}
322
323 # Description of argument(s):
324 # channel Interface channel number.
325
326 ${channel_in_hex}= Convert To Hex ${channel} prefix=0x
327 ${cmd}= Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${channel_in_hex} 0x04
328
329 Verify Invalid IPMI Command ${cmd} 0xcc
330
331
332Verify Channel Auth Command For Invalid Data Length
333 [Documentation] Verify channel authentication command for invalid data length.
334 [Arguments] ${byte_length}
335
336 # Description of argument(s):
337 # byte_length high or low.
338 # e.g. high - add extra byte to request data like "0x06 0x38 0x01 0x04 0x01".
339 # low - reduce bytes in actual request data like "0x06 0x38".
340
341 ${req_cmd}= Run Keyword If '${byte_length}' == 'low'
342 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER}
343 ... ELSE
344 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} 0x04 0x01
345
346 Verify Invalid IPMI Command ${req_cmd} 0xc7