blob: 5c50698e573477e2f81b5996983dbb175586e799 [file] [log] [blame]
*** Settings ***
Documentation Test Redfish user account.
Resource ../../lib/resource.robot
Resource ../../lib/bmc_redfish_resource.robot
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/bmc_redfish_utils.robot
Library SSHLibrary
Test Setup Redfish.Login
Test Teardown Test Teardown Execution
*** Variables ***
${account_lockout_duration} ${30}
${account_lockout_threshold} ${3}
${ssh_status} ${True}
** Test Cases **
Verify AccountService Available
[Documentation] Verify Redfish account service is available.
[Tags] Verify_AccountService_Available
${resp} = Redfish_utils.Get Attribute /redfish/v1/AccountService ServiceEnabled
Should Be Equal As Strings ${resp} ${True}
Verify Redfish Admin User Persistence After Reboot
[Documentation] Verify Redfish admin user persistence after reboot.
[Tags] Verify_Redfish_Admin_User_Persistence_After_Reboot
[Setup] Run Keywords Redfish.Login AND
... Redfish Create User admin_user TestPwd123 Administrator ${True}
[Teardown] Run Keywords Redfish.Delete /redfish/v1/AccountService/Accounts/admin_user
... AND Test Teardown Execution
# Reboot BMC.
Redfish OBMC Reboot (off) stack_mode=normal
# Verify users after reboot.
Redfish Verify User admin_user TestPwd123 Administrator ${True}
Verify Redfish Operator User Persistence After Reboot
[Documentation] Verify Redfish operator user persistence after reboot.
[Tags] Verify_Redfish_Operator_User_Persistence_After_Reboot
[Setup] Run Keywords Redfish.Login AND
... Redfish Create User operator_user TestPwd123 Operator ${True}
[Teardown] Run Keywords Redfish.Delete /redfish/v1/AccountService/Accounts/operator_user
... AND Test Teardown Execution
# Reboot BMC.
Redfish OBMC Reboot (off) stack_mode=normal
# Verify users after reboot.
Redfish Verify User operator_user TestPwd123 Operator ${True}
Verify Redfish Readonly User Persistence After Reboot
[Documentation] Verify Redfish readonly user persistence after reboot.
[Tags] Verify_Redfish_Readonly_User_Persistence_After_Reboot
[Setup] Run Keywords Redfish.Login AND
... Redfish Create User readonly_user TestPwd123 ReadOnly ${True}
[Teardown] Run Keywords Redfish.Delete /redfish/v1/AccountService/Accounts/readonly_user
... AND Test Teardown Execution
# Reboot BMC.
Redfish OBMC Reboot (off) stack_mode=normal
# Verify users after reboot.
Redfish Verify User readonly_user TestPwd123 ReadOnly ${True}
Redfish Create and Verify Admin User
[Documentation] Create a Redfish user with administrator role and verify.
[Tags] Redfish_Create_and_Verify_Admin_User
[Template] Redfish Create And Verify User
#username password role_id enabled
admin_user TestPwd123 Administrator ${True}
Redfish Create and Verify Operator User
[Documentation] Create a Redfish user with operator role and verify.
[Tags] Redfish_Create_and_Verify_Operator_User
[Template] Redfish Create And Verify User
#username password role_id enabled
operator_user TestPwd123 Operator ${True}
Redfish Create and Verify Readonly User
[Documentation] Create a Redfish user with readonly role and verify.
[Tags] Redfish_Create_and_Verify_Readonly_User
[Template] Redfish Create And Verify User
#username password role_id enabled
readonly_user TestPwd123 ReadOnly ${True}
Verify Redfish Admin User With Wrong Password
[Documentation] Verify Redfish admin user with wrong password.
[Tags] Verify_Redfish_Admin_User_With_Wrong_Password
[Template] Verify Redfish User with Wrong Password
#username password role_id enabled wrong_password
admin_user TestPwd123 Administrator ${True} alskjhfwurh
Verify Redfish Operator User with Wrong Password
[Documentation] Verify Redfish operator user with wrong password.
[Tags] Verify_Redfish_Operator_User_with_Wrong_Password
[Template] Verify Redfish User with Wrong Password
#username password role_id enabled wrong_password
operator_user TestPwd123 Operator ${True} 12j8a8uakjhdaosiruf024
Verify Redfish Readonly User With Wrong Password
[Documentation] Verify Redfish readonly user with wrong password.
[Tags] Verify_Redfish_Readonly_User_With_Wrong_Password
[Template] Verify Redfish User with Wrong Password
#username password role_id enabled wrong_password
readonly_user TestPwd123 ReadOnly ${True} 12
Verify Login with Deleted Redfish Admin User
[Documentation] Verify login with deleted Redfish admin user.
[Tags] Verify_Login_with_Deleted_Redfish_Admin_User
[Template] Verify Login with Deleted Redfish User
#username password role_id enabled
admin_user TestPwd123 Administrator ${True}
Verify Login with Deleted Redfish Operator User
[Documentation] Verify login with deleted Redfish operator user.
[Tags] Verify_Login_with_Deleted_Redfish_Operator_User
[Template] Verify Login with Deleted Redfish User
#username password role_id enabled
operator_user TestPwd123 Operator ${True}
Verify Login with Deleted Redfish Readonly User
[Documentation] Verify login with deleted Redfish readonly user.
[Tags] Verify_Login_with_Deleted_Redfish_Readonly_User
[Template] Verify Login with Deleted Redfish User
#username password role_id enabled
readonly_user TestPwd123 ReadOnly ${True}
Verify Admin User Creation Without Enabling It
[Documentation] Verify admin user creation without enabling it.
[Tags] Verify_Admin_User_Creation_Without_Enabling_It
[Template] Verify Create User Without Enabling
#username password role_id enabled
admin_user TestPwd123 Administrator ${False}
Verify Operator User Creation Without Enabling It
[Documentation] Verify operator user creation without enabling it.
[Tags] Verify_Operator_User_Creation_Without_Enabling_It
[Template] Verify Create User Without Enabling
#username password role_id enabled
operator_user TestPwd123 Operator ${False}
Verify Readonly User Creation Without Enabling It
[Documentation] Verify readonly user creation without enabling it.
[Tags] Verify_Readonly_User_Creation_Without_Enabling_It
[Template] Verify Create User Without Enabling
#username password role_id enabled
readonly_user TestPwd123 ReadOnly ${False}
Verify User Creation With Invalid Role Id
[Documentation] Verify user creation with invalid role ID.
[Tags] Verify_User_Creation_With_Invalid_Role_Id
# Make sure the user account in question does not already exist.
Redfish.Delete /redfish/v1/AccountService/Accounts/test_user
... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
# Create specified user.
${payload}= Create Dictionary
... UserName=test_user Password=TestPwd123 RoleId=wrongroleid Enabled=${True}
Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{payload}
... valid_status_codes=[${HTTP_BAD_REQUEST}]
Verify Error Upon Creating Same Users With Different Privileges
[Documentation] Verify error upon creating same users with different privileges.
[Tags] Verify_Error_Upon_Creating_Same_Users_With_Different_Privileges
Redfish Create User test_user TestPwd123 Administrator ${True}
# Create specified user.
${payload}= Create Dictionary
... UserName=test_user Password=TestPwd123 RoleId=ReadOnly Enabled=${True}
Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{payload}
... valid_status_codes=[${HTTP_BAD_REQUEST}]
Redfish.Delete /redfish/v1/AccountService/Accounts/test_user
Verify Modifying User Attributes
[Documentation] Verify modifying user attributes.
[Tags] Verify_Modifying_User_Attributes
# Create Redfish users.
Redfish Create User admin_user TestPwd123 Administrator ${True}
Redfish Create User readonly_user TestPwd123 ReadOnly ${True}
# Make sure the new user account does not already exist.
Redfish.Delete /redfish/v1/AccountService/Accounts/newadmin_user
... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
# Update admin_user username using Redfish.
${payload}= Create Dictionary UserName=newadmin_user
Redfish.Patch /redfish/v1/AccountService/Accounts/admin_user body=&{payload}
# Update readonly_user role using Redfish.
${payload}= Create Dictionary RoleId=Administrator
Redfish.Patch /redfish/v1/AccountService/Accounts/readonly_user body=&{payload}
# Verify users after updating
Redfish Verify User newadmin_user TestPwd123 Administrator ${True}
Redfish Verify User readonly_user TestPwd123 Administrator ${True}
# Delete created users.
Redfish.Delete /redfish/v1/AccountService/Accounts/newadmin_user
Redfish.Delete /redfish/v1/AccountService/Accounts/readonly_user
Verify Modifying Operator User Attributes
[Documentation] Verify modifying operator user attributes.
[Tags] Verify_Modifying_Operator_User_Attributes
[Setup] Run Keywords Redfish.Login AND
... Redfish Create User operator_user TestPwd123 Operator ${True}
[Teardown] Run Keywords Redfish.Delete /redfish/v1/AccountService/Accounts/operator_user
... AND Test Teardown Execution
# Update operator_user password using Redfish.
${payload}= Create Dictionary Password=NewTestPwd123
Redfish.Patch /redfish/v1/AccountService/Accounts/operator_user body=&{payload}
# Verify users after updating
Redfish Verify User operator_user NewTestPwd123 Operator ${True}
Verify User Account Locked
[Documentation] Verify user account locked upon trying with invalid password.
[Tags] Verify_User_Account_Locked
Redfish Create User admin_user TestPwd123 Administrator ${True}
${payload}= Create Dictionary AccountLockoutThreshold=${account_lockout_threshold}
... AccountLockoutDuration=${account_lockout_duration}
Redfish.Patch ${REDFISH_ACCOUNTS_SERVICE_URI} body=${payload}
Redfish.Logout
# Make ${account_lockout_threshold} failed login attempts.
Repeat Keyword ${account_lockout_threshold} times
... Run Keyword And Expect Error InvalidCredentialsError* Redfish.Login admin_user abc123
# Verify that legitimate login fails due to lockout.
Run Keyword And Expect Error InvalidCredentialsError*
... Redfish.Login admin_user TestPwd123
# Wait for lockout duration to expire and then verify that login works.
Sleep ${account_lockout_duration}s
Redfish.Login admin_user TestPwd123
Redfish.Logout
Redfish.Login
Redfish.Delete /redfish/v1/AccountService/Accounts/admin_user
Verify User Account Unlock
[Documentation] Verify manually unlocking the account before lockout time
[Tags] Verify_User_Account_Unlock
[Teardown] Run Keywords Redfish.Logout
... AND Redfish.Login
... AND Redfish.Delete /redfish/v1/AccountService/Accounts/test_user
... AND SSHLibrary.Close All Connections
Redfish Create User test_user TestPwd123 Administrator ${True}
${payload}= Create Dictionary
... AccountLockoutThreshold=${account_lockout_threshold}
... AccountLockoutDuration=${account_lockout_duration}
Redfish.Patch ${REDFISH_ACCOUNTS_SERVICE_URI} body=${payload}
Redfish.Logout
# Make ${account_lockout_threshold} failed login attempts.
Repeat Keyword ${account_lockout_threshold} times
... Run Keyword And Expect Error InvalidCredentialsError*
... Redfish.Login test_user abc123
# Ensure SSH Login with locked account gets failed
SSHLibrary.Open Connection ${OPENBMC_HOST}
Run Keyword And Expect Error Authentication failed*
... SSHLibrary.Login test_user TestPwd123
# Verify that legitimate login fails due to lockout.
Run Keyword And Expect Error InvalidCredentialsError*
... Redfish.Login test_user TestPwd123
${payload}= Create Dictionary Locked=${FALSE}
# Manually unlock the account before lockout threshold expires
Redfish.Login
Redfish.Patch ${REDFISH_ACCOUNTS_URI}test_user body=${payload}
Redfish.Logout
# Try redfish login with the recently unlocked account
Redfish.Login test_user TestPwd123
# Try SSH login with the unlocked account
SSHLibrary.Open Connection ${OPENBMC_HOST}
SSHLibrary.Login test_user TestPwd123
Verify Admin User Privilege
[Documentation] Verify admin user privilege.
[Tags] Verify_Admin_User_Privilege
Redfish Create User admin_user TestPwd123 Administrator ${True}
Redfish Create User readonly_user TestPwd123 ReadOnly ${True}
Redfish.Logout
Redfish.Login admin_user TestPwd123
# Change password of 'readonly' user with admin user.
Redfish.Patch /redfish/v1/AccountService/Accounts/readonly_user body={'Password': 'NewTestPwd123'}
# Verify modified user.
Redfish Verify User readonly_user NewTestPwd123 ReadOnly ${True}
# Note: Delete user would work here because a root login is
# performed as part of "Redfish Verify User" keyword's teardown.
Redfish.Delete /redfish/v1/AccountService/Accounts/admin_user
Redfish.Delete /redfish/v1/AccountService/Accounts/readonly_user
Verify Operator User Role Change Using Admin Privilege User
[Documentation] Verify operator user role change using admin privilege user
[Tags] Verify_Operator_User_Role_Change_Using_Admin_Privilege_User
Redfish Create User admin_user TestPwd123 Administrator ${True}
Redfish Create User operator_user TestPwd123 Operator ${True}
Redfish.Logout
# Change role ID of operator user with admin user.
# Login with admin user.
Redfish.Login admin_user TestPwd123
# Modify Role ID of Operator user.
Redfish.Patch /redfish/v1/AccountService/Accounts/operator_user body={'RoleId': 'Administrator'}
# Verify modified user.
Redfish Verify User operator_user TestPwd123 Administrator ${True}
Redfish.Delete /redfish/v1/AccountService/Accounts/admin_user
Redfish.Delete /redfish/v1/AccountService/Accounts/operator_user
Verify Operator User Privilege
[Documentation] Verify operator user privilege.
[Tags] Verify_Operator_User_Privilege
Redfish Create User admin_user TestPwd123 Administrator ${True}
Redfish Create User operator_user TestPwd123 Operator ${True}
Redfish.Logout
# Login with operator user.
Redfish.Login operator_user TestPwd123
# Verify BMC reset.
Run Keyword And Expect Error ValueError* Redfish BMC Reset Operation
# Attempt to change password of admin user with operator user.
Redfish.Patch /redfish/v1/AccountService/Accounts/admin_user body={'Password': 'NewTestPwd123'}
... valid_status_codes=[${HTTP_FORBIDDEN}]
Redfish.Logout
Redfish.Login
Redfish.Delete /redfish/v1/AccountService/Accounts/admin_user
Redfish.Delete /redfish/v1/AccountService/Accounts/operator_user
Verify ReadOnly User Privilege
[Documentation] Verify ReadOnly user privilege.
[Tags] Verify_ReadOnly_User_Privilege
Redfish Create User readonly_user TestPwd123 ReadOnly ${True}
Redfish.Logout
# Login with read_only user.
Redfish.Login readonly_user TestPwd123
# Read system level data.
${system_model}= Redfish_Utils.Get Attribute
... ${SYSTEM_BASE_URI} Model
Redfish.Logout
Redfish.Login
Redfish.Delete ${REDFISH_ACCOUNTS_URI}readonly_user
Verify Minimum Password Length For Redfish User
[Documentation] Verify minimum password length for new and existing user.
[Tags] Verify_Minimum_Password_Length_For_Redfish_User
${user_name}= Set Variable testUser
# Make sure the user account in question does not already exist.
Redfish.Delete /redfish/v1/AccountService/Accounts/${user_name}
... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
# Try to create a user with invalid length password.
${payload}= Create Dictionary
... UserName=${user_name} Password=UserPwd RoleId=Administrator Enabled=${True}
Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{payload}
... valid_status_codes=[${HTTP_BAD_REQUEST}]
# Create specified user with valid length password.
Set To Dictionary ${payload} Password UserPwd1
Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{payload}
... valid_status_codes=[${HTTP_CREATED}]
# Try to change to an invalid password.
Redfish.Patch /redfish/v1/AccountService/Accounts/${user_name} body={'Password': 'UserPwd'}
... valid_status_codes=[${HTTP_BAD_REQUEST}]
# Change to a valid password.
Redfish.Patch /redfish/v1/AccountService/Accounts/${user_name} body={'Password': 'UserPwd1'}
# Verify login.
Redfish.Logout
Redfish.Login ${user_name} UserPwd1
Redfish.Logout
Redfish.Login
Redfish.Delete /redfish/v1/AccountService/Accounts/${user_name}
Verify Standard User Roles Defined By Redfish
[Documentation] Verify standard user roles defined by Redfish.
[Tags] Verify_Standard_User_Roles_Defined_By_Redfish
${member_list}= Redfish_Utils.Get Member List
... /redfish/v1/AccountService/Roles
@{roles}= Create List
... /redfish/v1/AccountService/Roles/Administrator
... /redfish/v1/AccountService/Roles/Operator
... /redfish/v1/AccountService/Roles/ReadOnly
List Should Contain Sub List ${member_list} ${roles}
# The standard roles are:
# | Role name | Assigned privileges |
# | Administrator | Login, ConfigureManager, ConfigureUsers, ConfigureComponents, ConfigureSelf |
# | Operator | Login, ConfigureComponents, ConfigureSelf |
# | ReadOnly | Login, ConfigureSelf |
@{admin}= Create List Login ConfigureManager ConfigureUsers ConfigureComponents ConfigureSelf
@{operator}= Create List Login ConfigureComponents ConfigureSelf
@{readOnly}= Create List Login ConfigureSelf
${roles_dict}= create dictionary admin_privileges=${admin} operator_privileges=${operator}
... readOnly_privileges=${readOnly}
${resp}= redfish.Get /redfish/v1/AccountService/Roles/Administrator
List Should Contain Sub List ${resp.dict['AssignedPrivileges']} ${roles_dict['admin_privileges']}
${resp}= redfish.Get /redfish/v1/AccountService/Roles/Operator
List Should Contain Sub List ${resp.dict['AssignedPrivileges']} ${roles_dict['operator_privileges']}
${resp}= redfish.Get /redfish/v1/AccountService/Roles/ReadOnly
List Should Contain Sub List ${resp.dict['AssignedPrivileges']} ${roles_dict['readOnly_privileges']}
Verify Error While Deleting Root User
[Documentation] Verify error while deleting root user.
[Tags] Verify_Error_While_Deleting_Root_User
Redfish.Delete /redfish/v1/AccountService/Accounts/root valid_status_codes=[${HTTP_FORBIDDEN}]
Verify SSH Login Access With Admin User
[Documentation] Verify that admin user have SSH login access.
... By default, admin should have access but there could be
... case where admin user shell access is restricted by design
... in the community sphere..
[Tags] Verify_SSH_Login_Access_With_Admin_User
# Create an admin User.
Redfish Create User new_admin TestPwd1 Administrator ${True}
# Attempt SSH login with admin user.
SSHLibrary.Open Connection ${OPENBMC_HOST}
${status}= Run Keyword And Return Status SSHLibrary.Login new_admin TestPwd1
# By default ssh_status is True, user can change the status via CLI
# -v ssh_status:False
Should Be Equal As Strings "${status}" "${ssh_status}"
Redfish.Login
Redfish.Delete /redfish/v1/AccountService/Accounts/new_admin
Verify Configure BasicAuth Enable And Disable
[Documentation] Verify configure basicauth enable and disable
[Tags] Verify_Configure_BasicAuth_Enable_And_Disable
[Template] Template For Configure Auth Methods
# auth_method
BasicAuth
XToken
*** Keywords ***
Test Teardown Execution
[Documentation] Do the post test teardown.
Run Keyword And Ignore Error Redfish.Logout
FFDC On Test Case Fail
Redfish Create User
[Documentation] Redfish create user.
[Arguments] ${username} ${password} ${role_id} ${enabled} ${login_check}=${True}
# Description of argument(s):
# username The username to be created.
# password The password to be assigned.
# role_id The role ID of the user to be created
# (e.g. "Administrator", "Operator", etc.).
# enabled Indicates whether the username being created
# should be enabled (${True}, ${False}).
# login_check Checks user login for created user.
# (e.g. ${True}, ${False}).
# Make sure the user account in question does not already exist.
Redfish.Delete /redfish/v1/AccountService/Accounts/${userName}
... valid_status_codes=[${HTTP_OK}, ${HTTP_NOT_FOUND}]
# Create specified user.
${payload}= Create Dictionary
... UserName=${username} Password=${password} RoleId=${role_id} Enabled=${enabled}
Redfish.Post /redfish/v1/AccountService/Accounts/ body=&{payload}
... valid_status_codes=[${HTTP_CREATED}]
# Resetting faillock count as a workaround for issue
# openbmc/phosphor-user-manager#4
${cmd}= Catenate /usr/sbin/faillock --user ${username} --reset
Bmc Execute Command ${cmd}
# Verify login with created user.
${status}= Run Keyword If '${login_check}' == '${True}'
... Verify Redfish User Login ${username} ${password}
Run Keyword If '${login_check}' == '${True}' Should Be Equal ${status} ${enabled}
# Validate Role ID of created user.
${role_config}= Redfish_Utils.Get Attribute
... /redfish/v1/AccountService/Accounts/${username} RoleId
Should Be Equal ${role_id} ${role_config}
Redfish Verify User
[Documentation] Redfish user verification.
[Arguments] ${username} ${password} ${role_id} ${enabled}
# Description of argument(s):
# username The username to be created.
# password The password to be assigned.
# role_id The role ID of the user to be created
# (e.g. "Administrator", "Operator", etc.).
# enabled Indicates whether the username being created
# should be enabled (${True}, ${False}).
${status}= Verify Redfish User Login ${username} ${password}
# Doing a check of the returned status.
Should Be Equal ${status} ${enabled}
# Validate Role Id of user.
${role_config}= Redfish_Utils.Get Attribute
... /redfish/v1/AccountService/Accounts/${username} RoleId
Should Be Equal ${role_id} ${role_config}
Verify Redfish User Login
[Documentation] Verify Redfish login with given user id.
[Teardown] Run Keywords Run Keyword And Ignore Error Redfish.Logout AND Redfish.Login
[Arguments] ${username} ${password}
# Description of argument(s):
# username Login username.
# password Login password.
# Logout from current Redfish session.
# We don't really care if the current session is flushed out since we are going to login
# with new credential in next.
Run Keyword And Ignore Error Redfish.Logout
${status}= Run Keyword And Return Status Redfish.Login ${username} ${password}
[Return] ${status}
Redfish Create And Verify User
[Documentation] Redfish create and verify user.
[Arguments] ${username} ${password} ${role_id} ${enabled}
# Description of argument(s):
# username The username to be created.
# password The password to be assigned.
# role_id The role ID of the user to be created
# (e.g. "Administrator", "Operator", etc.).
# enabled Indicates whether the username being created
# should be enabled (${True}, ${False}).
# Example:
#{
#"@odata.context": "/redfish/v1/$metadata#ManagerAccount.ManagerAccount",
#"@odata.id": "/redfish/v1/AccountService/Accounts/test1",
#"@odata.type": "#ManagerAccount.v1_0_3.ManagerAccount",
#"Description": "User Account",
#"Enabled": true,
#"Id": "test1",
#"Links": {
# "Role": {
# "@odata.id": "/redfish/v1/AccountService/Roles/Administrator"
# }
#},
Redfish Create User ${username} ${password} ${role_id} ${enabled}
Redfish Verify User ${username} ${password} ${role_id} ${enabled}
# Delete Specified User
Redfish.Delete /redfish/v1/AccountService/Accounts/${username}
Verify Redfish User with Wrong Password
[Documentation] Verify Redfish User with Wrong Password.
[Arguments] ${username} ${password} ${role_id} ${enabled} ${wrong_password}
# Description of argument(s):
# username The username to be created.
# password The password to be assigned.
# role_id The role ID of the user to be created
# (e.g. "Administrator", "Operator", etc.).
# enabled Indicates whether the username being created
# should be enabled (${True}, ${False}).
# wrong_password Any invalid password.
Redfish Create User ${username} ${password} ${role_id} ${enabled}
Redfish.Logout
# Attempt to login with created user with invalid password.
Run Keyword And Expect Error InvalidCredentialsError*
... Redfish.Login ${username} ${wrong_password}
Redfish.Login
# Delete newly created user.
Redfish.Delete /redfish/v1/AccountService/Accounts/${username}
Verify Login with Deleted Redfish User
[Documentation] Verify Login with Deleted Redfish User.
[Arguments] ${username} ${password} ${role_id} ${enabled}
# Description of argument(s):
# username The username to be created.
# password The password to be assigned.
# role_id The role ID of the user to be created
# (e.g. "Administrator", "Operator", etc.).
# enabled Indicates whether the username being created
# should be enabled (${True}, ${False}).
Redfish Create User ${username} ${password} ${role_id} ${enabled}
# Delete newly created user.
Redfish.Delete /redfish/v1/AccountService/Accounts/${userName}
Redfish.Logout
# Attempt to login with deleted user account.
Run Keyword And Expect Error InvalidCredentialsError*
... Redfish.Login ${username} ${password}
Redfish.Login
Verify Create User Without Enabling
[Documentation] Verify Create User Without Enabling.
[Arguments] ${username} ${password} ${role_id} ${enabled}
# Description of argument(s):
# username The username to be created.
# password The password to be assigned.
# role_id The role ID of the user to be created
# (e.g. "Administrator", "Operator", etc.).
# enabled Indicates whether the username being created
# should be enabled (${True}, ${False}).
Redfish Create User ${username} ${password} ${role_id} ${enabled} ${False}
Redfish.Logout
# Login with created user.
Run Keyword And Expect Error InvalidCredentialsError*
... Redfish.Login ${username} ${password}
Redfish.Login
# Delete newly created user.
Redfish.Delete /redfish/v1/AccountService/Accounts/${username}
Template For Configure Auth Methods
[Documentation] Template to configure auth methods.
[Arguments] ${auth_method}
[Teardown] Configure AuthMethods ${auth_method}=${initial_value}
# Description of Argument(s):
# authmethods The authmethod setting which needs to be
# set in account service URI.
# valid values BasicAuth, XToken.
Get AuthMethods Default Values ${auth_method}
# Patch basicauth to TRUE
Configure AuthMethods ${auth_method}=${TRUE}
Run Keyword IF "${auth_method}" == "XToken"
... Check XToken Works Fine ${HTTP_OK}
... ELSE
... Check BasicAuth Works Fine ${HTTP_OK}
# Patch basicauth to FALSE
Configure AuthMethods ${auth_method}=${FALSE}
Run Keyword IF "${auth_method}" == "BasicAuth"
... Check BasicAuth Works Fine ${HTTP_UNAUTHORIZED}
... ELSE
... Check XToken Works Fine ${HTTP_UNAUTHORIZED}
Configure AuthMethods
[Documentation] Enable/disable authmethod types.
[Arguments] &{authmethods}
# Description of argument(s):
# authmethods The authmethod setting which needs to be
# set in account service URI.
# Usage Example Configure AuthMethods XToken=${TRUE} BasicAuth=${TRUE}
# This will set the value of "XToken" and "BasicAuth"
# property in accountservice uri to TRUE.
${openbmc}= Create Dictionary AuthMethods=${authmethods}
${oem}= Create Dictionary OpenBMC=${openbmc}
${payload}= Create Dictionary Oem=${oem}
# Setting authmethod properties using Redfish session based auth
${status}= Run Keyword And Return Status
... Redfish.Patch ${REDFISH_BASE_URI}AccountService
... body=${payload} valid_status_codes=[${HTTP_OK},${HTTP_NO_CONTENT}]
# Setting authmethod properties using basic auth in case the former fails
IF ${status}==${FALSE}
# Payload dictionary pre-process to match json formatting
${payload}= Convert To String ${payload}
${payload}= Replace String ${payload} ' "
${payload}= Replace String ${payload} False false
${payload}= Replace String ${payload} True true
# Curl Command Framing for PATCH authmethod
${cmd}= Catenate curl -k -i -u ${OPENBMC_USERNAME}:${OPENBMC_PASSWORD}
... -X PATCH '${AUTH_URI}${REDFISH_ACCOUNTS_SERVICE_URI}'
... -H 'content-type:application/json' -H 'If-Match:*'
... -d '${payload}'
${rc} ${out}= Run And Return Rc And Output ${cmd}
# Check the response of curl command is 200 or 204
${check_no_content}=
... Run Keyword and Return Status Should Contain ${out} 204
${check_ok}=
... Run Keyword and Return Status Should Contain ${out} 200
Pass Execution If ${check_no_content}==${TRUE}
... OR ${check_ok}==${TRUE}
END
Get AuthMethods Default Values
[Documentation] Get enabled/disabled status of all authmethods
... from Redfish account service URI
[Arguments] ${authmethod}
# Description of argument(s):
# authmethod The authmethod property whose value needs to be
# retrieved from account service URI.
# Usage Example Get AuthMethods Default Values BasicAuth
# returns >> ${TRUE}
# Example:
# {
# "@odata.id": "/redfish/v1/AccountService",
# (...)
# "Oem": {
# "OpenBMC": {
# "AuthMethods": {
# "BasicAuth": true,
# "Cookie": true,
# "SessionToken": true,
# "TLS": true,
# "XToken": true
# }
# }
# }
# }
${resp}= Redfish.Get Attribute ${REDFISH_ACCOUNTS_SERVICE_URI} Oem
${authmethods}= Set Variable ${resp['OpenBMC']['AuthMethods']}
${initial_value}= Get From Dictionary ${authmethods} ${authmethod}
Set Test Variable ${initial_value}
Check XToken Works Fine
[Documentation] Verify Xtoken works fine.
[Arguments] ${status_code}
# Description of Argument(s):
# status_code : 200, 401.
# Verify xtoken auth works for xtoken
Redfish.Get ${REDFISH_ACCOUNTS_SERVICE_URI}
... valid_status_codes=[${status_code}]
Check BasicAuth Works Fine
[Documentation] Verify Basic Auth works fine.
[Arguments] ${status_code}
# Description of Argument(s):
# status_code : 200, 401.
# Verify basic auth works based on basic auth.
${cmd}= Catenate curl -k -i -u ${OPENBMC_USERNAME}:${OPENBMC_PASSWORD}
... ${AUTH_URI}/redfish/v1/AccountService
${rc} ${out}= Run And Return Rc And Output ${cmd}
# Check the response of curl command is 200/401
Should Contain ${out} ${status_code}