|  | *** Settings *** | 
|  | Documentation   OpenBMC user management keywords. | 
|  |  | 
|  | Resource         ../lib/rest_client.robot | 
|  | Resource         ../lib/utils.robot | 
|  | Library          SSHLibrary | 
|  |  | 
|  | *** Keywords *** | 
|  |  | 
|  | Create Group And Privilege | 
|  | [Documentation]  Create group and privilege for users. | 
|  | [Arguments]  ${user_group}  ${user_privilege} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # user_group      User group. | 
|  | # user_privilege  User privilege like priv-admin, priv-user. | 
|  |  | 
|  | @{ldap_parm_list}=  Create List  ${user_group}  ${user_privilege} | 
|  |  | 
|  | ${data}=  Create Dictionary  data=@{ldap_parm_list} | 
|  |  | 
|  | ${resp}=  OpenBMC Post Request | 
|  | ...  ${BMC_USER_URI}ldap/action/Create  data=${data} | 
|  | Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
|  | ...  msg=Updating the new root password failed. RC=${resp.status_code}. | 
|  |  | 
|  |  | 
|  | Create Privilege | 
|  | [Documentation]  Create privilege as priv-admin. | 
|  | [Arguments]  ${user_privilege} | 
|  |  | 
|  | Create Group And Privilege  ${group_name}=${GROUP_NAME}  ${user_privilege} | 
|  | ${bmc_user_uris}=  Read Properties  ${BMC_USER_URI}ldap/enumerate | 
|  | # Sample output: | 
|  | # "data": { | 
|  | #  "/xyz/openbmc_project/user/ldap/13": { | 
|  | #  "GroupName": "redfish", | 
|  | #  "Privilege": "priv-admin" | 
|  | # }, | 
|  | # "/xyz/openbmc_project/user/ldap/15": { | 
|  | #  "GroupName": "openldapgroup", | 
|  | #  "Privilege": "priv-admin" | 
|  | # }, | 
|  | # "/xyz/openbmc_project/user/ldap/config": { | 
|  | #  "LDAPBaseDN": "dc=ldap,dc=com", | 
|  | #  "LDAPBindDN": "cn=Administrator,dc=ldap,dc=com", | 
|  | #  "LDAPSearchScope": "xyz.openbmc_project.User.Ldap.Config.SearchScope.sub", | 
|  | #  "LDAPServerURI": "ldaps://xxx.xxx.xxx.xxx/", | 
|  | #  "LDAPType": "xyz.openbmc_project.User.Ldap.Config.Type.OpenLdap" | 
|  | # } | 
|  | #} | 
|  |  | 
|  | ${bmc_user_uris}=  Convert To String  ${bmc_user_uris} | 
|  | Should Contain  ${bmc_user_uris}  ${user_privilege} | 
|  | ...  msg=Could not create ${user_privilege} privilege. | 
|  |  | 
|  |  | 
|  | Suite Setup Execution | 
|  | [Documentation]  Do the initial suite setup. | 
|  |  | 
|  | # Validating external user parameters. | 
|  | Should Not Be Empty  ${LDAP_SERVER_URI} | 
|  | Should Not Be Empty  ${LDAP_BIND_DN} | 
|  | Should Not Be Empty  ${LDAP_BASE_DN} | 
|  | Should Not Be Empty  ${LDAP_BIND_DN_PASSWORD} | 
|  | Should Not Be Empty  ${LDAP_SEARCH_SCOPE} | 
|  | Should Not Be Empty  ${LDAP_SERVER_TYPE} | 
|  |  | 
|  | Check LDAP Service Running | 
|  | [Documentation]  Check LDAP service running in BMC. | 
|  |  | 
|  | BMC Execute Command  systemctl | grep -in ldap | 
|  |  | 
|  |  | 
|  | Configure LDAP Server On BMC | 
|  | [Documentation]  Configure LDAP Server On BMC. | 
|  |  | 
|  | @{ldap_parm_list}=  Create List | 
|  | ...  ${LDAP_SERVER_URI}  ${LDAP_BIND_DN} | 
|  | ...  ${LDAP_BASE_DN}  ${LDAP_BIND_DN_PASSWORD}  ${LDAP_SEARCH_SCOPE} | 
|  | ...  ${LDAP_SERVER_TYPE} | 
|  |  | 
|  | ${data}=  Create Dictionary  data=@{ldap_parm_list} | 
|  |  | 
|  | ${resp}=  OpenBMC Post Request | 
|  | ...  ${BMC_LDAP_URI}/action/CreateConfig  data=${data} | 
|  | Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
|  |  | 
|  |  | 
|  | Check LDAP Config File Generated | 
|  | [Documentation]  Check LDAP file nslcd.conf generated. | 
|  | [Arguments]  ${ldap_server_uri}=${LDAP_SERVER_URI} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # ldap_server_uri  The LDAP server uri (e.g. "ldap://x.x.x.x/" for non-secured or | 
|  | # ""ldaps://x.x.x.x/"" for secured). | 
|  |  | 
|  | ${ldap_server_config}=  Read Properties  ${BMC_USER_URI}ldap/enumerate | 
|  | ${ldap_server_config}=  Convert To String  ${ldap_server_config} | 
|  | Should Contain  ${ldap_server_config}  ${ldap_server_uri} | 
|  | ...  msg=${ldap_server_uri} is not configured. | 
|  |  | 
|  |  | 
|  | Delete LDAP Config | 
|  | [Documentation]  Delete LDAP Config via REST. | 
|  |  | 
|  | ${data}=  Create Dictionary  data=@{EMPTY} | 
|  | ${resp}=  OpenBMC Post Request | 
|  | ...  ${BMC_LDAP_URI}/config/action/delete  data=${data} | 
|  |  | 
|  | Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} | 
|  |  | 
|  |  | 
|  | Check LDAP Config File Deleted | 
|  | [Documentation]  Check LDAP file nslcd.conf deleted. | 
|  |  | 
|  | ${ldap_server_config}=  Read Properties  ${BMC_USER_URI}ldap/enumerate | 
|  | ${ldap_server_config}=  Convert To String  ${ldap_server_config} | 
|  |  | 
|  | Should Not Contain  ${ldap_server_config}  ${LDAP_SERVER_URI} | 
|  | ...  msg=${ldap_server_config} is not configured. | 
|  |  | 
|  |  | 
|  | Modify LDAP Search Scope | 
|  | [Documentation]  Modify LDAP search scope parameter in LDAP config. | 
|  | [Arguments]  ${search_scope}=${LDAP_SEARCH_SCOPE} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # search_scope  Contains ldap search scope (e.g. "xyz.openbmc_project.User.Ldap.Config.SearchScope.one"). | 
|  |  | 
|  | ${search_scope_dict}=  Create Dictionary  data=${search_scope} | 
|  | Write Attribute  ${BMC_LDAP_URI}/config   LDAPSearchScope  data=${search_scope_dict} | 
|  | ...  verify=${True}  expected_value=${search_scope} | 
|  |  | 
|  |  | 
|  | Modify LDAP Server Type | 
|  | [Documentation]  Modify LDAP server type parameter in LDAP config. | 
|  | [Arguments]  ${ldap_type}=${LDAP_SERVER_TYPE} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # ldap_type Contains ldap server type (e.g. "xyz.openbmc_project.User.Ldap.Config.Type.ActiveDirectory"). | 
|  |  | 
|  | ${ldap_type_dict}=  Create Dictionary  data=${ldap_type} | 
|  | Write Attribute  ${BMC_LDAP_URI}/config   LDAPType  data=${ldap_type_dict} | 
|  | ...  verify=${True}  expected_value=${ldap_type} | 
|  |  | 
|  |  | 
|  | Get LDAP Entries | 
|  | [Documentation]  Get LDAP entries and return the object list. | 
|  |  | 
|  | ${ldap_entry_list}=  Create List | 
|  | ${resp}=  OpenBMC Get Request  ${BMC_USER_URI}ldap/enumerate  quiet=${1} | 
|  | Return From Keyword If  ${resp.status_code} == ${HTTP_NOT_FOUND} | 
|  | ${jsondata}=  To JSON  ${resp.content} | 
|  |  | 
|  | :FOR  ${entry}  IN  @{jsondata["data"]} | 
|  | \  Continue For Loop If  '${entry.rsplit('/', 1)[1]}' == 'callout' | 
|  | \  Append To List  ${ldap_entry_list}  ${entry} | 
|  |  | 
|  | # LDAP entries list. | 
|  | # ['/xyz/openbmc_project/user/ldap/1', | 
|  | #  '/xyz/openbmc_project/user/ldap/2'] | 
|  | [Return]  ${ldap_entry_list} | 
|  |  | 
|  |  | 
|  | Defined LDAP Group Entry Should Exist | 
|  | [Documentation]  Find the matching group and return the entry id. | 
|  | [Arguments]  ${user_group} | 
|  |  | 
|  | # Description of argument(s): | 
|  | # user_group  A space-delimited list of user group (e.g. "Domain Admins"). | 
|  |  | 
|  | @{ldap_entries}=  Get LDAP Entries | 
|  |  | 
|  | :FOR  ${ldap_entry}  IN  @{ldap_entries} | 
|  | \  ${resp}=  Read Properties  ${ldap_entry} | 
|  | \  ${status}=  Run Keyword And Return Status | 
|  | ...  Should Be Equal As Strings  ${user_group}  ${resp["GroupName"]} | 
|  | \  Return From Keyword If  ${status} == ${TRUE}  ${ldap_entry} | 
|  |  | 
|  | Fail  No ${user_group} LDAP user group entry found. | 
|  |  | 
|  |  | 
|  | Delete Defined LDAP Group And Privilege | 
|  | [Documentation]  Delete LDAP group and its privilege. | 
|  | [Arguments]  ${user_group} | 
|  | # user_group(s)   contain LDAP user group string. Example: "Domain Admins" | 
|  |  | 
|  | # Description of argument(s): | 
|  |  | 
|  | ${ldap_entry_id}=   Defined LDAP Group Entry Should Exist  ${user_group} | 
|  | ${data}=  Create Dictionary  data=@{EMPTY} | 
|  | ${resp}=  OpenBMC Post Request  ${ldap_entry_id}/action/delete  data=${data} | 
|  | Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK} |