1*** Settings ***
2Documentation       Test suite for OpenBMC IPMI user management.
3
4Resource            ../lib/ipmi_client.robot
5Resource            ../lib/openbmc_ffdc.robot
6Library             ../lib/ipmi_utils.py
7Test Setup          Printn
8
9Test Teardown       Test Teardown Execution
10
11*** Variables ***
12
13${invalid_username}     user%
14${invalid_password}     abc123
15${root_userid}          1
16${operator_level_priv}  0x3
17${user_priv}            2
18${operator_priv}        3
19${admin_level_priv}     4
20${no_access_priv}       15
21${valid_password}       0penBmc1
22${max_password_length}  20
23${ipmi_setaccess_cmd}   channel setaccess
24&{password_values}      16=0penBmc10penBmc2  17=0penBmc10penBmc2B
25              ...       20=0penBmc10penBmc2Bmc3  21=0penBmc10penBmc2Bmc34
26              ...       7=0penBmc  8=0penBmc0
27
28# User defined count.
29${USER_LOOP_COUNT}      20
30
31
32*** Test Cases ***
33
34Verify IPMI User Summary
35    [Documentation]  Verify IPMI maximum supported IPMI user ID and
36    ...  enabled user form user summary
37    [Tags]  Verify_IPMI_User_Summary
38    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
39    ...  Delete Created User  ${random_userid}
40    # Delete all non-root IPMI (i.e. except userid 1)
41    Delete All Non Root IPMI User
42
43    ${random_userid}  ${random_username}=  Create Random IPMI User
44    Set Test Variable  ${random_userid}
45    Run IPMI Standard Command  user enable ${random_userid}
46
47    # Verify maximum user count IPMI local user can have. Also verify
48    # currently enabled users.
49    ${resp}=  Wait Until Keyword Succeeds  15 sec  5 sec  Run IPMI Standard Command
50    ...  user summary ${CHANNEL_NUMBER}
51    ${enabled_user_count}=
52    ...  Get Lines Containing String  ${resp}  Enabled User Count
53    ${maximum_ids}=  Get Lines Containing String  ${resp}  Maximum IDs
54    Should Contain  ${enabled_user_count}  2
55    Should Contain  ${maximum_ids}  15
56
57
58Verify IPMI User List
59    [Documentation]  Verify user list via IPMI.
60    [Tags]  Verify_IPMI_User_List
61    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
62    ...  Delete Created User  ${random_userid}
63
64    ${random_userid}  ${random_username}=  Create Random IPMI User
65    Set Test Variable  ${random_userid}
66
67    Run IPMI Standard Command
68    ...  user set password ${random_userid} ${valid_password}
69    Run IPMI Standard Command  user enable ${random_userid}
70    # Delay added for IPMI user to get enabled.
71    Sleep  5s
72    # Set admin privilege and enable IPMI messaging for newly created user.
73    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
74
75    ${users_access}=  Get User Access Ipmi  ${CHANNEL_NUMBER}
76    Rprint Vars  users_access
77
78    ${index}=  Evaluate  ${random_userid} - 1
79    # Verify the user access of created user.
80    Valid Value  users_access[${index}]['id']  ['${random_userid}']
81    Valid Value  users_access[${index}]['name']  ['${random_username}']
82    Valid Value  users_access[${index}]['callin']  ['true']
83    Valid Value  users_access[${index}]['link']  ['false']
84    Valid Value  users_access[${index}]['auth']  ['true']
85    Valid Value  users_access[${index}]['ipmi']  ['ADMINISTRATOR']
86
87
88Verify IPMI User Creation With Valid Name And ID
89    [Documentation]  Create user via IPMI and verify.
90    [Tags]  Test_IPMI_User_Creation_With_Valid_Name_And_ID
91    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
92    ...  Delete Created User  ${random_userid}
93
94    ${random_userid}  ${random_username}=  Create Random IPMI User
95    Set Test Variable  ${random_userid}
96
97
98Verify IPMI User Creation With Invalid Name
99    [Documentation]  Verify error while creating IPMI user with invalid
100    ...  name(e.g. user name with special characters).
101    [Tags]  Verify_IPMI_User_Creation_With_Invalid_Name
102
103    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
104    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
105    ...  user set name ${random_userid} ${invalid_username}
106    Should Contain  ${msg}  Invalid data
107
108
109Verify IPMI User Creation With Invalid ID
110    [Documentation]  Verify error while creating IPMI user with invalid
111    ...  ID(i.e. any number greater than 15 or 0).
112    [Tags]  Verify_IPMI_User_Creation_With_Invalid_ID
113
114    @{id_list}=  Create List
115    ${random_invalid_id}=  Evaluate  random.randint(16, 1000)  modules=random
116    Append To List  ${id_list}  ${random_invalid_id}
117    Append To List  ${id_list}  0
118
119    FOR  ${id}  IN  @{id_list}
120      ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
121      ...  user set name ${id} newuser
122      Should Contain Any  ${msg}  User ID is limited to range  Parameter out of range
123    END
124
125Verify Setting IPMI User With Invalid Password
126    [Documentation]  Verify error while setting IPMI user with invalid
127    ...  password.
128    [Tags]  Verify_Setting_IPMI_User_With_Invalid_Password
129    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
130    ...  Delete Created User  ${random_userid}
131
132    ${random_userid}  ${random_username}=  Create Random IPMI User
133    Set Test Variable  ${random_userid}
134
135    # Set invalid password for newly created user.
136    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
137    ...  user set password ${random_userid} ${invalid_password}
138
139    # Delay added for user password to get set.
140    Sleep  5s
141
142    Should Contain  ${msg}  Set User Password command failed
143
144Verify Setting IPMI Root User With New Name
145    [Documentation]  Verify error while setting IPMI root user with new
146    ...  name.
147    [Tags]  Verify_Setting_IPMI_Root_User_With_New_Name
148
149    # Set invalid password for newly created user.
150    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
151    ...  user set name ${root_userid} abcd
152
153    Should Contain  ${msg}  Set User Name command failed
154
155
156Verify IPMI User Password Via Test Command
157    [Documentation]  Verify IPMI user password using test command.
158    [Tags]  Verify_IPMI_User_Password_Via_Test_Command
159    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
160    ...  Delete Created User  ${random_userid}
161
162    ${random_userid}  ${random_username}=  Create Random IPMI User
163    Set Test Variable  ${random_userid}
164
165    # Set valid password for newly created user.
166    Run IPMI Standard Command
167    ...  user set password ${random_userid} ${valid_password}
168
169    # Verify newly set password using test command.
170    ${msg}=  Run IPMI Standard Command
171    ...  user test ${random_userid} ${max_password_length} ${valid_password}
172
173    Should Contain  ${msg}  Success
174
175
176Verify Setting Valid Password For IPMI User
177    [Documentation]  Set valid password for IPMI user and verify.
178    [Tags]  Verify_Setting_Valid_Password_For_IPMI_User
179    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
180    ...  Delete Created User  ${random_userid}
181
182    ${random_userid}  ${random_username}=  Create Random IPMI User
183    Set Test Variable  ${random_userid}
184
185    # Set valid password for newly created user.
186    Run IPMI Standard Command
187    ...  user set password ${random_userid} ${valid_password}
188
189    Run IPMI Standard Command  user enable ${random_userid}
190
191    # Delay added for IPMI user to get enable
192    Sleep  5s
193
194    # Set admin privilege and enable IPMI messaging for newly created user
195    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
196
197    Verify IPMI Username And Password  ${random_username}  ${valid_password}
198
199
200Verify IPMI User Creation With Same Name
201    [Documentation]  Verify error while creating two IPMI user with same name.
202    [Tags]  Verify_IPMI_User_Creation_With_Same_Name
203    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
204    ...  Delete Created User  2
205
206    ${random_username}=  Generate Random String  8  [LETTERS]
207    IPMI Create User  2  ${random_username}
208
209    # Set same username for another IPMI user.
210    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
211    ...  user set name 3 ${random_username}
212    Should Contain  ${msg}  Invalid data field in request
213
214
215Verify Setting IPMI User With Null Password
216    [Documentation]  Verify error while setting IPMI user with null
217    ...  password.
218    [Tags]  Verify_Setting_IPMI_User_With_Null_Password
219    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
220    ...  Delete Created User  ${random_userid}
221
222    ${random_userid}  ${random_username}=  Create Random IPMI User
223    Set Test Variable  ${random_userid}
224
225    # Set null password for newly created user.
226    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
227    ...  user set password ${random_userid} ""
228
229    Should Contain  ${msg}  Invalid data field in request
230
231
232Verify IPMI User Deletion
233    [Documentation]  Delete user via IPMI and verify.
234    [Tags]  Verify_IPMI_User_Deletion
235    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
236    ...  Delete Created User  ${random_userid}
237
238    ${random_userid}  ${random_username}=  Create Random IPMI User
239    Set Test Variable  ${random_userid}
240    # Delete IPMI User and verify
241    Run IPMI Standard Command  user set name ${random_userid} ""
242    ${user_info}=  Get User Info  ${random_userid}
243    Should Be Equal  ${user_info['user_name']}  ${EMPTY}
244
245
246Test IPMI User Privilege Level
247    [Documentation]  Verify IPMI user with user privilege can only run user level commands.
248    [Tags]  Test_IPMI_User_Privilege_Level
249    [Template]  Test IPMI User Privilege
250    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
251    ...  Delete Created User  ${random_userid}
252
253    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
254    ${user_priv}         Passed           Failed               Failed
255
256
257Test IPMI Operator Privilege Level
258    [Documentation]  Verify IPMI user with operator privilege can only run user and operator levels commands.
259    ...  level is set to operator.
260    [Tags]  Test_IPMI_Operator_Privilege_Level
261    [Template]  Test IPMI User Privilege
262    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
263    ...  Delete Created User  ${random_userid}
264
265    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
266    ${operator_priv}     Passed           Passed               Failed
267
268
269Test IPMI Administrator Privilege Level
270    [Documentation]  Verify IPMI user with admin privilege can run all levels command.
271    [Tags]  Test_IPMI_Administrator_Privilege_Level
272    [Template]  Test IPMI User Privilege
273    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
274    ...  Delete Created User  ${random_userid}
275
276    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
277    ${admin_level_priv}  Passed           Passed               Passed
278
279
280Test IPMI No Access Privilege Level
281    [Documentation]  Verify IPMI user with no access privilege can not run only any level command.
282    [Tags]  Test_IPMI_No_Access_Privilege_Level
283    [Template]  Test IPMI User Privilege
284    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
285    ...  Delete Created User  ${random_userid}
286
287    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
288    ${no_access_priv}    Failed           Failed               Failed
289
290
291Enable IPMI User And Verify
292    [Documentation]  Enable IPMI user and verify that the user is able
293    ...  to run IPMI command.
294    [Tags]  Enable_IPMI_User_And_Verify
295    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
296    ...  Delete Created User  ${random_userid}
297
298    ${random_userid}  ${random_username}=  Create Random IPMI User
299    Set Test Variable  ${random_userid}
300    Run IPMI Standard Command
301    ...  user set password ${random_userid} ${valid_password}
302
303    # Set admin privilege and enable IPMI messaging for newly created user.
304    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
305
306    # Delay added for user privilege to get set.
307    Sleep  5s
308
309    Enable IPMI User And Verify  ${random_userid}
310
311    # Verify that enabled IPMI  user is able to run IPMI command.
312    Verify IPMI Username And Password  ${random_username}  ${valid_password}
313
314
315Disable IPMI User And Verify
316    [Documentation]  Disable IPMI user and verify that that the user
317    ...  is unable to run IPMI command.
318    [Tags]  Disable_IPMI_User_And_Verify
319    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
320    ...  Delete Created User  ${random_userid}
321
322    ${random_userid}  ${random_username}=  Create Random IPMI User
323    Set Test Variable  ${random_userid}
324    Run IPMI Standard Command
325    ...  user set password ${random_userid} ${valid_password}
326
327    # Set admin privilege and enable IPMI messaging for newly created user.
328    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
329
330    # Disable IPMI user and verify.
331    Run IPMI Standard Command  user disable ${random_userid}
332    ${user_info}=  Get User Info  ${random_userid}
333    Should Be Equal  ${user_info['enable_status']}  disabled
334
335    # Verify that disabled IPMI  user is unable to run IPMI command.
336    ${msg}=  Run Keyword And Expect Error  *  Verify IPMI Username And Password
337    ...  ${random_username}  ${valid_password}
338    Should Contain  ${msg}  Unable to establish IPMI
339
340
341Verify IPMI Root User Password Change
342    [Documentation]  Change IPMI root user password and verify that
343    ...  root user is able to run IPMI command.
344    [Tags]  Verify_IPMI_Root_User_Password_Change
345    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
346    ...  Wait Until Keyword Succeeds  15 sec  5 sec
347    ...  Set Default Password For IPMI Root User
348
349    # User input password should be minimum 8 characters long.
350    Valid Length  OPENBMC_PASSWORD  min_length=8
351    # Set new password for root user.
352    Run IPMI Standard Command
353    ...  user set password ${root_userid} ${valid_password}
354
355    # Delay added for user password to get set.
356    Sleep  5s
357
358    # Verify that root user is able to run IPMI command using new password.
359    Wait Until Keyword Succeeds  15 sec  5 sec  Verify IPMI Username And Password
360    ...  root  ${valid_password}
361
362
363Verify Administrator And No Access Privilege For Different Channels
364    [Documentation]  Set administrator and no access privilege for different channels and verify.
365    [Tags]  Verify_Administrator_And_No_Access_Privilege_For_Different_Channels
366    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
367    ...  Delete Created User  ${random_userid}
368
369    ${random_userid}  ${random_username}=  Create Random IPMI User
370    Set Test Variable  ${random_userid}
371    Run IPMI Standard Command
372    ...  user set password ${random_userid} ${valid_password}
373
374    # Set admin privilege for newly created user with channel 1.
375    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}  1
376
377    # Set no access privilege for newly created user with channel 2.
378    Set Channel Access  ${random_userid}  ipmi=on privilege=${no_access_priv}  2
379
380    Enable IPMI User And Verify  ${random_userid}
381
382    # Verify that user is able to run administrator level IPMI command with channel 1.
383    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator  1
384
385    # Verify that user is unable to run IPMI command with channel 2.
386    Run IPMI Standard Command  sel info 2  expected_rc=${1}  U=${random_username}  P=${valid_password}
387
388
389Verify Operator And User Privilege For Different Channels
390    [Documentation]  Set operator and user privilege for different channels and verify.
391    [Tags]  Verify_Operator_And_User_Privilege_For_Different_Channels
392    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
393    ...  Delete Created User  ${random_userid}
394
395    ${random_userid}  ${random_username}=  Create Random IPMI User
396    Set Test Variable  ${random_userid}
397    Run IPMI Standard Command
398    ...  user set password ${random_userid} ${valid_password}
399
400    # Set operator privilege for newly created user with channel 1.
401    Set Channel Access  ${random_userid}  ipmi=on privilege=${operator_priv}  1
402
403    # Set user privilege for newly created user with channel 2.
404    Set Channel Access  ${random_userid}  ipmi=on privilege=${user_priv}  2
405
406    Enable IPMI User And Verify  ${random_userid}
407
408    # Verify that user is able to run operator level IPMI command with channel 1.
409    Verify IPMI Command  ${random_username}  ${valid_password}  Operator  1
410
411    # Verify that user is able to run user level IPMI command with channel 2.
412    Verify IPMI Command  ${random_username}  ${valid_password}  User  2
413
414
415Verify Setting IPMI User With Max Password Length
416    [Documentation]  Verify IPMI user creation with password length of 20 characters.
417    [Tags]  Verify_Setting_IPMI_User_With_Max_Password_Length
418    [Template]  Set User Password And Verify
419
420    # password_length  password_option  expected_status
421    20                 20               ${True}
422
423
424Verify Setting IPMI User With Invalid Password Length
425    [Documentation]  Verify that IPMI user cannot be set with 21 character password using 16 char
426    ...  or 20 char password option.
427    [Tags]  Verify_Setting_IPMI_User_With_Invalid_Password_Length
428    [Template]  Set User Password And Verify
429
430    # password_length  password_option  expected_status
431    21                 16               ${False}
432    21                 20               ${False}
433
434
435Verify Setting IPMI User With 16 Character Password
436    [Documentation]  Verify that IPMI user can create a 16 character password using 16 char or 20
437    ...  char password option.
438    [Tags]  Verify_Setting_IPMI_User_With_16_Character_Password
439    [Template]  Set User Password And Verify
440
441    # password_length  password_option  expected_status
442    16                 16               ${True}
443    16                 20               ${True}
444
445
446Verify Default Selection Of 16 Character Password For IPMI User
447    [Documentation]  Verify that ipmitool by default opts for the 16 character option when given a
448    ...  password whose length is in between 17 and 20.
449    [Tags]  Verify_Default_Selection_Of_16_Character_Password_For_IPMI_User
450    [Template]  Set User Password And Verify
451
452    # password_length  password_option  expected_status
453    17                 16               ${True}
454    20                 16               ${True}
455
456
457Verify Minimum Password Length For IPMI User
458    [Documentation]  Verify minimum password length of 8 characters.
459    [Tags]  Verify_Minimum_Password_Length_For_IPMI_User
460    [Template]  Set User Password And Verify
461
462    # password_length  password_option  expected_status
463    7                  16               ${False}
464    8                  16               ${True}
465    7                  20               ${False}
466    8                  20               ${True}
467
468
469Verify Continuous IPMI Command Execution
470    [Documentation]  Verify that continuous IPMI command execution runs fine.
471    [Tags]  Verify_Continuous_IPMI_Command_Execution
472
473    FOR  ${i}  IN RANGE  ${USER_LOOP_COUNT}
474        Run IPMI Standard Command  lan print
475        Run IPMI Standard Command  power status
476        Run IPMI Standard Command  fru list
477        Run IPMI Standard Command  sel list
478    END
479
480
481*** Keywords ***
482
483Create Random IPMI User
484    [Documentation]  Create IPMI user with random username and userid and return those fields.
485
486    ${random_username}=  Generate Random String  8  [LETTERS]
487    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
488    IPMI Create User  ${random_userid}  ${random_username}
489    [Return]  ${random_userid}  ${random_username}
490
491
492Enable IPMI User And Verify
493    [Documentation]  Enable the userid and verify that it has been enabled.
494    [Arguments]  ${userid}
495
496    # Description of argument(s):
497    # userid   A numeric userid (e.g. "4").
498
499    Run IPMI Standard Command  user enable ${userid}
500    ${user_info}=  Get User Info  ${userid}
501    Valid Value  user_info['enable_status']  ['enabled']
502
503
504Set Default Password For IPMI Root User
505    [Documentation]  Set default password for IPMI root user (i.e. 0penBmc).
506    # Set default password for root user.
507    ${result}=  Run External IPMI Standard Command
508    ...  user set password ${root_userid} ${OPENBMC_PASSWORD}
509    ...  P=${valid_password}
510    Should Contain  ${result}  Set User Password command successful
511
512    # Verify that root user is able to run IPMI command using default password.
513    Verify IPMI Username And Password  root  ${OPENBMC_PASSWORD}
514
515
516Test IPMI User Privilege
517    [Documentation]  Test IPMI user privilege by executing IPMI command with different privileges.
518    [Arguments]  ${privilege_level}  ${user_cmd_status}  ${operator_cmd_status}  ${admin_cmd_status}
519
520    # Description of argument(s):
521    # privilege_level     Privilege level of IPMI user (e.g. 4, 3).
522    # user_cmd_status     Expected status of IPMI command run with the "User"
523    #                     privilege (i.e. "Passed" or "Failed").
524    # operator_cmd_status Expected status of IPMI command run with the "Operator"
525    #                     privilege (i.e. "Passed" or "Failed").
526    # admin_cmd_status    Expected status of IPMI command run with the "Administrator"
527    #                     privilege (i.e. "Passed" or "Failed").
528
529    # Create IPMI user and set valid password.
530    ${random_username}=  Generate Random String  8  [LETTERS]
531    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
532    IPMI Create User  ${random_userid}  ${random_username}
533    Set Test Variable  ${random_userid}
534    Run IPMI Standard Command
535    ...  user set password ${random_userid} ${valid_password}
536
537    # Set privilege and enable IPMI messaging for newly created user.
538    Set Channel Access  ${random_userid}  ipmi=on privilege=${privilege_level}
539
540    # Delay added for user privilege to get set.
541    Sleep  5s
542
543    Enable IPMI User And Verify  ${random_userid}
544
545    Verify IPMI Command  ${random_username}  ${valid_password}  User
546    ...  expected_status=${user_cmd_status}
547    Verify IPMI Command  ${random_username}  ${valid_password}  Operator
548    ...  expected_status=${operator_cmd_status}
549    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator
550    ...  expected_status=${admin_cmd_status}
551
552
553Verify IPMI Command
554    [Documentation]  Verify IPMI command execution with given username,
555    ...  password, privilege and expected status.
556    [Arguments]  ${username}  ${password}  ${privilege}  ${channel}=${1}  ${expected_status}=Passed
557    # Description of argument(s):
558    # username         The user name (e.g. "root", "robert", etc.).
559    # password         The user password (e.g. "0penBmc", "0penBmc1", etc.).
560    # privilege        The session privilege for IPMI command (e.g. "User", "Operator", etc.).
561    # channel          The user channel number (e.g. "1" or "2").
562    # expected_status  Expected status of IPMI command run with the user
563    #                  of above password and privilege (i.e. "Passed" or "Failed").
564
565    ${expected_rc}=  Set Variable If  '${expected_status}' == 'Passed'  ${0}  ${1}
566    Wait Until Keyword Succeeds  15 sec  5 sec  Run IPMI Standard Command
567    ...  sel info ${channel}  expected_rc=${expected_rc}  U=${username}  P=${password}
568    ...  L=${privilege}
569
570
571Set User Password And Verify
572    [Documentation]  Create a user and set its password with given length and option.
573    [Arguments]  ${password_length}  ${password_option}  ${expected_result}
574    [Teardown]  Run Keyword  Delete Created User  ${random_userid}
575    # Description of argument(s):
576    # password_length  Length of password to be generated and used (e.g. "16").
577    # password_option  Password length option to be given in IPMI command (e.g. "16", "20").
578    # expected_result  Expected result for setting the user's password (e.g. "True", "False").
579
580    Rprint Vars  password_length  password_option  expected_result
581    ${random_userid}  ${random_username}=  Create Random IPMI User
582    Set Test Variable  ${random_userid}
583    ${password}=  Get From Dictionary  ${password_values}  ${password_length}
584    Rprint Vars  random_userid  password
585
586    # Set password for newly created user.
587    ${status}=  Run Keyword And Return Status  Run IPMI Standard Command
588    ...  user set password ${random_userid} ${password} ${password_option}
589    Rprint Vars  status
590    Valid Value  status  [${expected_result}]
591    Return From Keyword If  '${expected_result}' == '${False}'
592
593    # Set admin privilege and enable IPMI messaging for newly created user.
594    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
595
596    # Delay added for user privilege to get set.
597    Sleep  5s
598
599    Enable IPMI User And Verify  ${random_userid}
600
601    # For password_option 16, passwords with length between 17 and 20 will be truncated.
602    # For all other cases, passwords will be retained as it is to verify.
603    ${truncated_password}=  Set Variable  ${password[:${password_option}]}
604    Rprint Vars  truncated_password
605    ${status}=  Run Keyword And Return Status  Verify IPMI Username And Password  ${random_username}
606    ...  ${truncated_password}
607    Rprint Vars  status
608    Valid Value  status  [${expected_result}]
609
610
611Test Teardown Execution
612    [Documentation]  Do the test teardown execution.
613
614    FFDC On Test Case Fail
615
616
617Delete Created User
618    [Documentation]  Delete created IPMI user.
619    [Arguments]  ${userid}
620    # Description of argument(s):
621    # userid  The user ID (e.g. "1", "2", etc.).
622
623    Run IPMI Standard Command  user set name ${userid} ""
624    Sleep  5s
625