Group local user test cases

Change-Id: I8b7153d881494f4b5960a5aba4f39eef2efb4036
Signed-off-by: manashsarma <manashsarma@in.ibm.com>
diff --git a/redfish/dmtf_tools/test_redfishtool_local_user.robot b/redfish/dmtf_tools/test_redfishtool_local_user.robot
new file mode 100644
index 0000000..2785263
--- /dev/null
+++ b/redfish/dmtf_tools/test_redfishtool_local_user.robot
@@ -0,0 +1,289 @@
+*** Settings ***
+
+
+Documentation     Suite to test local user management.
+
+Library           OperatingSystem
+Library           String
+Library           Collections
+
+Resource          ../../lib/resource.robot
+Resource          ../../lib/bmc_redfish_resource.robot
+Resource          ../../lib/openbmc_ffdc.robot
+Resource          ../../lib/certificate_utils.robot
+
+
+Suite Setup       Suite Setup Execution
+
+
+*** Variables ***
+
+${root_cmd_args} =  SEPARATOR=
+...  redfishtool raw -r ${OPENBMC_HOST} -u ${OPENBMC_USERNAME} -p ${OPENBMC_PASSWORD} -S Always
+
+
+*** Test Cases ***
+
+
+Verify Redfishtool Create Users
+    [Documentation]  Create user via Redfishtool and verify.
+    [Tags]  Verify_Redfishtool_Create_Users
+    [Teardown]  Redfishtool Delete User  "UserT100"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Verify User  "UserT100"  "Operator"
+
+
+Verify Redfishtool Modify Users
+    [Documentation]  Modify user via Redfishtool and verify.
+    [Tags]  Verify_Redfishtool_Modify_Users
+    [Teardown]  Redfishtool Delete User  "UserT100"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Update User Role  "UserT100"  "Administrator"
+    Redfishtool Verify User  "UserT100"  "Administrator"
+
+
+Verify Redfishtool Delete Users
+    [Documentation]  Delete user via Redfishtool and verify.
+    [Tags]  Verify_Redfishtool_Delete_Users
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Delete User  "UserT100"
+    ${status}=  Redfishtool Verify User Name Exists  "UserT100"
+    Should Be True  ${status} == False
+
+
+Verify Redfishtool Login With Deleted Redfish Users
+    [Documentation]  Verify login with deleted user via Redfishtool.
+    [Tags]  Verify_Redfishtool_Login_With_Deleted_Redfish_Users
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Delete User  "UserT100"
+    Redfishtool Access Resource  /redfish/v1/AccountService/Accounts  "UserT100"  "TestPwd123"
+    ...  ${HTTP_UNAUTHORIZED}
+
+
+Verify Redfishtool Error Upon Creating Same Users With Different Privileges
+    [Documentation]  Verify error upon creating same users with different privileges.
+    [Tags]  Verify_Redfishtool_Error_Upon_Creating_Same_Users_With_Different_Privileges
+    [Teardown]  Redfishtool Delete User  "UserT100"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Operator"  true
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Administrator"  true
+    ...  expected_error=${HTTP_BAD_REQUEST}
+
+
+Verify Redfishtool Admin User Privilege
+    [Documentation]  Verify privilege of admin user.
+    [Tags]  Verify_Redfishtool_Admin_User_Privilege
+    [Teardown]  Run Keywords  Redfishtool Delete User  "UserT100"  AND
+    ...  Redfishtool Delete User  "UserT101"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "Administrator"  true
+
+    # Verify if an user can be added by admin
+    Redfishtool Create User  "UserT101"  "TestPwd123"  "Operator"  true  "UserT100"  "TestPwd123"
+
+
+Verify Redfishtool ReadOnly User Privilege
+    [Documentation]  Verify Redfishtool ReadOnly user privilege works.
+    [Tags]  Verify_Redfishtool_ReadOnly_User_Privilege
+    [Teardown]  Redfishtool Delete User  "UserT100"
+
+    Redfishtool Create User  "UserT100"  "TestPwd123"  "ReadOnly"  true
+    Redfishtool Access Resource  /redfish/v1/Systems/  "UserT100"  "TestPwd123"
+
+    Redfishtool Create User
+    ...  "UserT101"  "TestPwd123"  "Operator"  true  "UserT100"  "TestPwd123"  ${HTTP_FORBIDDEN}
+
+
+*** Keywords ***
+
+
+Redfishtool Access Resource
+    [Documentation]  Access resource.
+    [Arguments]  ${uri}   ${login_user}  ${login_pasword}  ${expected_error}=""
+
+    # Description of argument(s):
+    # uri            URI for resource access.
+    # login_user     The login user name used other than default root user.
+    # login_pasword  The login password.
+    # expected_error Expected error optionally provided in testcase (e.g. 401 /
+    #                authentication error, etc. )
+
+    ${user_cmd_args}=  Set Variable
+    ...  redfishtool raw -r ${OPENBMC_HOST} -u ${login_user} -p ${login_pasword} -S Always
+    Redfishtool Get  ${uri}  ${user_cmd_args}  ${expected_error}
+
+
+Is HTTP error Expected
+    [Documentation]  Check if the HTTP error is expected.
+    [Arguments]  ${cmd_output}  ${error_expected}
+
+    # Description of argument(s):
+    # cmd_output      Output of an HTTP operation.
+    # error_expected  Expected error.
+
+    @{words} =  Split String  ${error_expected}  ,
+    @{errorString}=  Split String  ${cmd_output}  ${SPACE}
+    Should Contain Any  ${errorString}  @{words}
+
+
+Redfishtool Create User
+    [Documentation]  Create new user.
+    [Arguments]  ${user_name}  ${password}  ${roleID}  ${enable}  ${login_user}=""  ${login_pasword}=""
+    ...  ${expected_error}=""
+
+    # Description of argument(s):
+    # user_name      The user name (e.g. "test", "robert", etc.).
+    # password       The user password (e.g. "0penBmc", "0penBmc1", etc.).
+    # roleID         The role of user (e.g. "Administrator", "Operator", etc.).
+    # enable         Enabled attribute of (e.g. true or false).
+    # expected_error Expected error optionally provided in testcase (e.g. 401 /
+    #                authentication error, etc. )
+
+    ${user_cmd_args}=  Set Variable
+    ...  redfishtool raw -r ${OPENBMC_HOST} -u ${login_user} -p ${login_pasword} -S Always
+    ${data}=  Set Variable
+    ...  '{"UserName":${user_name},"Password":${password},"RoleId":${roleId},"Enabled":${enable}}'
+    Run Keyword If  ${login_user} == ""
+    ...   Redfishtool Post  ${data}  /redfish/v1/AccountService/Accounts  ${root_cmd_args}  ${expected_error}
+    ...   ELSE
+    ...   Redfishtool Post  ${data}  /redfish/v1/AccountService/Accounts  ${user_cmd_args}  ${expected_error}
+
+
+Redfishtool Update User Role
+    [Documentation]  Update user role.
+    [Arguments]  ${user_name}  ${newRole}  ${login_user}=""  ${login_pasword}=""
+    ...  ${expected_error}=""
+
+    # Description of argument(s):
+    # user_name      The user name (e.g. "test", "robert", etc.).
+    # newRole        The new role of user (e.g. "Administrator", "Operator", etc.).
+    # login_user     The login user name used other than default root user.
+    # login_pasword  The login password.
+    # expected_error Expected error optionally provided in testcase (e.g. 401 /
+    #                authentication error, etc. )
+
+    ${user_cmd_args}=  Set Variable
+    ...  redfishtool raw -r ${OPENBMC_HOST} -u ${login_user} -p ${login_pasword} -S Always
+    Run Keyword If  ${login_user} == ""
+    ...   Redfishtool Patch  '{"RoleId":${newRole}}'
+          ...  /redfish/v1/AccountService/Accounts/${user_name}  ${root_cmd_args}  ${expected_error}
+    ...   ELSE
+    ...   Redfishtool Patch  '{"RoleId":${newRole}}'
+          ...  /redfish/v1/AccountService/Accounts/${user_name}  ${user_cmd_args}  ${expected_error}
+
+
+Redfishtool Delete User
+    [Documentation]  Delete an user.
+    [Arguments]  ${user_name}  ${expected_error}=""
+
+    # Description of argument(s):
+    # user_name       The user name (e.g. "test", "robert", etc.).
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    Redfishtool Delete  /redfish/v1/AccountService/Accounts/${user_name}
+    ...  ${root_cmd_args}  ${expected_error}
+
+
+Redfishtool Verify User
+    [Documentation]  Verify role of the user.
+    [Arguments]  ${user_name}  ${role}
+
+    # Description of argument(s):
+    # user_name  The user name (e.g. "test", "robert", etc.).
+    # role       The new role of user (e.g. "Administrator", "Operator", etc.).
+
+    ${user_account}=  Redfishtool Get  /redfish/v1/AccountService/Accounts/${user_name}
+    ${json_obj}=   Evaluate  json.loads('''${user_account}''')  json
+    Should Be equal  "${json_obj["RoleId"]}"  ${role}
+
+
+Redfishtool Verify User Name Exists
+    [Documentation]  Verify user name exists.
+    [Arguments]  ${user_name}
+
+    # Description of argument(s):
+    # user_name  The user name (e.g. "test", "robert", etc.).
+
+    ${status}=  Run Keyword And Return Status  redfishtool Get
+    ...  /redfish/v1/AccountService/Accounts/${user_name}
+
+    [return]  ${status}
+
+
+Redfishtool Get
+    [Documentation]  Execute redfishtool for GET operation.
+    [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # uri             URI for GET operation (e.g. /redfish/v1/AccountService/Accounts/).
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} GET ${uri}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+
+    [Return]  ${cmd_output}
+
+
+Redfishtool Post
+    [Documentation]  Execute redfishtool for  Post operation.
+    [Arguments]  ${payload}  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # payload         Payload with POST operation (e.g. data for user name, password, role,
+    #                 enabled attribute)
+    # uri             URI for POST operation (e.g. /redfish/v1/AccountService/Accounts/).
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} POST ${uri} --data=${payload}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+
+    [Return]  ${cmd_output}
+
+
+Redfishtool Patch
+    [Documentation]  Execute redfishtool for  Patch operation.
+    [Arguments]  ${payload}  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # payload         Payload with POST operation (e.g. data for user name, role, etc. ).
+    # uri             URI for PATCH operation (e.g. /redfish/v1/AccountService/Accounts/ ).
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} PATCH ${uri} --data=${payload}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+
+    [Return]  ${cmd_output}
+
+
+Redfishtool Delete
+    [Documentation]  Execute redfishtool for  Post operation.
+    [Arguments]  ${uri}  ${cmd_args}=${root_cmd_args}  ${expected_error}=""
+
+    # Description of argument(s):
+    # uri             URI for DELETE operation.
+    # cmd_args        Commandline arguments.
+    # expected_error  Expected error optionally provided in testcase (e.g. 401 /
+    #                 authentication error, etc. ).
+
+    ${rc}  ${cmd_output}=  Run and Return RC and Output  ${cmd_args} DELETE ${uri}
+    Run Keyword If  ${rc} != 0  Is HTTP error Expected  ${cmd_output}  ${expected_error}
+
+    [Return]  ${cmd_output}
+
+
+Suite Setup Execution
+    [Documentation]  Do suite setup execution.
+
+    ${tool_exist}=  Run  which redfishtool
+    Should Not Be Empty  ${tool_exist}