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