*** Settings ***

Documentation       This suite is for testing syslog function of Open BMC.

Resource            ../lib/rest_client.robot
Resource            ../lib/utils.robot
Resource            ../lib/ipmi_client.robot

Library             OperatingSystem
Library             SSHLibrary

*** Variables ***
${INVALID_SYSLOG_IP_ADDRESS}      a.ab.c.d
${INVALID_SYSLOG_PORT}            abc
${SYSTEM_SHUTDOWN_TIME}           1min
${WAIT_FOR_SERVICES_UP}           3min

*** Test Cases ***

Get all Syslog settings
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to get all syslog settings from
    ...                 open bmc system.\n

    ${ip_address} =    Read Attribute    /org/openbmc/LogManager/rsyslog   ipaddr
    Should Not Be Empty     ${ip_address}

    ${port} =    Read Attribute    /org/openbmc/LogManager/rsyslog   port
    Should Not Be Empty     ${port}

    ${status} =    Read Attribute    /org/openbmc/LogManager/rsyslog   status
    Should Not Be Empty     ${status}

Enable syslog with port number and IP address
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to enable syslog with both ip address
    ...                 and port number of remote system.\n

    ${resp} =    Enable Syslog Setting    ${SYSLOG_IP_ADDRESS}    ${SYSLOG_PORT}
    Should Be Equal    ${resp}    ok
    ${ip}=   Read Attribute   /org/openbmc/LogManager/rsyslog   ipaddr
    Should Be Equal    ${ip}    ${SYSLOG_IP_ADDRESS}
    ${port}=   Read Attribute   /org/openbmc/LogManager/rsyslog   port
    Should Be Equal    ${port}    ${SYSLOG_PORT}

Enable syslog without IP address and port number
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to enable syslog without changing ip address
    ...                 and port number.\n

    ${resp} =    Enable Syslog Setting    ${EMPTY}    ${EMPTY}
    Should Be Equal    ${resp}    ok
    ${status}=   Read Attribute   /org/openbmc/LogManager/rsyslog   status
    Should Be Equal    ${status}    Enabled

Enable syslog with only IP address
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to enable syslog with only ip address.\n

    ${resp} =    Enable Syslog Setting    ${SYSLOG_IP_ADDRESS}    ${EMPTY}
    Should Be Equal    ${resp}    ok
    ${ip}=   Read Attribute   /org/openbmc/LogManager/rsyslog   ipaddr
    Should Be Equal    ${ip}    ${SYSLOG_IP_ADDRESS}
    ${status}=   Read Attribute   /org/openbmc/LogManager/rsyslog   status
    Should Be Equal    ${status}    Enabled

Enable Syslog with only port number
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to enable syslog with only port number.\n

    ${status}=   Read Attribute   /org/openbmc/LogManager/rsyslog   status
    Should Be Equal    ${status}    Enabled
    ${resp} =    Enable Syslog Setting    ${EMPTY}    ${SYSLOG_PORT}
    Should Be Equal    ${resp}    ok
    ${port}=   Read Attribute   /org/openbmc/LogManager/rsyslog   port
    Should Be Equal    ${port}    ${SYSLOG_PORT}
    ${status}=   Read Attribute   /org/openbmc/LogManager/rsyslog   status
    Should Be Equal    ${status}    Enabled

Disable Syslog
    [Documentation]     ***GOOD PATH***
    ...                 This testcase is to verify disabling syslog.\n

    ${resp} =    Disable Syslog Setting    ${EMPTY}
    Should Be Equal    ${resp}    ok
    ${status}=   Read Attribute   /org/openbmc/LogManager/rsyslog   status
    Should Be Equal    Disable    ${status}

Enable invalid ip for Syslog remote server
    [Documentation]     ***BAD PATH***
    ...                 This testcase is to verify error while enabling syslog with
    ...                 invalid ip address.\n

    ${resp} =    Enable Syslog Setting    ${INVALID_SYSLOG_IP_ADDRESS}    ${SYSLOG_PORT}
    Should Be Equal    ${resp}    error

Enable invalid port for Syslog remote server
    [Documentation]     ***BAD PATH***
    ...                 This testcase is to verify error while enabling syslog with
    ...                 invalid port number.\n

    ${resp} =    Enable Syslog Setting    ${SYSLOG_IP_ADDRESS}    ${INVALID_SYSLOG_PORT}
    Should Be Equal    ${resp}    error


Persistency check for syslog setting
    [Documentation]   This test case is to verify that syslog setting does not change
    ...               after service processor reboot.

    ${old_ip}=   Read Attribute   /org/openbmc/LogManager/rsyslog   ipaddr
    ${old_port}=   Read Attribute   /org/openbmc/LogManager/rsyslog   port
    ${old_status} =    Read Attribute    /org/openbmc/LogManager/rsyslog   status
    
    Open Connection And Log In
    ${output}=      Execute Command    /sbin/reboot
    Sleep   ${SYSTEM_SHUTDOWN_TIME}
    Wait For Host To Ping   ${OPENBMC_HOST}
    Sleep   ${WAIT_FOR_SERVICES_UP}

    ${ip_address} =    Read Attribute    /org/openbmc/LogManager/rsyslog   ipaddr
    ${port} =    Read Attribute    /org/openbmc/LogManager/rsyslog   port
    ${status} =    Read Attribute    /org/openbmc/LogManager/rsyslog   status

    Should Be Equal    ${old_ip}    ${ip_address}
    Should Be Equal    ${old_port}    ${port}
    Should Be Equal    ${old_status}    ${status}

*** Keywords ***

Enable Syslog Setting
    [Arguments]    ${ipaddr}    ${port}
    ${MYDICT}=  create Dictionary   ipaddr=${ipaddr}  port=${port}
    @{rsyslog} =   Create List     ${MYDICT}
    ${data} =   create dictionary   data=@{rsyslog}
    ${resp} =   openbmc post request    /org/openbmc/LogManager/rsyslog/action/Enable     data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}

Disable Syslog Setting
    [Arguments]    ${args}
    @{setting_list} =   Create List     ${args}
    ${data} =   create dictionary   data=@{setting_list}
    ${resp} =   OpenBMC Post Request    /org/openbmc/LogManager/rsyslog/action/Disable      data=${data}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['status']}
