*** Settings ***
Documentation     This suite is used for testing eventlog association.

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

Library           Collections

Suite Setup       Suite Initialization Setup
Suite Teardown    Close All Connections

Test Teardown     Log FFDC

*** Variables ***

${SYSTEM_SHUTDOWN_TIME}           1min

${WAIT_FOR_SERVICES_UP}           3min

${CREATE_ERROR_SINGLE_FRU}        busctl call org.openbmc.records.events /org/openbmc/records/events org.openbmc.recordlog acceptHostMessage sssay "Error" "Testing failure" "/org/openbmc/inventory/system/chassis/motherboard/dimm1" 1 1

${CREATE_ERROR_INVALID_FRU}       busctl call org.openbmc.records.events /org/openbmc/records/events org.openbmc.recordlog acceptHostMessage sssay "Error" "Testing with invalid FRU" "abc" 1 1

${CREATE_ERROR_NO_FRU}            busctl call org.openbmc.records.events /org/openbmc/records/events org.openbmc.recordlog acceptHostMessage sssay "Error" "Testing with no fru" "" 1 1

${CREATE_ERROR_VIRTUAL_SENSOR}    busctl call org.openbmc.records.events /org/openbmc/records/events org.openbmc.recordlog acceptHostMessage sssay "Error" "Testing with a virtual sensor" "/org/openbmc/inventory/system/systemevent " 1 1

${DIMM1_URI}                      /org/openbmc/inventory/system/chassis/motherboard/dimm1

${DIMM2_URI}                      /org/openbmc/inventory/system/chassis/motherboard/dimm2

${DIMM3_URI}                      /org/openbmc/inventory/system/chassis/motherboard/dimm3

&{NIL}                            data=@{EMPTY}

${EVENT_RECORD}                   /org/openbmc/records/events

*** Test Cases ***

Create error log on single FRU
    [Documentation]     ***GOOD PATH***
    ...                 Create an error log on single FRU and verify
    ...                 its association.\n
    [Tags]  Create_error_log_on_single_FRU

    Run Keyword And Continue On Failure   Clear all logs

    ${elog}  ${stderr}=
    ...   Execute Command    ${CREATE_ERROR_SINGLE_FRU}
    ...   return_stderr=True
    Should Be Empty    ${stderr}

    ${log_list} =     Get EventList
    Should Contain   '${log_list}'   ${elog.strip('q ')}

    ${association_uri} =
    ...   catenate  SEPARATOR=   ${EVENT_RECORD}/${elog.strip('q ')}  /fru

    ${association_content} =
    ...     Read Attribute    ${association_uri}    endpoints
    Should Contain     ${association_content}    ${DIMM1_URI}

    ${dimm1_event} =     Read Attribute     ${DIMM1_URI}/event   endpoints
    Should Contain     ${dimm1_event}    ${log_list[0]}


Create error log on two FRU
    [Documentation]     ***GOOD PATH***
    ...                 Create an error log on two FRUs and verify
    ...                 its association.\n

    ${log_uri} =      Create a test log
    ${association_uri} =    catenate    SEPARATOR=   ${log_uri}   /fru

    ${association_content} =     Read Attribute    ${association_uri}    endpoints
    Should Contain     ${association_content}    ${DIMM3_URI}
    Should Contain     ${association_content}    ${DIMM2_URI}

    ${dimm3_event} =     Read Attribute     ${DIMM3_URI}/event   endpoints
    Should Contain     ${dimm3_event}    ${log_uri}

    ${dimm2_event} =     Read Attribute     ${DIMM2_URI}/event   endpoints
    Should Contain     ${dimm2_event}    ${log_uri}


Create multiple error logs
    [Documentation]     ***GOOD PATH***
    ...                 Create multiple error logs and verify
    ...                 their association.\n

    : FOR    ${INDEX}    IN RANGE    1    4
        \    Log    ${INDEX}
        \    ${log_uri} =      Create a test log
        \    ${association_uri} =    catenate    SEPARATOR=   ${log_uri}   /fru

        \    ${association_content} =     Read Attribute    ${association_uri}    endpoints
        \    Should Contain     ${association_content}    ${DIMM3_URI}
        \    Should Contain     ${association_content}    ${DIMM2_URI}

        \    ${dimm3_event} =     Read Attribute     ${DIMM3_URI}/event   endpoints
        \    Should Contain     ${dimm3_event}    ${log_uri}

        \    ${dimm2_event} =     Read Attribute     ${DIMM2_URI}/event   endpoints
        \    Should Contain     ${dimm2_event}    ${log_uri}


Delete error log
    [Documentation]     ***BAD PATH***
    ...                 Delete an error log and verify that its
    ...                 association is also removed.\n
    [Tags]  Delete_error_log

    ${log_uri1} =      Create a test log
    ${association_uri1} =    catenate    SEPARATOR=   ${log_uri1}   /fru

    ${log_uri2} =      Create a test log

    ${del_uri} =  catenate    SEPARATOR=   ${log_uri1}   /action/delete
    ${resp} =    openbmc post request     ${del_uri}    data=${NIL}
    should be equal as strings      ${resp.status_code}     ${HTTP_OK}

    ${resp} =     openbmc get request     ${association_uri1}
    ${jsondata} =    to json    ${resp.content}
    Should Contain     ${jsondata['message']}    404 Not Found

    ${dimm3_event} =     Read Attribute      ${DIMM3_URI}/event   endpoints
    Should Not Contain     ${dimm3_event}    ${log_uri1}

    ${dimm2_event} =     Read Attribute      ${DIMM2_URI}/event   endpoints
    Should Not Contain     ${dimm2_event}    ${log_uri1}


