xref: /openbmc/openbmc-test-automation/ipmi/test_ipmi_user.robot (revision ba7e33e24b2626f0d5df0303cd0b5331ba628f43)
1*** Settings ***
2Documentation       Test suite for OpenBMC IPMI user management.
3
4Resource            ../lib/ipmi_client.robot
5Resource            ../lib/openbmc_ffdc.robot
6Resource            ../lib/bmc_network_utils.robot
7Library             ../lib/ipmi_utils.py
8Test Setup          Printn
9
10Suite Setup         Suite Setup Execution
11Test Teardown       Test Teardown Execution
12
13*** Variables ***
14
15${invalid_username}     user%
16${invalid_password}     abc123
17${new_username}         newuser
18${root_userid}          1
19${operator_level_priv}  0x3
20${user_priv}            2
21${operator_priv}        3
22${admin_level_priv}     4
23${no_access_priv}       15
24${valid_password}       0penBmc1
25${max_password_length}  20
26${ipmi_setaccess_cmd}   channel setaccess
27&{password_values}      16=0penBmc10penBmc2  17=0penBmc10penBmc2B
28              ...       20=0penBmc10penBmc2Bmc3  21=0penBmc10penBmc2Bmc34
29              ...       7=0penBmc  8=0penBmc0
30${expected_max_ids}     15
31${root_pattern}         ^.*\\sroot\\s.*ADMINISTRATOR.*$
32${empty_name_pattern}   ^User Name\\s.*\\s:\\s$
33
34# User defined count.
35${USER_LOOP_COUNT}      20
36
37*** Test Cases ***
38
39Verify IPMI User Summary
40    [Documentation]  Verify IPMI maximum supported IPMI user ID and
41    ...  enabled user from user summary.
42    [Tags]  Verify_IPMI_User_Summary
43    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
44    ...  Delete Created User  ${random_userid}
45
46    ${initial_user_count}  ${maximum_ids}=  Get Enabled User Count
47
48    ${random_userid}  ${random_username}=  Create Random IPMI User
49    Wait And Confirm New User Entry  ${random_username}
50    Set Test Variable  ${random_userid}
51    Run IPMI Standard Command  user enable ${random_userid}
52
53    # Verify number of currently enabled users.
54    ${current_user_count}  ${maximum_ids}=  Get Enabled User Count
55    ${calculated_count}=  Evaluate  ${initial_user_count} + 1
56    Should Be Equal As Integers  ${current_user_count}   ${calculated_count}
57
58    # Verify maximum user count IPMI local user can have.
59    Should Be Equal As Integers  ${maximum_ids}  ${expected_max_ids}
60
61
62Verify IPMI User List
63    [Documentation]  Verify user list via IPMI.
64    [Tags]  Verify_IPMI_User_List
65    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
66    ...  Delete Created User  ${random_userid}
67
68    ${random_userid}  ${random_username}=  Create Random IPMI User
69    Set Test Variable  ${random_userid}
70
71    Run IPMI Standard Command
72    ...  user set password ${random_userid} ${valid_password}
73    Run IPMI Standard Command  user enable ${random_userid}
74    # Delay added for IPMI user to get enabled.
75    Sleep  5s
76    # Set admin privilege and enable IPMI messaging for newly created user.
77    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
78
79    ${users_access}=  Get User Access Ipmi  ${CHANNEL_NUMBER}
80    Rprint Vars  users_access
81
82    ${index}=  Evaluate  ${random_userid} - 1
83    # Verify the user access of created user.
84    Valid Value  users_access[${index}]['id']  ['${random_userid}']
85    Valid Value  users_access[${index}]['name']  ['${random_username}']
86    Valid Value  users_access[${index}]['callin']  ['true']
87    Valid Value  users_access[${index}]['link']  ['false']
88    Valid Value  users_access[${index}]['auth']  ['true']
89    Valid Value  users_access[${index}]['ipmi']  ['ADMINISTRATOR']
90
91
92Verify IPMI User Creation With Valid Name And ID
93    [Documentation]  Create user via IPMI and verify.
94    [Tags]  Verify_IPMI_User_Creation_With_Valid_Name_And_ID
95    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
96    ...  Delete Created User  ${random_userid}
97
98    ${random_userid}  ${random_username}=  Create Random IPMI User
99    Set Test Variable  ${random_userid}
100
101
102Verify IPMI User Creation With Invalid Name
103    [Documentation]  Verify error while creating IPMI user with invalid
104    ...  name (e.g. user name with special characters).
105    [Tags]  Verify_IPMI_User_Creation_With_Invalid_Name
106
107    ${random_userid}=  Find Free User Id
108    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
109    ...  user set name ${random_userid} ${invalid_username}
110    Should Contain  ${msg}  Invalid data
111
112
113Verify IPMI User Creation With Invalid ID
114    [Documentation]  Verify error while creating IPMI user with invalid
115    ...  ID(i.e. any number greater than 15 or 0).
116    [Tags]  Verify_IPMI_User_Creation_With_Invalid_ID
117
118    @{id_list}=  Create List
119    ${random_invalid_id}=  Evaluate  random.randint(16, 1000)  modules=random
120    Append To List  ${id_list}  ${random_invalid_id}
121    Append To List  ${id_list}  0
122
123    FOR  ${id}  IN  @{id_list}
124      ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
125      ...  user set name ${id} newuser
126      Should Contain Any  ${msg}  User ID is limited to range  Parameter out of range
127    END
128
129
130Verify Setting IPMI User With Invalid Password
131    [Documentation]  Verify error while setting IPMI user with invalid
132    ...  password.
133    [Tags]  Verify_Setting_IPMI_User_With_Invalid_Password
134    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
135    ...  Delete Created User  ${random_userid}
136
137    ${random_userid}  ${random_username}=  Create Random IPMI User
138    Set Test Variable  ${random_userid}
139
140    # Set invalid password for newly created user.
141    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
142    ...  user set password ${random_userid} ${invalid_password}
143
144    # Delay added for user password to get set.
145    Sleep  5s
146
147    Should Contain  ${msg}  Set User Password command failed
148
149
150Verify Setting IPMI Root User With New Name
151    [Documentation]  Verify error while setting IPMI root user with new
152    ...  name.
153    [Tags]  Verify_Setting_IPMI_Root_User_With_New_Name
154
155    # Set invalid password for newly created user.
156    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
157    ...  user set name ${root_userid} abcd
158
159    Should Contain  ${msg}  Set User Name command failed
160
161
162Verify IPMI User Password Via Test Command
163    [Documentation]  Verify IPMI user password using test command.
164    [Tags]  Verify_IPMI_User_Password_Via_Test_Command
165    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
166    ...  Delete Created User  ${random_userid}
167
168    ${random_userid}  ${random_username}=  Create Random IPMI User
169    Set Test Variable  ${random_userid}
170
171    # Set valid password for newly created user.
172    Run IPMI Standard Command
173    ...  user set password ${random_userid} ${valid_password}
174
175    # Verify newly set password using test command.
176    ${msg}=  Run IPMI Standard Command
177    ...  user test ${random_userid} ${max_password_length} ${valid_password}
178
179    Should Contain  ${msg}  Success
180
181
182Verify Setting Valid Password For IPMI User
183    [Documentation]  Set valid password for IPMI user and verify.
184    [Tags]  Verify_Setting_Valid_Password_For_IPMI_User
185    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
186    ...  Delete Created User  ${random_userid}
187
188    ${random_userid}  ${random_username}=  Create Random IPMI User
189    Set Test Variable  ${random_userid}
190
191    # Set valid password for newly created user.
192    Run IPMI Standard Command
193    ...  user set password ${random_userid} ${valid_password}
194
195    Run IPMI Standard Command  user enable ${random_userid}
196
197    # Delay added for IPMI user to get enable
198    Sleep  5s
199
200    # Set admin privilege and enable IPMI messaging for newly created user
201    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
202
203    Verify IPMI Username And Password  ${random_username}  ${valid_password}
204
205
206Verify IPMI User Creation With Same Name
207    [Documentation]  Verify error while creating two IPMI user with same name.
208    [Tags]  Verify_IPMI_User_Creation_With_Same_Name
209    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
210    ...  Delete Created User  ${random_userid}
211
212    ${random_userid}  ${random_username}=  Create Random IPMI User
213
214    # Set same username for another IPMI user.
215    ${rand_userid_two}=  Find Free User Id
216    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
217    ...  user set name ${rand_userid_two} ${random_username}
218    Should Contain  ${msg}  Invalid data field in request
219
220
221Verify Setting IPMI User With Null Password
222    [Documentation]  Verify error while setting IPMI user with null
223    ...  password.
224    [Tags]  Verify_Setting_IPMI_User_With_Null_Password
225    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
226    ...  Delete Created User  ${random_userid}
227
228    ${random_userid}  ${random_username}=  Create Random IPMI User
229    Set Test Variable  ${random_userid}
230
231    # Set null password for newly created user.
232    ${msg}=  Run Keyword And Expect Error  *  Run IPMI Standard Command
233    ...  user set password ${random_userid} ""
234
235    Should Contain  ${msg}  Invalid data field in request
236
237
238Verify IPMI User Deletion
239    [Documentation]  Delete user via IPMI and verify.
240    [Tags]  Verify_IPMI_User_Deletion
241    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
242    ...  Delete Created User  ${random_userid}
243
244    ${random_userid}  ${random_username}=  Create Random IPMI User
245    Set Test Variable  ${random_userid}
246    # Delete IPMI User and verify
247    Run IPMI Standard Command  user set name ${random_userid} ""
248    ${user_info}=  Get User Info  ${random_userid}
249    Should Be Equal  ${user_info['user_name']}  ${EMPTY}
250
251
252Test IPMI User Privilege Level
253    [Documentation]  Verify IPMI user with user privilege can only run user level commands.
254    [Tags]  Test_IPMI_User_Privilege_Level
255    [Template]  Test IPMI User Privilege
256    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
257    ...  Delete Created User  ${random_userid}
258
259    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
260    ${user_priv}         Passed           Failed               Failed
261
262
263Test IPMI Operator Privilege Level
264    [Documentation]  Verify IPMI user with operator privilege can only run user and operator levels commands.
265    ...  level is set to operator.
266    [Tags]  Test_IPMI_Operator_Privilege_Level
267    [Template]  Test IPMI User Privilege
268    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
269    ...  Delete Created User  ${random_userid}
270
271    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
272    ${operator_priv}     Passed           Passed               Failed
273
274
275Test IPMI Administrator Privilege Level
276    [Documentation]  Verify IPMI user with admin privilege can run all levels command.
277    [Tags]  Test_IPMI_Administrator_Privilege_Level
278    [Template]  Test IPMI User Privilege
279    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
280    ...  Delete Created User  ${random_userid}
281
282    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
283    ${admin_level_priv}  Passed           Passed               Passed
284
285
286Test IPMI No Access Privilege Level
287    [Documentation]  Verify IPMI user with no access privilege can not run command at any level.
288    [Tags]  Test_IPMI_No_Access_Privilege_Level
289    [Template]  Test IPMI User Privilege
290    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
291    ...  Delete Created User  ${random_userid}
292
293    #Privilege level     User Cmd Status  Operator Cmd Status  Admin Cmd Status
294    ${no_access_priv}    Failed           Failed               Failed
295
296
297Enable IPMI User And Verify
298    [Documentation]  Enable IPMI user and verify that the user is able
299    ...  to run IPMI command.
300    [Tags]  Enable_IPMI_User_And_Verify
301    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
302    ...  Delete Created User  ${random_userid}
303
304    ${random_userid}  ${random_username}=  Create Random IPMI User
305    Set Test Variable  ${random_userid}
306    Run IPMI Standard Command
307    ...  user set password ${random_userid} ${valid_password}
308
309    # Set admin privilege and enable IPMI messaging for newly created user.
310    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
311
312    # Delay added for user privilege to get set.
313    Sleep  5s
314
315    Enable IPMI User And Verify  ${random_userid}
316    Wait And Confirm New Username And Password  ${random_username}  ${valid_password}
317
318    # Verify that enabled IPMI  user is able to run IPMI command.
319    Verify IPMI Username And Password  ${random_username}  ${valid_password}
320
321
322Disable IPMI User And Verify
323    [Documentation]  Disable IPMI user and verify that that the user
324    ...  is unable to run IPMI command.
325    [Tags]  Disable_IPMI_User_And_Verify
326    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
327    ...  Delete Created User  ${random_userid}
328
329    ${random_userid}  ${random_username}=  Create Random IPMI User
330    Set Test Variable  ${random_userid}
331    Run IPMI Standard Command
332    ...  user set password ${random_userid} ${valid_password}
333
334    # Set admin privilege and enable IPMI messaging for newly created user.
335    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
336
337    # Disable IPMI user and verify.
338    Run IPMI Standard Command  user disable ${random_userid}
339    ${user_info}=  Get User Info  ${random_userid}
340    Should Be Equal  ${user_info['enable_status']}  disabled
341
342    # Verify that disabled IPMI  user is unable to run IPMI command.
343    ${msg}=  Run Keyword And Expect Error  *  Verify IPMI Username And Password
344    ...  ${random_username}  ${valid_password}
345    Should Contain  ${msg}  Unable to establish IPMI
346
347
348Verify IPMI Root User Password Change
349    [Documentation]  Change IPMI root user password and verify that
350    ...  root user is able to run IPMI command.
351    [Tags]  Verify_IPMI_Root_User_Password_Change
352    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
353    ...  Wait Until Keyword Succeeds  15 sec  5 sec
354    ...  Set Default Password For IPMI Root User
355
356    # User input password should be minimum 8 characters long.
357    Valid Length  OPENBMC_PASSWORD  min_length=8
358    # Set new password for root user.
359    Run IPMI Standard Command
360    ...  user set password ${root_userid} ${valid_password}
361
362    # Delay added for user password to get set.
363    Sleep  5s
364
365    # Verify that root user is able to run IPMI command using new password.
366    Wait Until Keyword Succeeds  15 sec  5 sec  Verify IPMI Username And Password
367    ...  root  ${valid_password}
368
369
370Verify Administrator And No Access Privilege For Different Channels
371    [Documentation]  Set administrator and no access privilege for different channels and verify.
372    [Tags]  Verify_Administrator_And_No_Access_Privilege_For_Different_Channels
373    [Setup]  Check Active Ethernet Channels
374    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
375    ...  Delete Created User  ${random_userid}
376
377    ${random_userid}  ${random_username}=  Create Random IPMI User
378    Set Test Variable  ${random_userid}
379    Run IPMI Standard Command
380    ...  user set password ${random_userid} ${valid_password}
381
382    # Set admin privilege for newly created user with channel 1.
383    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}  ${CHANNEL_NUMBER}
384
385    # Set no access privilege for newly created user with channel 2.
386    Set Channel Access  ${random_userid}  ipmi=on privilege=${no_access_priv}  ${secondary_channel_number}
387
388    Enable IPMI User And Verify  ${random_userid}
389
390    # Verify that user is able to run administrator level IPMI command with channel 1.
391    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator  ${CHANNEL_NUMBER}
392
393    # Verify that user is unable to run IPMI command with channel 2.
394    Run IPMI Standard Command
395    ...  sel info ${secondary_channel_number}  expected_rc=${1}  U=${random_username}  P=${valid_password}
396
397
398Verify Operator And User Privilege For Different Channels
399    [Documentation]  Set operator and user privilege for different channels and verify.
400    [Tags]  Verify_Operator_And_User_Privilege_For_Different_Channels
401    [Setup]  Check Active Ethernet Channels
402    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
403    ...  Delete Created User  ${random_userid}
404
405    ${random_userid}  ${random_username}=  Create Random IPMI User
406    Set Test Variable  ${random_userid}
407    Run IPMI Standard Command
408    ...  user set password ${random_userid} ${valid_password}
409
410    # Set operator privilege for newly created user with channel 1.
411    Set Channel Access  ${random_userid}  ipmi=on privilege=${operator_priv}  ${CHANNEL_NUMBER}
412
413    # Set user privilege for newly created user with channel 2.
414    Set Channel Access  ${random_userid}  ipmi=on privilege=${user_priv}  ${secondary_channel_number}
415
416    Enable IPMI User And Verify  ${random_userid}
417
418    # Verify that user is able to run operator level IPMI command with channel 1.
419    Verify IPMI Command  ${random_username}  ${valid_password}  Operator  ${CHANNEL_NUMBER}
420
421    # Verify that user is able to run user level IPMI command with channel 2.
422    Verify IPMI Command  ${random_username}  ${valid_password}  User  ${secondary_channel_number}
423
424
425Verify Setting IPMI User With Max Password Length
426    [Documentation]  Verify IPMI user creation with password length of 20 characters.
427    [Tags]  Verify_Setting_IPMI_User_With_Max_Password_Length
428    [Template]  Set User Password And Verify
429
430    # password_length  password_option  expected_status
431    20                 20               ${True}
432
433
434Verify Setting IPMI User With Invalid Password Length
435    [Documentation]  Verify that IPMI user cannot be set with 21 character password using 16 char
436    ...  or 20 char password option.
437    [Tags]  Verify_Setting_IPMI_User_With_Invalid_Password_Length
438    [Template]  Set User Password And Verify
439
440    # password_length  password_option  expected_status
441    21                 16               ${False}
442    21                 20               ${False}
443
444
445Verify Setting IPMI User With 16 Character Password
446    [Documentation]  Verify that IPMI user can create a 16 character password using 16 char or 20
447    ...  char password option.
448    [Tags]  Verify_Setting_IPMI_User_With_16_Character_Password
449    [Template]  Set User Password And Verify
450
451    # password_length  password_option  expected_status
452    16                 16               ${True}
453    16                 20               ${True}
454
455
456Verify Default Selection Of 16 Character Password For IPMI User
457    [Documentation]  Verify that ipmitool by default opts for the 16 character option when given a
458    ...  password whose length is in between 17 and 20.
459    [Tags]  Verify_Default_Selection_Of_16_Character_Password_For_IPMI_User
460    [Template]  Set User Password And Verify
461
462    # password_length  password_option  expected_status
463    17                 16               ${True}
464    20                 16               ${True}
465
466
467Verify Minimum Password Length For IPMI User
468    [Documentation]  Verify minimum password length of 8 characters.
469    [Tags]  Verify_Minimum_Password_Length_For_IPMI_User
470    [Template]  Set User Password And Verify
471
472    # password_length  password_option  expected_status
473    7                  16               ${False}
474    8                  16               ${True}
475    7                  20               ${False}
476    8                  20               ${True}
477
478
479Verify Continuous IPMI Command Execution
480    [Documentation]  Verify that continuous IPMI command execution runs fine.
481    [Tags]  Verify_Continuous_IPMI_Command_Execution
482
483    FOR  ${i}  IN RANGE  ${USER_LOOP_COUNT}
484        Run IPMI Standard Command  lan print
485        Run IPMI Standard Command  power status
486        Run IPMI Standard Command  fru list
487        Run IPMI Standard Command  sel list
488    END
489
490
491Modify IPMI User
492    [Documentation]  Verify modified IPMI user is communicating via IPMI.
493    [Tags]  Modify_IPMI_User
494    [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
495    ...  Delete Created User  ${random_userid}
496
497    ${random_userid}  ${random_username}=  Create Random IPMI User
498    Set Test Variable  ${random_userid}
499    Run IPMI Standard Command
500    ...  user set password ${random_userid} ${valid_password}
501
502    # Set admin privilege and enable IPMI messaging for newly created user.
503    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
504
505    # Delay added for user privilege to get set.
506    Sleep  5s
507
508    Enable IPMI User And Verify  ${random_userid}
509
510    # Verify that user is able to run administrator level IPMI command.
511    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator  ${CHANNEL_NUMBER}
512
513    # Set different username for same IPMI user.
514    Run IPMI Standard Command
515    ...  user set name ${random_userid} ${new_username}
516    Wait And Confirm New Username And Password  ${new_username}  ${valid_password}
517
518    # Verify that user is able to run administrator level IPMI command.
519    Verify IPMI Command  ${new_username}  ${valid_password}  Administrator  ${CHANNEL_NUMBER}
520
521
522*** Keywords ***
523
524Create Random IPMI User
525    [Documentation]  Create IPMI user with random username and userid and return those fields.
526
527    ${random_username}=  Generate Random String  8  [LETTERS]
528    ${random_userid}=  Find Free User Id
529    IPMI Create User  ${random_userid}  ${random_username}
530    [Return]  ${random_userid}  ${random_username}
531
532
533Enable IPMI User And Verify
534    [Documentation]  Enable the userid and verify that it has been enabled.
535    [Arguments]  ${userid}
536
537    # Description of argument(s):
538    # userid   A numeric userid (e.g. "4").
539
540    Run IPMI Standard Command  user enable ${userid}
541    ${user_info}=  Get User Info  ${userid}
542    Valid Value  user_info['enable_status']  ['enabled']
543
544
545Set Default Password For IPMI Root User
546    [Documentation]  Set default password for IPMI root user (i.e. 0penBmc).
547    # Set default password for root user.
548    ${result}=  Run External IPMI Standard Command
549    ...  user set password ${root_userid} ${OPENBMC_PASSWORD}
550    ...  P=${valid_password}
551    Should Contain  ${result}  Set User Password command successful
552
553    # Verify that root user is able to run IPMI command using default password.
554    Verify IPMI Username And Password  root  ${OPENBMC_PASSWORD}
555
556
557Test IPMI User Privilege
558    [Documentation]  Test IPMI user privilege by executing IPMI command with different privileges.
559    [Arguments]  ${privilege_level}  ${user_cmd_status}  ${operator_cmd_status}  ${admin_cmd_status}
560
561    # Description of argument(s):
562    # privilege_level     Privilege level of IPMI user (e.g. 4, 3).
563    # user_cmd_status     Expected status of IPMI command run with the "User"
564    #                     privilege (i.e. "Passed" or "Failed").
565    # operator_cmd_status Expected status of IPMI command run with the "Operator"
566    #                     privilege (i.e. "Passed" or "Failed").
567    # admin_cmd_status    Expected status of IPMI command run with the "Administrator"
568    #                     privilege (i.e. "Passed" or "Failed").
569
570    # Create IPMI user and set valid password.
571    ${random_username}=  Generate Random String  8  [LETTERS]
572    ${random_userid}=  Evaluate  random.randint(2, 15)  modules=random
573    IPMI Create User  ${random_userid}  ${random_username}
574    Set Test Variable  ${random_userid}
575    Run IPMI Standard Command
576    ...  user set password ${random_userid} ${valid_password}
577
578    # Set privilege and enable IPMI messaging for newly created user.
579    Set Channel Access  ${random_userid}  ipmi=on privilege=${privilege_level}
580
581    # Delay added for user privilege to get set.
582    Sleep  5s
583
584    Enable IPMI User And Verify  ${random_userid}
585
586    Verify IPMI Command  ${random_username}  ${valid_password}  User
587    ...  expected_status=${user_cmd_status}
588    Verify IPMI Command  ${random_username}  ${valid_password}  Operator
589    ...  expected_status=${operator_cmd_status}
590    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator
591    ...  expected_status=${admin_cmd_status}
592
593
594Verify IPMI Command
595    [Documentation]  Verify IPMI command execution with given username,
596    ...  password, privilege and expected status.
597    [Arguments]  ${username}  ${password}  ${privilege}  ${channel}=${1}  ${expected_status}=Passed
598    # Description of argument(s):
599    # username         The user name (e.g. "root", "robert", etc.).
600    # password         The user password (e.g. "0penBmc", "0penBmc1", etc.).
601    # privilege        The session privilege for IPMI command (e.g. "User", "Operator", etc.).
602    # channel          The user channel number (e.g. "1" or "2").
603    # expected_status  Expected status of IPMI command run with the user
604    #                  of above password and privilege (i.e. "Passed" or "Failed").
605
606    ${expected_rc}=  Set Variable If  '${expected_status}' == 'Passed'  ${0}  ${1}
607    Wait Until Keyword Succeeds  15 sec  5 sec  Run IPMI Standard Command
608    ...  sel info ${channel}  expected_rc=${expected_rc}  U=${username}  P=${password}
609    ...  L=${privilege}
610
611
612Set User Password And Verify
613    [Documentation]  Create a user and set its password with given length and option.
614    [Arguments]  ${password_length}  ${password_option}  ${expected_result}
615    [Teardown]  Run Keyword  Delete Created User  ${random_userid}
616    # Description of argument(s):
617    # password_length  Length of password to be generated and used (e.g. "16").
618    # password_option  Password length option to be given in IPMI command (e.g. "16", "20").
619    # expected_result  Expected result for setting the user's password (e.g. "True", "False").
620
621    Rprint Vars  password_length  password_option  expected_result
622    ${random_userid}  ${random_username}=  Create Random IPMI User
623    Set Test Variable  ${random_userid}
624    ${password}=  Get From Dictionary  ${password_values}  ${password_length}
625    Rprint Vars  random_userid  password
626
627    # Set password for newly created user.
628    ${status}=  Run Keyword And Return Status  Run IPMI Standard Command
629    ...  user set password ${random_userid} ${password} ${password_option}
630    Rprint Vars  status
631    Valid Value  status  [${expected_result}]
632    Return From Keyword If  '${expected_result}' == '${False}'
633
634    # Set admin privilege and enable IPMI messaging for newly created user.
635    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}
636
637    # Delay added for user privilege to get set.
638    Sleep  5s
639
640    Enable IPMI User And Verify  ${random_userid}
641
642    # For password_option 16, passwords with length between 17 and 20 will be truncated.
643    # For all other cases, passwords will be retained as it is to verify.
644    ${truncated_password}=  Set Variable  ${password[:${password_option}]}
645    Rprint Vars  truncated_password
646    ${status}=  Run Keyword And Return Status  Verify IPMI Username And Password  ${random_username}
647    ...  ${truncated_password}
648    Rprint Vars  status
649    Valid Value  status  [${expected_result}]
650
651
652Test Teardown Execution
653    [Documentation]  Do the test teardown execution.
654
655    FFDC On Test Case Fail
656
657
658Delete Created User
659    [Documentation]  Delete created IPMI user.
660    [Arguments]  ${userid}
661    # Description of argument(s):
662    # userid  The user ID (e.g. "1", "2", etc.).
663
664    Run IPMI Standard Command  user set name ${userid} ""
665    Sleep  5s
666
667
668Check Active Ethernet Channels
669    [Documentation]  Check active ethernet channels and set suite variables.
670
671    ${channel_number_list}=  Get Active Ethernet Channel List
672    ${channel_length}=  Get Length  ${channel_number_list}
673    Skip If  '${channel_length}' == '1'
674    ...  msg= Skips this test case as only one channel was in active.
675
676    FOR  ${channel_num}  IN  @{channel_number_list}
677        ${secondary_channel_number}=  Set Variable If  ${channel_num} != ${CHANNEL_NUMBER}  ${channel_num}
678    END
679
680    Set Suite Variable  ${secondary_channel_number}
681
682
683Suite Setup Execution
684    [Documentation]  Make sure the enabled user count is below maximum,
685    ...  and prepares administrative user list suite variables.
686
687    Check Enabled User Count
688    Determine Root User Id
689
690
691Check Enabled User Count
692    [Documentation]  Ensure that there are available user IDs.
693
694    # Check for the enabled user count
695    ${resp}=  Run IPMI Standard Command  user summary ${CHANNEL_NUMBER}
696    ${enabled_user_count}=
697    ...  Get Lines Containing String  ${resp}  Enabled User Count
698
699    Should not contain  ${enabled_user_count}  ${expected_max_ids}
700    ...  msg=IPMI have reached maximum user count
701
702
703Determine Root User Id
704    [Documentation]  Determines the user ID of the root user.
705
706    ${resp}=  Wait Until Keyword Succeeds  15 sec  1 sec  Run IPMI Standard Command
707    ...  user list
708    @{lines}=  Split To Lines  ${resp}
709
710    ${root_userid}=  Set Variable  ${-1}
711    ${line_count}=  Get Length  ${lines}
712    FOR  ${id_index}  IN RANGE  1  ${line_count}
713        ${line}=  Get From List  ${lines}  ${id_index}
714        ${root_found}=  Get Lines Matching Regexp  ${line}  ${root_pattern}
715        IF  '${root_found}' != '${EMPTY}'
716            ${root_userid}=  Set Variable  ${id_index}
717            BREAK
718        END
719    END
720    Set Suite Variable  ${root_userid}
721
722    Log To Console  The root user ID is ${root_userid}.
723    Run Keyword If  ${root_userid} < ${1}  Fail  msg= Did not identify root user ID.
724
725
726Wait And Confirm New Username And Password
727    [Documentation]  Wait in loop trying to to confirm Username And Password.
728    [Arguments]  ${username}  ${password}
729
730    # Description of argument(s):
731    # username         The user name (e.g. "root", "robert", etc.).
732    # password         The user password (e.g. "0penBmc", "0penBmc1", etc.).
733
734    # Give time for previous command to complete.
735    Sleep  5s
736
737    # Looping verify that root user is able to run IPMI command using new password.
738    Wait Until Keyword Succeeds  15 sec  5 sec  Verify IPMI Username And Password
739    ...  ${username}  ${password}
740
741
742Get Enabled User Count
743    [Documentation]  Return as integers: current number of enabled users and
744    ...  Maximum number of Ids.
745
746    # Isolate 'Enabled User Count' value and convert to integer
747    ${resp}=  Wait Until Keyword Succeeds  15 sec  1 sec  Run IPMI Standard Command
748    ...  user summary ${CHANNEL_NUMBER}
749    ${user_count_line}=  Get Lines Containing String  ${resp}  Enabled User Count
750    ${count}=  Fetch From Right  ${user_count_line}  \:
751    ${user_count}=  Convert To Integer  ${count}
752
753    # Isolate 'Maximum IDs' value and convert to integer
754    ${maximum_ids}=  Get Lines Containing String  ${resp}  Maximum IDs
755    ${max_ids}=  Fetch From Right  ${maximum_ids}  \:
756    ${int_maximum_ids_count}=  Convert To Integer  ${max_ids}
757
758    [Return]  ${user_count}  ${int_maximum_ids_count}
759
760
761Wait And Confirm New User Entry
762    [Documentation]  Wait in loop until new user appears with given username.
763    [Arguments]  ${username}
764
765    # Description of argument(s):
766    # username         The user name (e.g. "root", "robert", etc.).
767
768    Wait Until Keyword Succeeds  45 sec  1 sec  Verify IPMI Username Visible
769    ...  ${username}
770
771
772Verify IPMI Username Visible
773    [Documentation]  Confirm that username is present in user list.
774    [Arguments]  ${username}
775
776    # Description of argument(s):
777    # username         The user name (e.g. "root", "robert", etc.).
778
779    ${resp}=  Run IPMI Standard Command  user list
780    Should Contain  ${resp}  ${username}
781
782
783Find Free User Id
784    [Documentation]  Find a user ID that is not being used.
785
786    Check Enabled User Count
787    FOR    ${num}    IN RANGE    300
788        ${random_userid}=  Evaluate  random.randint(1, ${expected_max_ids})  modules=random
789        ${access}=  Run IPMI Standard Command  channel getaccess 1 ${random_userid}
790
791        ${name_line}=  Get Lines Containing String  ${access}  User Name
792        Log To Console  For ID ${random_userid}: ${name_line}
793        ${is_empty}=  Run Keyword And Return Status
794        ...  Should Match Regexp  ${name_line}  ${empty_name_pattern}
795
796        Exit For Loop If  ${is_empty} == ${True}
797    END
798    [Return]  ${random_userid}
799