*** Settings ***

Documentation       This suite is for testing Open BMC user account management.
...                 The randomness of the string generated is limited to the
...                 instance per test case however we end up running multiple
...                 test and multiple iteration. This creates scenario where
...                 the same previous user is generated.
...                 As a good pratice, clean up all the users at the end of
...                 test.

Resource            ../lib/rest_client.robot
Resource            ../lib/utils.robot
Resource            ../lib/openbmc_ffdc.robot

Library             OperatingSystem
Library             SSHLibrary
Library             String
Test Teardown       FFDC On Test Case Fail

*** Variables ***
${RANDOM_STRING_LENGTH}    ${8}
${VALID_PASSWORD}          abc123
${NON_EXISTING_USER}       aaaaa
*** Test Cases ***

Create and delete user group
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is for testing user group creation
    ...                 and deletion in open bmc.\n
    [Tags]  Create_and_delete_user_group

    ${groupname} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${resp} =    Create UserGroup    ${groupname}
    Should Be Equal    ${resp}    ok
    ${usergroup_list} =    Get GroupListUsr
    Should Contain     ${usergroup_list}    ${groupname}
    ${resp} =    Delete Group    ${groupname}
    Should Be Equal    ${resp}    ok

Create and delete user without group name
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is for testing user creation with
    ...                 without groupname in open bmc.\n
    [Tags]              Create_and_delete_user_without_group_name

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create User    ${comment}    ${username}    ${EMPTY}    ${password}
    Should Be Equal    ${resp}    ok
    ${user_list} =    Get UserList
    Should Contain     ${user_list}    ${username}

    Login BMC    ${username}    ${password}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

    ${resp} =    Delete User    ${username}
    Should Be Equal    ${resp}    ok

Create and delete user with user group name
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is for testing user creation with
    ...                 user name, password, comment and group name(user group)
    ...                 in open bmc.\n
    [Tags]              Create_and_delete_user_with_user_group_name

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${groupname} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create UserGroup    ${groupname}
    Should Be Equal    ${resp}    ok
    ${resp} =    Create User    ${comment}    ${username}    ${groupname}    ${password}
    Should Be Equal    ${resp}    ok
    ${user_list} =    Get UserList
    Should Contain     ${user_list}    ${username}

    Login BMC    ${username}    ${password}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

    ${resp} =    Delete User    ${username}
    Should Be Equal    ${resp}    ok
    ${resp} =    Delete Group    ${groupname}
    Should Be Equal    ${resp}    ok

Create multiple users
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to verify that multiple users creation
    ...                 in open bmc.\n
    [Tags]              Create_multiple_users

    : FOR    ${INDEX}    IN RANGE    1    10
        \    Log    ${INDEX}
        \    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
        \    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
        \    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}
        \    ${resp} =    Create User    ${comment}    ${username}    ${EMPTY}    ${password}
        \    Should Be Equal    ${resp}    ok
        \    ${user_list} =    Get UserList
        \    Should Contain     ${user_list}    ${username}
        \    Login BMC    ${username}    ${password}
        \    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
        \    Should Be Equal    ${rc}    ${0}

Create and delete user without password
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to create and delete a user without password
    ...                 in open bmc.\n
    [Tags]              Create_and_delete_user_without_password

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${groupname} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create UserGroup    ${groupname}
    Should Be Equal    ${resp}    ok
    ${resp} =    Create User    ${comment}    ${username}    ${groupname}    ${EMPTY}
    Should Be Equal    ${resp}    ok
    ${user_list} =    Get UserList
    Should Contain     ${user_list}    ${username}

    Login BMC    ${username}    ${EMPTY}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

    ${resp} =    Delete User    ${username}
    Should Be Equal    ${resp}    ok
    ${resp} =    Delete Group    ${groupname}
    Should Be Equal    ${resp}    ok

Set password for existing user
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is for testing password set for user
    ...                 in open bmc.\n
    [Tags]              Set_password_for_existing_user

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create User    ${comment}    ${username}    ${EMPTY}    ${password}
    Should Be Equal    ${resp}    ok
    ${user_list} =    Get UserList
    Should Contain     ${user_list}    ${username}

    Login BMC    ${username}    ${password}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

    ${resp} =    Change Password    ${username}    ${VALID_PASSWORD}
    Should Be Equal    ${resp}    ok

    Login BMC    ${username}    ${VALID_PASSWORD}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

    ${resp} =    Delete User    ${username}
    Should Be Equal    ${resp}    ok

Set password with empty password for existing
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to verify that empty password can be set
    ...                 for a existing user.\n
    [Tags]              Set_password_with_empty_password_for_existing

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create User    ${comment}    ${username}    ${EMPTY}    ${password}
    Should Be Equal    ${resp}    ok
    ${user_list} =    Get UserList
    Should Contain     ${user_list}    ${username}

    Login BMC    ${username}    ${password}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

    ${resp} =    Change Password    ${username}    ${EMPTY}
    Should Be Equal    ${resp}    ok

    Login BMC    ${username}    ${EMPTY}
    ${rc}=    Execute Command    echo Login    return_stdout=False    return_rc=True
    Should Be Equal    ${rc}    ${0}