Association with invalid FRU
    [Documentation]     ***BAD PATH***
    ...                 Create an error log on invalid FRU and verify
    ...                 that its does not have any association.\n

    Run Keyword And Continue On Failure   Clear all logs

    ${elog}  ${stderr}=
    ...   Execute Command    ${CREATE_ERROR_INVALID_FRU}
    ...   return_stderr=True
    Should Be Empty    ${stderr}

    ${log_list} =     Get EventList
    Should Contain   '${log_list}'   ${elog.strip('q ')}

    ${association_uri} =
    ...   catenate  SEPARATOR=  ${EVENT_RECORD}/${elog.strip('q ')}  /fru

    ${resp} =     openbmc get request     ${association_uri}
    ${jsondata} =    to json    ${resp.content}
    Should Contain     ${jsondata['message']}    404 Not Found


Assocition with no FRU error event
    [Documentation]     ***BAD PATH***
    ...                 Create an error log on no FRU and verify
    ...                 that its does not have any association.\n

    Run Keyword And Continue On Failure   Clear all logs

    ${elog}  ${stderr}=
    ...   Execute Command    ${CREATE_ERROR_NO_FRU}
    ...   return_stderr=True
    Should Be Empty    ${stderr}

    ${log_list} =     Get EventList
    Should Contain   '${log_list}'   ${elog.strip('q ')}

    ${association_uri} =
    ...   catenate    SEPARATOR=   ${EVENT_RECORD}/${elog.strip('q ')}  /fru

    ${resp} =     openbmc get request     ${association_uri}
    ${jsondata} =    to json    ${resp.content}
    Should Contain     ${jsondata['message']}    404 Not Found


Association with virtual sensor
    [Documentation]     ***GOOD PATH***
    ...                 Create an error log on virtual sensor and
    ...                 verify its association.\n
    [Tags]              Association_with_virtual_sensor

    Run Keyword And Continue On Failure   Clear all logs

    ${elog}  ${stderr}=
    ...   Execute Command    ${CREATE_ERROR_VIRTUAL_SENSOR}
    ...   return_stderr=True
    Should Be Empty    ${stderr}

    ${log_list} =     Get EventList
    Should Contain   '${log_list}'   ${elog.strip('q ')}

    ${association_uri} =
    ...   catenate    SEPARATOR=   ${EVENT_RECORD}/${elog.strip('q ')}  /fru

    ${association_content} =
    ...     Read Attribute    ${association_uri}    endpoints
    Should Contain
    ...     ${association_content}    /org/openbmc/inventory/system/systemevent

Association unchanged after reboot
    [Documentation]     ***GOOD PATH***
    ...                 This test case is to verify that error log association
    ...                 does not change after open bmc reboot.\n
    [Tags]  bmcreboot  Association_Unchanged_After_Reboot

    ${pre_reboot_log_uri} =      Create a test log
    ${association_uri} =
    ...    catenate    SEPARATOR=   ${pre_reboot_log_uri}   /fru
    ${pre_reboot_association_content} =
    ...   Read Attribute   ${association_uri}    endpoints

    ${output}=      Execute Command    /sbin/reboot
    Check If BMC is Up   5 min    10 sec

    @{states}=   Create List   BMC_READY   HOST_POWERED_OFF
    Wait Until Keyword Succeeds
    ...    10 min   10 sec   Verify BMC State   ${states}

    ${post_reboot_association_content} =
    ...   Read Attribute    ${association_uri}    endpoints
    Should Be Equal
    ...   ${post_reboot_association_content}   ${pre_reboot_association_content}

    ${post_reboot_dimm3_event} =
    ...   Read Attribute   ${DIMM3_URI}/event   endpoints
    Should Contain
    ...   ${post_reboot_dimm3_event}   ${pre_reboot_log_uri}
    ${post_reboot_dimm2_event} =
    ...   Read Attribute   ${DIMM2_URI}/event   endpoints
    Should Contain
    ...   ${post_reboot_dimm2_event}   ${pre_reboot_log_uri}

*** Keywords ***

Get EventList
    ${resp} =   openbmc get request     /org/openbmc/records/events/
    should be equal as strings    ${resp.status_code}    ${HTTP_OK}
    ${jsondata} =    to json    ${resp.content}
    [return]    ${jsondata['data']}

Create a test log
    [arguments]
    ${data} =   create dictionary   data=@{EMPTY}
    ${resp} =   openbmc post request     /org/openbmc/records/events/action/acceptTestMessage    data=${data}
    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
    ${json} =   to json         ${resp.content}
    ${LOGID} =    convert to integer    ${json['data']}
    ${uri}=     catenate    SEPARATOR=   /org/openbmc/records/events/   ${LOGID}
    [return]  ${uri}

Clear all logs
    ${resp} =   openbmc post request     /org/openbmc/records/events/action/clear    data=${NIL}
    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
    ${resp} =   openbmc get request     /org/openbmc/records/events/
    ${json} =   to json         ${resp.content}
    Should Be Empty     ${json['data']}

Suite Initialization Setup
    Open Connection And Log In
    Run Keyword And Continue On Failure   Clear all logs
