blob: b53005a1daeb0b6331ae45ff10f9f52d9768eb75 [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
Nagarjun Bbb3365c2023-05-25 14:40:57 +0530179 0x01
Tony Lee94f1a6c2020-03-25 10:37:46 +0800180 0x05
181 0x06
182 0x07
183 0x0F
184
185
George Keishingb98036a2022-01-31 12:39:47 -0600186Verify Close Session Via IPMI
Tony Leed12b40d2020-03-19 10:45:21 +0800187 [Documentation] Verify close session via IPMI.
188 [Tags] Verify_Close_Session_Via_IPMI
189
190 # The "close session command" can be tested with any out-of-band IPMI command.
191 # When the session is about to close, it will execute the close session command at the end.
192
193 ${cmd}= Catenate mc info -vvv 2>&1 | grep "Closed Session"
194 ${cmd_output}= Run External IPMI Standard Command ${cmd}
195
196 Should Contain ${cmd_output} Closed Session
197
198
Ashwini Chandrappa4ec70852021-09-07 09:10:36 -0500199Verify Chassis Identify via IPMI
200 [Documentation] Set chassis identify using IPMI and verify.
201 [Tags] Verify_Chassis_Identify_via_IPMI
202 [Setup] Redfish.Login
203 [Teardown] Redfish.logout
204
205 # Set to default "chassis identify" and verify that LED blinks for 15s.
206 Run IPMI Standard Command chassis identify
207 Verify Identify LED State Via Redfish Lit
208
209 Sleep 18s
210 Verify Identify LED State Via Redfish Off
211
212 # Set "chassis identify" to 10s and verify that the LED blinks for 10s.
213 Run IPMI Standard Command chassis identify 10
214 Verify Identify LED State Via Redfish Lit
215
216 Sleep 12s
217 Verify Identify LED State Via Redfish Off
218
219
220Verify Chassis Identify Off And Force Identify On via IPMI
221 [Documentation] Set chassis identify to "off" and "force" using IPMI and verify.
222 [Tags] Verify_Chassis_Identify_Off_And_Force_Identify_On_via_IPMI
223 [Setup] Redfish.Login
224 [Teardown] Redfish.logout
225
226 # Set the LED to "Force Identify On".
227 Run IPMI Standard Command chassis identify force
228 Verify Identify LED State Via Redfish Lit
229
230 # Set "chassis identify" to 0 and verify that the LED turns off.
231 Run IPMI Standard Command chassis identify 0
232 Verify Identify LED State Via Redfish Off
233
234
Tony Lee2d071822020-02-19 16:37:58 +0800235*** Keywords ***
236
nagarjunb2298450742022-04-19 12:00:02 +0530237IPMI General Test Suite Setup
238 [Documentation] Get active and inactive/invalid channels from channel_config.json file
239 ... in list type and set it as suite variable.
240
241 # Get active channel list and set as suite variable.
242 @{active_channel_list}= Get Active Ethernet Channel List
243 Set Suite Variable @{active_channel_list}
244
245 # Get Inactive/Invalid channel list and set as suite variable.
246 @{inactive_channel_list}= Get Invalid Channel Number List
247 Set Suite Variable @{inactive_channel_list}
248
249
Tony Lee2d071822020-02-19 16:37:58 +0800250Set Session Privilege Level And Verify
251 [Documentation] Set session privilege with given privilege level and verify the response with
252 ... expected level.
253 [Arguments] ${privilege_level} ${expected_level}
254 # Description of argument(s):
255 # privilege_level Requested Privilege Level.
George Keishing33be3592022-03-08 08:52:25 -0600256 # expected_level New Privilege Level (or present level if ‘return present privilege level’
257 # was selected).
Tony Lee2d071822020-02-19 16:37:58 +0800258
Tony Leeb49853c2020-06-03 15:27:56 +0800259 ${resp}= Run External IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800260 ... 0x06 0x3b ${privilege_level}
Tony Lee2d071822020-02-19 16:37:58 +0800261 Should Contain ${resp} ${expected_level}
Tony Lee94f1a6c2020-03-25 10:37:46 +0800262
263
264Set Invalid Session Privilege Level And Verify
265 [Documentation] Set invalid session privilege level and verify the response.
266 [Arguments] ${privilege_level}
267 # Description of argument(s):
268 # privilege_level Requested Privilege Level.
269
270 # Verify requested level exceeds Channel and/or User Privilege Limit.
Tony Leeb49853c2020-06-03 15:27:56 +0800271 ${msg}= Run Keyword And Expect Error * Run External IPMI Raw Command
Tony Lee94f1a6c2020-03-25 10:37:46 +0800272 ... 0x06 0x3b ${privilege_level}
Nagarjun Bbb3365c2023-05-25 14:40:57 +0530273
274 # 0x05 is OEM proprietary level.
275 IF ${privilege_level} == 0x05
276 Should Contain ${msg} Unknown rsp=0x81
277 ELSE
George Keishingc2b95042023-06-27 12:25:33 +0530278 # According to IPMI spec privilege level except 0x00-0x05, others are
279 # reserved. So if we try to set those privilege we will get rsp as
280 # 0xcc(Invalid data filed in request)
Nagarjun Bbb3365c2023-05-25 14:40:57 +0530281 Should Contain ${msg} Invalid data field in request rsp=0xcc
282 END
Ashwini Chandrappa4ec70852021-09-07 09:10:36 -0500283
284
285Verify Identify LED State Via Redfish
286 [Documentation] Verify that Redfish identify LED system with given state.
287 [Arguments] ${expected_state}
288 # Description of argument(s):
289 # expected_led_status Expected value of Identify LED.
290
George Keishingb0614552022-07-08 02:52:57 -0500291 # Get the following URI(s) and iterate to find the attribute IndicatorLED.
292 # Example:
293 # /redfish/v1/Systems/system
294 # /redfish/v1/Systems/hypervisor
295
George Keishing52eb7c22022-03-11 10:58:53 -0600296 # Python module: get_member_list(resource_path)
297 ${systems}= Redfish_Utils.Get Member List /redfish/v1/Systems
298 FOR ${system} IN @{systems}
299 ${led_value}= Redfish.Get Attribute ${system} IndicatorLED
George Keishingf6b4d532022-07-08 07:07:54 -0500300 # Get attribute return None if IndicatorLED does not exist in the URI.
George Keishingb0614552022-07-08 02:52:57 -0500301 Continue For Loop If '${led_value}' == 'None'
George Keishing52eb7c22022-03-11 10:58:53 -0600302 Should Be True '${led_value}' == '${expected_state}'
303 END
nagarjunb2298450742022-04-19 12:00:02 +0530304
305
306Verify Channel Auth Capabilities
307 [Documentation] Verify authentication capabilities for given channel and privilege.
308 [Arguments] ${channel} ${privilege_level}
309
310 # Description of argument(s):
311 # channel Interface channel number.
George Keishing13b7afd2022-05-23 07:36:16 -0500312 # privilege_level User Privilege level (e.g. 4-Administator, 3-Operator, 2-Readonly).
nagarjunb2298450742022-04-19 12:00:02 +0530313
314 # Python module: get_channel_auth_capabilities(channel_number, privilege_level)
315 ${channel_auth_cap}= Get Channel Auth Capabilities ${channel} ${privilege_level}
316 Rprint Vars channel_auth_cap
317
318 Valid Value channel_auth_cap['channel_number'] ['${channel}']
319 Valid Value channel_auth_cap['kg_status'] ['default (all zeroes)']
320 Valid Value channel_auth_cap['per_message_authentication'] ['enabled']
321 Valid Value channel_auth_cap['user_level_authentication'] ['enabled']
322 Valid Value channel_auth_cap['non-null_user_names_exist'] ['yes']
323 Valid Value channel_auth_cap['null_user_names_exist'] ['no']
324 Valid Value channel_auth_cap['anonymous_login_enabled'] ['no']
325 Valid Value channel_auth_cap['channel_supports_ipmi_v1.5'] ['no']
326 Valid Value channel_auth_cap['channel_supports_ipmi_v2.0'] ['yes']
327
328
George Keishing13b7afd2022-05-23 07:36:16 -0500329Verify Channel Auth Capabilities For Invalid Channel
nagarjunb2298450742022-04-19 12:00:02 +0530330 [Documentation] Verify authentication capabilities of invalid channels.
331 [Arguments] ${channel}
332
333 # Description of argument(s):
334 # channel Interface channel number.
335
336 ${channel_in_hex}= Convert To Hex ${channel} prefix=0x
337 ${cmd}= Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${channel_in_hex} 0x04
338
339 Verify Invalid IPMI Command ${cmd} 0xcc
340
341
342Verify Channel Auth Command For Invalid Data Length
343 [Documentation] Verify channel authentication command for invalid data length.
344 [Arguments] ${byte_length}
345
346 # Description of argument(s):
347 # byte_length high or low.
348 # e.g. high - add extra byte to request data like "0x06 0x38 0x01 0x04 0x01".
349 # low - reduce bytes in actual request data like "0x06 0x38".
350
351 ${req_cmd}= Run Keyword If '${byte_length}' == 'low'
352 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER}
353 ... ELSE
354 ... Catenate ${IPMI_RAW_CMD['Get Channel Auth Cap']['get'][0]} ${CHANNEL_NUMBER} 0x04 0x01
355
356 Verify Invalid IPMI Command ${req_cmd} 0xc7