*** Settings *** Documentation Test OpenBMC GUI "User management" sub-menu of "Security and access". Resource ../../lib/gui_resource.robot Suite Setup Launch Browser And Login GUI Suite Teardown Suite Teardown Execution Test Setup Test Setup Execution Force Tags User_Management_Sub_Menu *** Variables *** ${xpath_user_management_heading} //h1[text()="User management"] ${xpath_select_user} //input[contains(@class,"custom-control-input")] ${xpath_account_policy} //button[contains(text(),'Account policy settings')] ${xpath_add_user} //button[contains(text(),'Add user')] ${xpath_edit_user} //*[@data-test-id='userManagement-tableRowAction-edit-0'] ${xpath_delete_user} //*[@data-test-id='userManagement-tableRowAction-delete-1'] ${xpath_account_status_enabled_button} //*[@data-test-id='userManagement-radioButton-statusEnabled'] ${xpath_account_status_disabled_button} //*[@data-test-id='userManagement-radioButton-statusDisabled'] ${xpath_username_input_button} //*[@data-test-id='userManagement-input-username'] ${xpath_privilege_list_button} //*[@data-test-id='userManagement-select-privilege'] ${xpath_password_input_button} //*[@data-test-id='userManagement-input-password'] ${xpath_password_confirm_button} //*[@data-test-id='userManagement-input-passwordConfirmation'] ${xpath_cancel_button} //*[@data-test-id='userManagement-button-cancel'] ${xpath_submit_button} //*[@data-test-id='userManagement-button-submit'] ${xpath_delete_button} //button[text()='Delete user'] ${xpath_add_user_heading} //h5[contains(text(),'Add user')] ${xpath_policy_settings_header} //*[text()="Account policy settings"] ${xpath_auto_unlock} //*[@data-test-id='userManagement-radio-automaticUnlock'] ${xpath_manual_unlock} //*[@data-test-id='userManagement-radio-manualUnlock'] ${xpath_max_failed_login} //*[@data-test-id='userManagement-input-lockoutThreshold'] ${test_user_password} TestPwd1 ${xpath_user_creation_error_message} //*[contains(text(),'Error creating user')] ${xpath_close_error_message} //*/*[contains(text(),'Error')]/following-sibling::button @{username} admin_user readonly_user disabled_user @{list_user_privilege} Administrator ReadOnly *** Test Cases *** Verify Navigation To User Management Page [Documentation] Verify navigation to user management page. [Tags] Verify_Navigation_To_User_Management_Page Page Should Contain Element ${xpath_user_management_heading} Verify Existence Of All Sections In User Management Page [Documentation] Verify existence of all sections in user management page. [Tags] Verify_Existence_Of_All_Sections_In_User_Management_Page Page should contain View privilege role descriptions Verify Existence Of All Input Boxes In User Management Page [Documentation] Verify existence of all sections in user managemnet page. [Tags] Verify_Existence_Of_All_Input_Boxes_In_User_Management_Page Page Should Contain Checkbox ${xpath_select_user} Verify Existence Of All Buttons In User Management Page [Documentation] Verify existence of all buttons in user management page. [Tags] Verify_Existence_Of_All_Buttons_In_User_Management_Page Page should contain Button ${xpath_account_policy} Page should contain Button ${xpath_add_user} Page Should Contain Element ${xpath_edit_user} Page Should Contain Element ${xpath_delete_user} Verify Existence Of All Button And Fields In Add User [Documentation] Verify existence of all buttons and fields in add user page. [Tags] Verify_Existence_Of_All_Button_And_Fields_In_Add_User [Teardown] Click Element ${xpath_cancel_button} Click Element ${xpath_add_user} Wait Until Page Contains Element ${xpath_add_user_heading} Page Should Contain Element ${xpath_account_status_enabled_button} Page Should Contain Element ${xpath_account_status_disabled_button} Page Should Contain Element ${xpath_username_input_button} Page Should Contain Element ${xpath_privilege_list_button} Page Should Contain Element ${xpath_password_input_button} Page Should Contain Element ${xpath_password_confirm_button} Page Should Contain Element ${xpath_cancel_button} Page Should Contain Element ${xpath_submit_button} Verify Existence Of All Buttons And Fields In Account Policy Settings [Documentation] Verify existence of all buttons and fields in account policy settings page. [Tags] Verify_Existence_Of_All_Buttons_And_Fields_In_Account_Policy_Settings [Teardown] Click Element ${xpath_cancel_button} Click Element ${xpath_account_policy} Wait Until Page Contains Element ${xpath_policy_settings_header} Page Should Contain Element ${xpath_auto_unlock} Page Should Contain Element ${xpath_manual_unlock} Page Should Contain Element ${xpath_max_failed_login} Page Should Contain Element ${xpath_submit_button} Page Should Contain Element ${xpath_cancel_button} Verify User Access Privilege [Documentation] Create a new user with a privilege and verify that user is created. [Tags] Verify_User_Access_Privilege [Teardown] Delete Users Via Redfish @{username} [Template] Create User And Verify # username privilege_level enabled ${username}[0] Administrator ${True} ${username}[1] ReadOnly ${True} ${username}[2] Administrator ${False} Verify Operator And No Access User Privilege [Documentation] Create users with different access privilege ... and verify that the user is getting created. [Tags] Verify_Operator_And_No_Access_User_Privilege [Template] Create User And Verify # username privilege_level enabled operator_user Operator ${True} noaccess_user NoAccess ${True} Verify User Account And Properties Saved Through Reboots [Documentation] Verify that user account and properties saved through reboots. [Teardown] Delete Users Via Redfish my_admin_user [Tags] Verify_User_Account_And_Properties_Saved_Through_Reboots # Create an User account. Create User And Verify my_admin_user Administrator ${True} # Reboot BMC. Redfish OBMC Reboot (off) stack_mode=normal Click Element ${xpath_refresh_button} Wait Until Page Contains my_admin_user timeout=15 Delete User Account Via GUI [Documentation] Delete user account via GUI. [Tags] Delete_User_Account_Via_GUI # Create new user account via GUI. Create User And Verify ${username}[0] Administrator ${True} # Delete the user created via GUI. Delete Users Via GUI ${username}[0] Verify Error While Creating Users With Same Name [Documentation] Verify proper error message while creating two user accounts with same username. [Tags] Verify_Error_While_Creating_Users_With_Same_Name [Teardown] Delete Users Via Redfish ${username} # Get random username and user privilege level. ${username}= Generate Random String 8 [LETTERS] ${privilege_level}= Evaluate random.choice(${list_user_privilege}) random # Create new user account. Create User And Verify ${username} ${privilege_level} ${True} # Expect failure while creating second user account with same username. Create User And Verify ${username} ${privilege_level} ${True} Failure Test Modifying User Privilege Of Existing User Via GUI [Documentation] Modify user privilege of existing user via GUI and verify the changes using Redfish. [Tags] Test_Modifying_User_Privilege_Of_Existing_User_Via_GUI [Teardown] Delete Users Via Redfish ${username} # Get random username and user privilege level. ${username}= Generate Random String 8 [LETTERS] ${privilege_level}= Evaluate random.choice(${list_user_privilege}) random # Create new user account. Create User And Verify ${username} ${privilege_level} ${True} # Get user privilege role details distinct from the current ones. FOR ${privilege} IN @{list_user_privilege} IF '${privilege}' != '${privilege_level}' ${modify_privilege}= Set Variable ${privilege} END END # Modify user privilege via GUI. Wait Until Keyword Succeeds 30 sec 5 sec Click Element ... //td[text()='${username}']/following-sibling::*/*/*[@title='Edit user'] Select From List by Value ${xpath_privilege_list_button} ${modify_privilege} # Submit changes. Click Element ${xpath_submit_button} # Confirm the successful update. Wait Until Element Is Visible ${xpath_success_message} timeout=30 Wait Until Element Is Not Visible ${xpath_success_message} timeout=30 # Verify user privilege via Redfish. Redfish.Login ${resp}= Redfish.Get /redfish/v1/AccountService/Accounts/${username} Should Be Equal ${resp.dict["RoleId"]} ${modify_privilege} Redfish.Logout Test Modifying User Account Status Of Existing User Via GUI [Documentation] Test modifying user account status of existing user via GUI and verify changes using Redfish. [Tags] Test_Modifying_User_Account_Status_Of_Existing_User_Via_GUI [Teardown] Delete Users Via Redfish ${username} # Get random username, user privilege level and account status. ${username}= Generate Random String 8 [LETTERS] ${privilege_level}= Evaluate random.choice(${list_user_privilege}) random ${initial_account_status}= Evaluate random.choice([True, False]) random # Create new user account. Create User And Verify ${username} ${privilege_level} ${initial_account_status} # Modify user account status via GUI. Wait Until Keyword Succeeds 30 sec 5 sec Click Element ... //td[text()='${username}']/following-sibling::*/*/*[@title='Edit user'] Wait Until Element Is Visible ${xpath_submit_button} timeout=30 # Switch the user account status to its opposite state. IF ${initial_account_status} == ${True} Click Element At Coordinates ${xpath_account_status_disabled_button} 0 0 ELSE Click Element At Coordinates ${xpath_account_status_enabled_button} 0 0 END # Submit changes. Click Element ${xpath_submit_button} # Confirm the successful update. Wait Until Element Is Visible ${xpath_success_message} timeout=30 Wait Until Element Is Not Visible ${xpath_success_message} timeout=60 # Verify account status via Redfish. IF ${initial_account_status} == ${True} ${status}= Run Keyword And Return Status Redfish.Login ${username} ${test_user_password} Should Be Equal ${status} ${False} ELSE ${status}= Run Keyword And Return Status Redfish.Login ${username} ${test_user_password} Should Be Equal ${status} ${True} END Test Modifying User Password Of Existing User Via GUI [Documentation] Modify user password of existing user via GUI and verify changes using Redfish. [Tags] Test_Modifying_User_Password_Of_Existing_User_Via_GUI [Teardown] Delete Users Via Redfish ${username} # Get random username, user privilege level and account status. ${username}= Generate Random String 8 [LETTERS] ${privilege_level}= Evaluate random.choice(${list_user_privilege}) random ${initial_account_status}= Evaluate random.choice([True, False]) random # Initialize the new password for the account. ${new_password}= Set Variable Testpassword1 # Create new user account. Create User And Verify ${username} ${privilege_level} ${initial_account_status} # Wait for newly created user to appear on the page. Wait Until Element Is Visible //td[text()='${username}'] # Modify user password via GUI. Click Element //td[text()='${username}']/following-sibling::*/*/*[@title='Edit user'] Input Text ${xpath_password_input_button} ${new_password} Input Text ${xpath_password_confirm_button} ${new_password} # Submit changes. Click Element ${xpath_submit_button} # Confirm the successful update. Wait Until Element Is Visible ${xpath_success_message} timeout=30 Wait Until Element Is Not Visible ${xpath_success_message} timeout=60 # Verify changes via Redfish. ${status}= Run Keyword And Return Status Redfish.Login ${username} ${new_password} Should Be Equal ${status} ${True} *** Keywords *** Create User And Verify [Documentation] Create a user with given user name and privilege and verify that the ... user is created successfully via GUI and Redfish. [Arguments] ${user_name} ${user_privilege} ${enabled} ${expected_status}=Success # Description of argument(s): # user_name The name of the user to be created (e.g. "test", "robert", etc.). # user_privilege Privilege of the user. # enabled If the user is enabled (e.g True if enabled, False if disabled). # expected_status Expected status of user creation (e.g. Success, Failure). Click Element ${xpath_add_user} Wait Until Page Contains Element ${xpath_add_user_heading} # Select disabled radio button if user needs to be disabled Run Keyword If ${enabled} == ${False} ... Click Element At Coordinates ${xpath_account_status_disabled_button} 0 0 # Input username, password and privilege. Input Text ${xpath_username_input_button} ${user_name} Select From List by Value ${xpath_privilege_list_button} ${user_privilege} Input Text ${xpath_password_input_button} ${test_user_password} Input Text ${xpath_password_confirm_button} ${test_user_password} # Submit. Click Element ${xpath_submit_button} # Proceed with future steps based on the expected execution status. IF '${expected_status}' == 'Success' Wait Until Element Is Visible ${xpath_success_message} timeout=30 # Refresh page and check new user is available. Wait Until Page Contains Element ${xpath_add_user} Click Element ${xpath_refresh_button} Wait Until Element Is Not Visible ${xpath_page_loading_progress_bar} timeout=30 Wait Until Page Contains ${user_name} timeout=15 # Cross check the privilege of newly added user via Redfish. Redfish.Login ${user_priv_redfish}= Redfish_Utils.Get Attribute ... /redfish/v1/AccountService/Accounts/${user_name} RoleId Should Be Equal ${user_privilege} ${user_priv_redfish} Redfish.Logout # Check enable/disable status for user. ${status}= Run Keyword And Return Status Redfish.Login ${user_name} ${test_user_password} Run Keyword If ${enabled} == ${False} ... Should Be Equal ${status} ${False} ... ELSE Should Be Equal ${status} ${True} Redfish.Logout ELSE IF '${expected_status}' == 'Failure' Wait Until Element Is Visible ${xpath_user_creation_error_message} timeout=60 # Close error message popup. Click Element ${xpath_close_error_message} Wait Until Element Is Not Visible ${xpath_user_creation_error_message} timeout=60 END Test Setup Execution [Documentation] Do test case setup tasks. # Navigate to https://xx.xx.xx.xx/#/access-control/user-management user management page. Click Element ${xpath_secuity_and_accesss_menu} Click Element ${xpath_user_management_sub_menu} Wait Until Keyword Succeeds 30 sec 10 sec Location Should Contain user-management Wait Until Element Is Not Visible ${xpath_page_loading_progress_bar} timeout=30 Delete Users Via Redfish [Documentation] Delete given users using Redfish. [Arguments] @{user_list} # Description of argument(s): # user_list List of user name to be deleted. FOR ${user} IN @{user_list} Redfish.Login Redfish.Delete /redfish/v1/AccountService/Accounts/${user} Redfish.Logout END Delete Users Via GUI [Documentation] Delete given users via GUI. [Arguments] @{user_list} # Description of argument(s): # user_list List of user name to be deleted. FOR ${user} IN @{user_list} Wait Until Keyword Succeeds 30 sec 5 sec Click Element ... //td[text()='${user}']/following-sibling::*/*/*[@title='Delete user'] Wait Until Keyword Succeeds 30 sec 5 sec Click Element ${xpath_delete_button} Wait Until Element Is Visible ${xpath_success_message} timeout=30 Wait Until Element Is Not Visible ${xpath_success_message} timeout=60 END Suite Teardown Execution [Documentation] Do suite teardown tasks. Run Keyword And Ignore Error Logout GUI Close Browser Redfish.Logout