| *** Settings *** | 
 | Documentation    Script to test Redfish privilege registry with various users | 
 | ...  such as test, admin, operator, readonly, patched. | 
 |  | 
 | Resource         ../../lib/resource.robot | 
 | Resource         ../../lib/bmc_redfish_resource.robot | 
 | Resource         ../../lib/openbmc_ffdc.robot | 
 | Resource         ../../lib/bmc_redfish_utils.robot | 
 |  | 
 | Suite Setup      Create And Verify Various Privilege Users | 
 | Suite Teardown   Delete Created Redfish Users Except Default Admin | 
 | Test Teardown    Redfish.Logout | 
 |  | 
 | *** Variables *** | 
 |  | 
 | ${test_user}           testuser | 
 | ${test_password}       testpassword | 
 | ${admin_user}          testadmin | 
 | ${admin_password}      adminpassword | 
 | ${operator_user}       testoperator | 
 | ${operator_password}   operatorpassword | 
 | ${readonly_user}       testreadonly | 
 | ${readonly_password}   readonlypassword | 
 | ${patched_user}        patchuser | 
 | ${post_user}           postuser | 
 | ${post_password}       postpassword | 
 | ${account_service}     ${2} | 
 |  | 
 | ** Test Cases ** | 
 |  | 
 | Verify Redfish Privilege Registry Properties | 
 |     [Documentation]  Verify the Redfish Privilege Registry properties. | 
 |     [Tags]  Verify_Redfish_Privilege_Registry_Properties | 
 |  | 
 |     Redfish.Login | 
 |  | 
 |     # Get the complete Privilege Registry URL | 
 |     ${url}=   Get Redfish Privilege Registry json URL | 
 |     ${resp}=   Redfish.Get  ${url} | 
 |     Should Be Equal As Strings  ${resp.status}  ${HTTP_OK} | 
 |  | 
 |     # Verify the Privilege Registry Resource. | 
 |     # Example: | 
 |     #  "Id": "Redfish_1.1.0_PrivilegeRegistry", | 
 |     #  "Name": "Privilege Mapping array collection", | 
 |     #  "PrivilegesUsed": [ | 
 |     #     "Login", | 
 |     #     "ConfigureManager", | 
 |     #     "ConfigureUsers", | 
 |     #     "ConfigureComponents", | 
 |     #     "ConfigureSelf" | 
 |     #  ], | 
 |  | 
 |     Should Be Equal As Strings  ${resp.dict["Id"]}  Redfish_1.1.0_PrivilegeRegistry | 
 |     Should Be Equal As Strings  ${resp.dict["Name"]}  Privilege Mapping array collection | 
 |     Should Be Equal As Strings  ${resp.dict["PrivilegesUsed"][0]}  Login | 
 |     Should Be Equal As Strings  ${resp.dict["PrivilegesUsed"][1]}  ConfigureManager | 
 |     Should Be Equal As Strings  ${resp.dict["PrivilegesUsed"][2]}  ConfigureUsers | 
 |     Should Be Equal As Strings  ${resp.dict["PrivilegesUsed"][3]}  ConfigureComponents | 
 |     Should Be Equal As Strings  ${resp.dict["PrivilegesUsed"][4]}  ConfigureSelf | 
 |  | 
 | Verify Redfish Privilege Registry Mappings Properties For Account Service | 
 |     [Documentation]  Verify Privilege Registry Account Service Mappings resource properties. | 
 |     [Tags]  Verify_Redfish_Privilege_Registry_Mappings_Properties_For_Account_Service | 
 |  | 
 |     # Below is the mapping for Redfish Privilege Registry property for | 
 |     # Account Service. | 
 |  | 
 |     # "Mappings": [ | 
 |     #    { | 
 |     #        "Entity": "AccountService", | 
 |     #        "OperationMap": { | 
 |     #            "GET": [{ | 
 |     #                    "Privilege": [ | 
 |     #                        "Login" | 
 |     #                    ]}], | 
 |     #            "HEAD": [{ | 
 |     #                    "Privilege": [ | 
 |     #                        "Login" | 
 |     #                    ]}], | 
 |     #            "PATCH": [{ | 
 |     #                    "Privilege": [ | 
 |     #                        "ConfigureUsers" | 
 |     #                    ]}], | 
 |     #            "PUT": [{ | 
 |     #                    "Privilege": [ | 
 |     #                        "ConfigureUsers" | 
 |     #                    ]}], | 
 |     #            "DELETE": [{ | 
 |     #                    "Privilege": [ | 
 |     #                        "ConfigureUsers" | 
 |     #                    ]}], | 
 |     #            "POST": [{ | 
 |     #                    "Privilege": [ | 
 |     #                        "ConfigureUsers" | 
 |     #                    ]}]} | 
 |     #    } | 
 |  | 
 |     # | ROLE NAME     | ASSIGNED PRIVILEGES | 
 |     # |---------------|-------------------- | 
 |     # | Administrator | Login, ConfigureManager, ConfigureUsers, ConfigureComponents, ConfigureSelf. | 
 |     # | Operator      | Login, ConfigureComponents, ConfigureSelf. | 
 |     # | ReadOnly      | Login, ConfigureSelf. | 
 |  | 
 |     # Get the complete Privilege Registry URL. | 
 |     ${url}=   Get Redfish Privilege Registry json URL | 
 |     ${resp}=   Redfish.Get  ${url} | 
 |  | 
 |     # Get mappings properties for Entity: Account Service. | 
 |     @{mappings}=  Get From Dictionary  ${resp.dict}  Mappings | 
 |  | 
 |     Should Be Equal   ${mappings[${account_service}]['OperationMap']['GET'][0]['Privilege'][0]} | 
 |     ...   Login | 
 |     Should Be Equal   ${mappings[${account_service}]['OperationMap']['HEAD'][0]['Privilege'][0]} | 
 |     ...   Login | 
 |     Should Be Equal   ${mappings[${account_service}]['OperationMap']['PATCH'][0]['Privilege'][0]} | 
 |     ...   ConfigureUsers | 
 |     Should Be Equal   ${mappings[${account_service}]['OperationMap']['PUT'][0]['Privilege'][0]} | 
 |     ...   ConfigureUsers | 
 |     Should Be Equal   ${mappings[${account_service}]['OperationMap']['DELETE'][0]['Privilege'][0]} | 
 |     ...   ConfigureUsers | 
 |     Should Be Equal   ${mappings[${account_service}]['OperationMap']['POST'][0]['Privilege'][0]} | 
 |     ...   ConfigureUsers | 
 |  | 
 | Verify Admin User Privileges Via Redfish | 
 |     [Documentation]  Verify Admin user privileges via Redfish. | 
 |     [Tags]  Verify_Admin_User_Privileges_Via_Redfish | 
 |  | 
 |     Redfish.Login   ${admin_user}   ${admin_password} | 
 |  | 
 |     ${payload}=  Create Dictionary | 
 |     ...  UserName=${post_user}  Password=${post_password}  RoleId=Operator  Enabled=${true} | 
 |     Redfish.Post  ${REDFISH_ACCOUNTS_URI}  body=&{payload} | 
 |     ...  valid_status_codes=[${HTTP_CREATED}] | 
 |  | 
 |     ${data}=  Create Dictionary  UserName=${patched_user} | 
 |     Redfish.patch  ${REDFISH_ACCOUNTS_URI}${test_user}  body=&{data} | 
 |     ...  valid_status_codes=[${HTTP_OK}, ${HTTP_NO_CONTENT}] | 
 |  | 
 |     ${patched_user_name}=   Redfish.Get Attribute  ${REDFISH_ACCOUNTS_URI}${patched_user}  UserName | 
 |     Should Be Equal  ${patched_user_name}  ${patched_user} | 
 |  | 
 | Verify Operator User Privileges Via Redfish | 
 |     [Documentation]  Verify Operator user privileges via Redfish. | 
 |     [Tags]  Verify_Operator_User_Privileges_Via_Redfish | 
 |  | 
 |     Redfish.Login   ${operator_user}   ${operator_password} | 
 |  | 
 |     ${payload}=  Create Dictionary | 
 |     ...  UserName=${post_user}  Password=${post_password}  RoleId=Operator  Enabled=${true} | 
 |     Redfish.Post  ${REDFISH_ACCOUNTS_URI}  body=&{payload} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |     ${data}=  Create Dictionary  UserName=${patched_user} | 
 |     Redfish.patch  ${REDFISH_ACCOUNTS_URI}${test_user}  body=&{data} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |     Redfish.Get   ${REDFISH_ACCOUNTS_URI}${patched_user} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |     Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${patched_user} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 | Verify ReadOnly User Privileges Via Redfish | 
 |     [Documentation]  Verify ReadOnly user privileges via Redfish. | 
 |     [Tags]  Verify_ReadOnly_User_Privileges_Via_Redfish | 
 |  | 
 |     Redfish.Login   ${readonly_user}   ${readonly_password} | 
 |  | 
 |     ${payload}=  Create Dictionary | 
 |     ...  UserName=${post_user}  Password=${post_password}  RoleId=Operator  Enabled=${true} | 
 |     Redfish.Post  ${REDFISH_ACCOUNTS_URI}  body=&{payload} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |     ${data}=  Create Dictionary  UserName=${patched_user} | 
 |     Redfish.patch  ${REDFISH_ACCOUNTS_URI}${test_user}  body=&{data} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |     Redfish.Get  ${REDFISH_ACCOUNTS_URI}${patched_user} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |     Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${patched_user} | 
 |     ...  valid_status_codes=[${HTTP_FORBIDDEN}] | 
 |  | 
 |  | 
 | *** Keywords *** | 
 |  | 
 | Get Redfish Privilege Registry Json URL | 
 |     [Documentation]  Return the complete Privilege Registry Json URL. | 
 |  | 
 |     # Get Privilege Registry version Json path in redfish. | 
 |     # Example: Redfish_1.1.0_PrivilegeRegistry.json | 
 |  | 
 |     ${resp}=  Redfish.Get | 
 |     ...  /redfish/v1/Registries/PrivilegeRegistry/ | 
 |     @{location}=  Get From Dictionary  ${resp.dict}  Location | 
 |     ${uri}=   Set Variable   ${location[0]['Uri']} | 
 |     RETURN   ${uri} | 
 |  | 
 | Create And Verify Various Privilege Users | 
 |     [Documentation]  Create and verify admin, test, operator, and readonly users. | 
 |  | 
 |     Redfish Create User   ${test_user}  ${test_password}  Operator  ${true} | 
 |     Redfish Create User   ${admin_user}  ${admin_password}  Administrator  ${true} | 
 |     Redfish Create User   ${operator_user}  ${operator_password}  Operator  ${true} | 
 |     Redfish Create User   ${readonly_user}  ${readonly_password}  ReadOnly  ${true} | 
 |  | 
 |     Redfish Verify User   ${test_user}  ${test_password}  Operator | 
 |     Redfish Verify User   ${admin_user}  ${admin_password}  Administrator | 
 |     Redfish Verify User   ${operator_user}  ${operator_password}  Operator | 
 |     Redfish Verify User   ${readonly_user}  ${readonly_password}  ReadOnly | 
 |  | 
 | Redfish Verify User | 
 |     [Documentation]  Verify Redfish user with given credentials. | 
 |     [Arguments]   ${username}  ${password}  ${role_id} | 
 |  | 
 |     # 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.). | 
 |  | 
 |     Run Keyword And Ignore Error  Redfish.Logout | 
 |     Redfish.Login  ${username}  ${password} | 
 |  | 
 |     # Validate Role Id of user. | 
 |     ${role_config}=  Redfish_Utils.Get Attribute | 
 |     ...  /redfish/v1/AccountService/Accounts/${username}  RoleId | 
 |     Should Be Equal  ${role_id}  ${role_config} | 
 |     Redfish.Logout | 
 |  | 
 | Delete Created Redfish Users Except Default Admin | 
 |     [Documentation]  Delete the admin, patched, operator, readonly, and post users. | 
 |  | 
 |     Redfish.Login | 
 |     Run Keyword And Ignore Error  Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${admin_user} | 
 |     ...  valid_status_codes=[${HTTP_OK}] | 
 |     Run Keyword And Ignore Error  Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${patched_user} | 
 |     ...  valid_status_codes=[${HTTP_OK}] | 
 |     Run Keyword And Ignore Error  Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${operator_user} | 
 |     ...  valid_status_codes=[${HTTP_OK}] | 
 |     Run Keyword And Ignore Error  Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${readonly_user} | 
 |     ...  valid_status_codes=[${HTTP_OK}] | 
 |     Run Keyword And Ignore Error  Redfish.Delete  ${REDFISH_ACCOUNTS_URI}${post_user} | 
 |     ...  valid_status_codes=[${HTTP_OK}] | 
 |     Redfish.Logout |