blob: 9d7faa7465503e68aa8af3e07cbb0e5815232350 [file] [log] [blame]
Tony Lee6c998f72020-03-09 18:28:35 +08001*** Settings ***
2Documentation This suite tests IPMI Payload in OpenBMC.
3
4Resource ../lib/ipmi_client.robot
5Resource ../lib/openbmc_ffdc.robot
nagarjunb22a2255de2022-05-25 19:15:10 +05306Resource ../lib/bmc_network_utils.robot
Tony Lee6c998f72020-03-09 18:28:35 +08007Variables ../data/ipmi_raw_cmd_table.py
nagarjunb22a2255de2022-05-25 19:15:10 +05308Library ../lib/ipmi_utils.py
9
10
nagarjunb765535a2022-06-01 12:59:00 +053011Suite Setup IPMI Payload Setup Execution
nagarjunb22a2255de2022-05-25 19:15:10 +053012Test Teardown FFDC On Test Case Fail
13
14
15*** Variables ***
16${user_priv} 2
17${operator_priv} 3
18${admin_level_priv} 4
19${no_access_priv} 15
20${new_user_passwd} 0penBmc1
Tony Lee6c998f72020-03-09 18:28:35 +080021
22
23*** Test Cases ***
24
25Test Get Payload Activation Status
26 [Documentation] Test get payload activation status.
27 [Tags] Test_Get_Payload_Activation_Status
28
29 # SOL is the payload currently supported for payload status.
30 # Currently supports only one SOL session.
31 # Response Data
32 # 01 instance 1 is activated.
33 # 00 instance 1 is deactivated.
34 ${payload_status}= Get Payload Activation Status
35 Should Contain Any ${payload_status} 01 00
36
37
38Test Activate Payload
39 [Documentation] Test activate payload via IPMI raw command.
40 [Tags] Test_Activate_Payload
41
42 ${payload_status}= Get Payload Activation Status
43 Run Keyword If '${payload_status}' == '01' Deactivate Payload
44
45 Activate Payload
46
47 ${payload_status}= Get Payload Activation Status
48 Should Contain ${payload_status} 01
49
50
51Test Deactivate Payload
52 [Documentation] Test deactivate payload via IPMI raw command.
53 [Tags] Test_Deactivate_Payload
54
55 ${payload_status}= Get Payload Activation Status
56 Run Keyword If '${payload_status}' == '00' Activate Payload
57
58 Deactivate Payload
59
60 ${payload_status}= Get Payload Activation Status
61 Should Contain ${payload_status} 00
62
63
64Test Get Payload Instance Info
65 [Documentation] Test Get Payload Instance via IPMI raw command.
66 [Tags] Test_Get_Payload_Instance_Info
67
68 ${payload_status}= Get Payload Activation Status
69 Run keyword If '${payload_status}' == '01'
70 ... Deactivate Payload
71
72 # First four bytes should be 00 if given instance is not activated.
73 ${resp}= Run IPMI Command
74 ... ${IPMI_RAW_CMD['Payload']['Get_Payload_Instance_Info'][0]}
75 Should Contain ${resp} ${IPMI_RAW_CMD['Payload']['Get_Payload_Instance_Info'][1]}
76 Activate Payload
77
78 # First four bytes should be session ID when payload is activated.
79 ${resp}= Run IPMI Command
80 ... ${IPMI_RAW_CMD['Payload']['Get_Payload_Instance_Info'][0]}
81 Should Not Contain ${resp} ${IPMI_RAW_CMD['Payload']['Get_Payload_Instance_Info'][1]}
82
83
nagarjunb22a2255de2022-05-25 19:15:10 +053084Verify Set User Access Payload For Standard Payload SOL
85 [Documentation] Disable standard payload for SOL and verify IPMI sol activate command does not work.
86 [Tags] Verify_Set_User_Access_Payload_For_Standard_Payload_SOL
87 [Teardown] Run Keywords Set User Access Payload For Given User ${user_id_in_hex}
88 ... AND Delete Created User ${userid}
89 ... AND FFDC On Test Case Fail
90
91 ${userid} ${username}= Create And Verify IPMI User
92 ${user_id_in_hex}= Convert To Hex ${userid}
93 ${userid_in_hex_format}= Convert To Hex ${userid} prefix=0x length=2
94
95 # Get default user access payload values.
96 ${default_user_access_payload}= Get User Access Payload For Given Channel ${userid_in_hex_format}
97
98 # Disable Standard payload 1 via set user access payload command.
99 Set User Access Payload For Given User ${user_id_in_hex} Disable
100
101 Verify Standard Payload ${userid_in_hex_format} ${username} Disabled
102
103
104Verify Set User Access Payload For Operator Privileged User
105 [Documentation] Try to set user access payload using operator privileged user and expect error.
106 [Tags] Verify_Set_User_Access_Payload_For_Operator_Privileged_User
107 [Teardown] Run Keywords Delete Created User ${userid} AND FFDC On Test Case Fail
108
109 ${userid} ${username}= Create And Verify IPMI User ${operator_priv} Operator
110
111 ${payload_raw_cmd}= Catenate ${IPMI_RAW_CMD['Payload']['Set_User_Access_Payload'][0]}
112 ... ${CHANNEL_NUMBER} 0x${user_id} 0x02 0x00 0x00 0x00
113
114 Run Keyword and Expect Error *Unable to establish IPMI*
115 ... Run External IPMI Raw Command ${payload_raw_cmd} U=${userid} P=${new_user_passwd} L=Operator
116
117
nagarjunb765535a2022-06-01 12:59:00 +0530118Verify Set User Access Payload For Invalid User
119 [Documentation] Verify set user access payload IPMI command for invalid user.
120 [Tags] Verify_Set_User_Access_Payload_For_Invalid_User
121
122 # Get Random invalid user ID.
123 ${invalid_userid}= Get Invalid User ID
124
125 ${raw_cmd}= Catenate ${IPMI_RAW_CMD['Payload']['Set_User_Access_Payload'][0]}
126 ... ${CHANNEL_NUMBER} ${invalid_userid} 0x02 0x00 0x00 0x00
127
128 Verify Invalid IPMI Command ${raw_cmd} 0xcc
129
130
131Verify Set User Access Payload For Invalid Channel Number
132 [Documentation] Verify set user access payload IPMI command for invalid channel number.
133 [Tags] Verify_Set_User_Access_Payload_for_Invalid_Channel_Number
134 [Teardown] Delete Created User ${userid}
135
136 ${userid} ${username}= Create And Verify IPMI User
137
138 FOR ${channel} IN @{inactive_channel_list}
139
140 Verify Set User Access Payload For Invalid Channel ${userid} ${channel}
141 END
142
143
144Verify Get User Access Payload For User Access privilege
145 [Documentation] Verify get user access payload for user access(Read-only) privileged user.
146 [Tags] Verify_Get_User_Access_Payload_For_User_Access_privilege
147 [Teardown] Delete Created User ${userid}
148
149 ${userid} ${username}= Create And Verify IPMI User ${user_priv} User
150
151 ${raw_command}= Catenate ${IPMI_RAW_CMD['Payload']['Get_User_Access_Payload'][0]}
152 ... ${CHANNEL_NUMBER} ${user_id}
153
154 Run Keyword and Expect Error *Unable to establish IPMI*
155 ... Run External IPMI Raw Command ${raw_command} U=${userid} P=${new_user_passwd} L=User
156
157
158Verify Get User Access Payload For Invalid User
159 [Documentation] Verify get user access payload IPMI command for invalid user.
160 [Tags] Verify_Get_User_Access_Payload_For_Invalid_User
161
162 ${invalid_userid}= Get Invalid User ID
163
164 Verify Get User Access Payload For Invalid User Or Channel ${invalid_userid} ${CHANNEL_NUMBER}
165
166
167Verify Get User Access Payload For Invalid Channel Number
168 [Documentation] Verify get user access payload IPMI command for invalid channel number.
169 [Tags] Verify_Get_User_Access_Payload_For_Invalid_Channel_Number
170 [Teardown] Delete Created User ${userid}
171
172 ${userid} ${username}= Create And Verify IPMI User
173 #${invalid_channels}= Get Invalid Channel Number
174
175 FOR ${channel} IN @{inactive_channel_list}
176 Verify Get User Access Payload For Invalid User Or Channel ${userid} ${channel}
177 END
178
179
Tony Lee6c998f72020-03-09 18:28:35 +0800180*** Keywords ***
181
nagarjunb765535a2022-06-01 12:59:00 +0530182IPMI Payload Setup Execution
183 [Documentation] Get active and inactive/invalid channels from channel_config.json file
184 ... in list type and set it as suite variable.
185
186 # Get active channel list and set as a suite variable.
187 @{active_channel_list}= Get Active Ethernet Channel List current_channel=1
188 Set Suite Variable @{active_channel_list}
189
190 # Get Inactive/Invalid channel list and set as a suite variable.
191 @{inactive_channel_list}= Get Invalid Channel Number List
192 Set Suite Variable @{inactive_channel_list}
193
194
Tony Lee6c998f72020-03-09 18:28:35 +0800195Get Payload Activation Status
196 [Documentation] Get payload activation status.
197
198 ${resp}= Run IPMI Command
199 ... ${IPMI_RAW_CMD['Payload']['Get_Payload_Activation_Status'][0]}
200
201 @{resp}= Split String ${resp}
202
203 ${payload_status}= Set Variable ${resp[1]}
204
205 [return] ${payload_status}
206
207
208Activate Payload
209 [Documentation] Activate Payload.
210
211 ${resp}= Run IPMI Command
212 ... ${IPMI_RAW_CMD['Payload']['Activate_Payload'][0]}
213 Should Contain ${resp} ${IPMI_RAW_CMD['Payload']['Activate_Payload'][1]}
214
215
216Deactivate Payload
217 [Documentation] Deactivate Payload.
218
219 ${resp}= Run IPMI Command
220 ... ${IPMI_RAW_CMD['Payload']['Deactivate_Payload'][0]}
221 Should Be Empty ${resp}
nagarjunb22a2255de2022-05-25 19:15:10 +0530222
223
224Get User Access Payload For Given Channel
225 [Documentation] Execute get user access payload IPMI command for given channel
226 ... and return response.
227 [Arguments] ${user_id} ${channel_number}=${CHANNEL_NUMBER}
228
229 # Description of argument(s):
230 # user_id The user ID (e.g. "1", "2", etc.).
231 # channel_number Input channel number(e.g. "1", "2").
232
233 ${raw_command}= Catenate ${IPMI_RAW_CMD['Payload']['Get_User_Access_Payload'][0]}
234 ... ${channel_number} ${user_id}
235 ${resp}= Run External IPMI Raw Command ${raw_command}
236 [Return] ${resp}
237
238
239Create And Verify IPMI User
240 [Documentation] Create IPMI User, set password, set privilege and enable the user.
241 [Arguments] ${user_privilege_level}=${admin_level_priv} ${privilege}=Administrator
242
243 # Description of argument(s):
244 # user_privilege_level User Privilege level in integer.
245 # (e.g. 4-Administrator, 3-Operator, 2-Readonly).
246 # privilege User Privilege in Wordings.
247 # (e.g. "Administrator", "Operator", "ReadOnly").
248
249 ${random_user_id} ${random_user_name}= Create Random IPMI User
250 Set User Password ${random_user_id} ${new_user_passwd} 16
251 Set And Verify User Access Privilege ${random_user_id} ${user_privilege_level}
252 Verify Username And Password ${random_user_name} ${new_user_passwd} L=${privilege}
253
254 [Return] ${random_user_id} ${random_user_name}
255
256
257Set User Password
258 [Documentation] Set user password for given user ID.
259 [Arguments] ${user_id} ${password} ${password_option}
260
261 # Description of argument(s):
262 # user_id The user ID (e.g. "1", "2", etc.).
263 # password The user password (e.g. "0penBmc", "0penBmc1", etc.).
264 # password_option Password length option to be given in IPMI command (e.g. "16", "20").
265
266 Run IPMI Standard Command user set password ${user_id} ${password} ${password_option}
267
268Set And Verify User Access Privilege
269 [Documentation] Set User Access Privilege, enable and verify user for given user ID.
270 [Arguments] ${user_id} ${privilege_level}
271
272 # Description of argument(s):
273 # user_id The user ID (e.g. "1", "2", etc.).
274 # privilege_level User Privilege level in hex value.
275 # (e.g. 0x04-Administrator, 0x03-Operator, 0x02-Readonly).
276
277 Set Channel Access ${_user_id} ipmi=on privilege=${privilege_level}
278
279 # Delay added for user privilege to get set.
280 Sleep 5s
281
282 Enable IPMI User And Verify ${user_id}
283
284
285Verify Username And Password
286 [Documentation] Verify that newly created user is able to run IPMI command
287 ... with given username and password.
288 [Arguments] ${username} ${password} &{options}
289
290 # Description of argument(s):
291 # username The user name (e.g. "root", "robert", etc.).
292 # password The user password (e.g. "0penBmc", "0penBmc1", etc.).
293 # options Additional ipmitool command options (e.g "-L=Operator","-C=3").
294
295 Wait Until Keyword Succeeds 15 sec 5 sec Run External IPMI Raw Command
296 ... ${IPMI_RAW_CMD['Device GUID']['Get'][0]} U=${username} P=${password} &{options}
297
298
299Verify Standard Payload
300 [Documentation] Verify standard payload is disabled or enabled.
301 [Arguments] ${user_id} ${user_name} ${standard_payload}=Enabled
302
303 # Description of argument(s):
304 # user_id The user ID (e.g. "1", "2", etc.).
305 # username The user name (e.g. "root", "robert", etc.).
306 # standard_payload Enabled or Disabled.
307
308 # Verify the standard payload 1 (sol) is disabled.
309 ${get_user_access_payload}= Get User Access Payload For Given Channel ${user_id}
310 @{get_user_access_cmd_resp_list}= Split String ${get_user_access_payload}
311
312 Run Keyword If '${standard_payload}' == 'Disabled'
313 ... Should Be Equal ${get_user_access_cmd_resp_list}[0] 00
314 ... ELSE
315 ... Should Be Equal ${get_user_access_cmd_resp_list}[0] 02
316
317 Run Keyword If '${standard_payload}' == 'Disabled'
318 ... Verify Sol Activate Disabled ${user_name}
319
320
321Verify Sol Activate Disabled
322 [Documentation] Verify SOL activate IPMI command is not working.
323 [Arguments] ${user_name}
324
325 # Description of argument(s):
326 # username The user name (e.g. "root", "robert", etc.).
327
328 ${resp}= Run External IPMI Standard Command
329 ... sol activate expected_rc=${1} U=${username} P=${new_user_passwd}
330
331 Should Contain ${resp} SOL payload disabled
332
333
334Set User Access Payload For Given User
335 [Documentation] Set the user access payload on given user, channel and return response.
336 [Arguments] ${user_id} ${operation_mode}=Enable ${oempayload_value}=0x00 ${standard_payload_value}=0x02
337
338 # Description of argument(s):
339 # user_id The user ID (e.g. "1", "2", etc.).
340 # operation_mode Enable or Disable payload type.
341 # oempayload_value Oempayload in hex (e.g. "0x00", "0x01", "0x02", "0x04" etc).
342 # standard_payload_value Standard payload type IPMI or SOL.
343 # (e.g. 0x01 - IPMI, 0x02- SOL).
344
345 # If operation mode is disable 2nd byte of raw command is 4${user_id}.
346 # (e.g) 2n byte will be 0x4a (if user_id is a).
347 # If operation mode is enable 2nd byte of raw command is 0${user_id}.
348 # (e.g.) 3rd byte will be 0x0a (if user_id is a).
349 # 0x02- standard payload for SOL, 0x01 standard payload for IPMI.
350 # 3rd byte represent standard payload enables 1 (SOL).
351 # 4th to 6th byte represent standard payload enables 2 and OEM payload 1 & 2 respectively.
352
353 ${operation_mode_value}= Set Variable If '${operation_mode}' == 'Enable'
354 ... 0 4
355 ${set_cmd}= Catenate ${IPMI_RAW_CMD['Payload']['Set_User_Access_Payload'][0]}
356 ... ${CHANNEL_NUMBER} 0x${operation_mode_value}${user_id} ${standard_payload_value} 0x00 ${oempayload_value} 0x00
357
358 ${resp}= Run IPMI Command ${set_cmd}
359
nagarjunb765535a2022-06-01 12:59:00 +0530360 [Return] ${resp}
361
362
363Get Invalid User ID
364 [Documentation] Get random invalid user ID using "channel getaccess" IPMI standard command.
365
366 # Python module: get_user_info(userid, channel_number=1)
367 ${user_info}= Get User Info ${EMPTY}
368 ${user_info}= Filter Struct ${user_info} [('user_name', None)] invert=1
369 ${empty_user_info}= Filter Struct ${user_info} [('user_name', '')]
370 @{invalid_userid_list}= Create List
371 FOR ${user_record} IN @{empty_user_info}
372 Append To List ${invalid_userid_list} ${user_record['user_id']}
373 END
374 ${invalid_user_id}= Evaluate random.choice(${invalid_userid_list}) random
375
376 [Return] ${invalid_user_id}
377
378
379Verify Set User Access Payload For Invalid Channel
380 [Documentation] Verify set user payload command for invalid channels.
381 [Arguments] ${user_id} ${channel_number}
382
383 # Description of argument(s):
384 # user_id The user ID (e.g. "1", "2", etc.).
385 # channel_number Input channel number.
386
387 ${channel_number}= Convert To Hex ${channel_number} prefix=0x
388 ${user_id}= Convert To Hex ${user_id} prefix=0x
389 ${raw_cmd}= Catenate ${IPMI_RAW_CMD['Payload']['Set_User_Access_Payload'][0]}
390 ... ${channel_number} ${user_id} 0x02 0x00 0x00 0x00
391
392 Verify Invalid IPMI Command ${raw_cmd} 0xcc
393
394
395Verify Get User Access Payload For Invalid User Or Channel
396 [Documentation] Verify get user payload command for invalid userid or invalid channels.
397 [Arguments] ${user_id} ${channel_number}
398
399 # Description of argument(s):
400 # user_id The user ID (e.g. "1", "2", etc.).
401 # channel_number Input channel number.
402
403 ${channel_number}= Convert To Hex ${channel_number} prefix=0x
404 ${user_id}= Convert To Hex ${user_id} prefix=0x
405 ${raw_cmd}= Catenate ${IPMI_RAW_CMD['Payload']['Get_User_Access_Payload'][0]}
406 ... ${channel_number} ${user_id}
407
408 Verify Invalid IPMI Command ${raw_cmd} 0xcc