Set password for non existing user
    [Documentation]     ***BAD PATH***
    ...                 This testcase is for testing password set for non-existing user
    ...                 in open bmc.\n
    [Tags]              Set_password_for_non_existing_user

    ${resp} =    Change Password    ${NON_EXISTING_USER}    ${VALID_PASSWORD}
    Should Be Equal    ${resp}    error

Create existing user
    [Documentation]     ***BAD PATH***
    ...                 This testcase is for checking that user creation is not allowed
    ...                 for existing user in open bmc.\n
    [Tags]              Create_existing_user

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create User    ${comment}    ${username}    ${EMPTY}    ${EMPTY}
    Should Be Equal    ${resp}    ok
    ${resp} =    Create User    ${comment}    ${username}    ${EMPTY}    ${EMPTY}
    Should Be Equal    ${resp}    error

    ${resp} =    Delete User    ${username}
    Should Be Equal    ${resp}    ok

Create user with no name
    [Documentation]     ***BAD PATH***
    ...                 This testcase is for checking that user creation is not allowed
    ...                 with empty username in open bmc.\n
    [Tags]              Create_user_with_no_name

    ${username} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${password} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${comment} =    Generate Random String    ${RANDOM_STRING_LENGTH}
    ${groupname} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create User    ${comment}    ${EMPTY}    ${groupname}    ${password}
    Should Be Equal    ${resp}    error
    ${user_list} =    Get UserList
    Should Not Contain     ${user_list}    ${EMPTY}

Create existing user group
    [Documentation]     ***BAD PATH***
    ...                 This testcase is for checking that user group creation is not allowed
    ...                 for existing user group in open bmc.\n
    [Tags]              Create_existing_user_group

    ${groupname} =    Generate Random String    ${RANDOM_STRING_LENGTH}

    ${resp} =    Create UserGroup    ${groupname}
    Should Be Equal    ${resp}    ok
    ${resp} =    Create UserGroup    ${groupname}
    Should Be Equal    ${resp}    error

    ${resp} =    Delete Group    ${groupname}
    Should Be Equal    ${resp}    ok

Create user group with no name
    [Documentation]     ***BAD PATH***
    ...                 This testcase is for checking that user group creation is not allowed
    ...                 with empty groupname in open bmc.\n
    [Tags]              Create_user_group_with_no_name

    ${resp} =    Create UserGroup    ${EMPTY}
    Should Be Equal    ${resp}    error
    ${usergroup_list} =    Get GroupListUsr
    Should Not Contain    ${usergroup_list}    ${EMPTY}

Cleanup Users List
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to clean up multiple users created by
    ...                 the test so as to leave the system in cleaner state.
    ...                 This is a no-op if there is no user list on the BMC.
    [Tags]  Cleanup_Users_List

    ${user_list} =    Get UserList
    : FOR   ${username}   IN   @{user_list}
    \    ${resp} =    Delete User    ${username}
    \    Should Be Equal    ${resp}    ok


*** Keywords ***

Get UserList
    ${data} =   create dictionary   data=@{EMPTY}
    ${resp} =   OpenBMC Post Request   /org/openbmc/UserManager/Users/action/UserList   data=${data}
    should be equal as strings    ${resp.status_code}    ${HTTP_OK}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['data']}

Get GroupListUsr
    ${data} =   create dictionary   data=@{EMPTY}
    ${resp} =   OpenBMC Post Request   /org/openbmc/UserManager/Groups/action/GroupListUsr   data=${data}
    should be equal as strings    ${resp.status_code}    ${HTTP_OK}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['data']}

Create User
    [Arguments]    ${comment}    ${username}    ${groupname}    ${password}
    @{user_list} =   Create List     ${comment}    ${username}    ${groupname}    ${password}
    ${data} =   create dictionary   data=@{user_list}
    ${resp} =   OpenBMC Post Request    /org/openbmc/UserManager/Users/action/UserAdd      data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}

Change Password
    [Arguments]    ${username}    ${password}
    @{user_list} =   Create List     ${username}    ${password}
    ${data} =   create dictionary   data=@{user_list}
    ${resp} =   OpenBMC Post Request    /org/openbmc/UserManager/User/action/Passwd      data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}

Create UserGroup
    [Arguments]    ${args}
    @{group_list} =   Create List     ${args}
    ${data} =   create dictionary   data=@{group_list}
    ${resp} =   OpenBMC Post Request    /org/openbmc/UserManager/Groups/action/GroupAddUsr      data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}

Delete Group
    [Arguments]    ${args}
    @{group_list} =   Create List     ${args}
    ${data} =   create dictionary   data=@{group_list}
    ${resp} =   OpenBMC Post Request    /org/openbmc/UserManager/Group/action/GroupDel      data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}

Delete User
    [Arguments]    ${args}
    @{user_list} =   Create List     ${args}
    ${data} =   create dictionary   data=@{user_list}
    ${resp} =   OpenBMC Post Request    /org/openbmc/UserManager/User/action/Userdel      data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}

Login BMC
    [Arguments]    ${username}    ${password}
    Open connection     ${OPENBMC_HOST}
    ${resp} =   Login   ${username}    ${password}
    [return]    ${resp}
