*** 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
Resource          ../lib/state_manager.robot

Library           Collections

Suite Setup       Suite Initialization Setup
Suite Teardown    Close All Connections

Test Teardown     FFDC On Test Case Fail
Force Tags  Association

*** Variables ***

${SYSTEM_SHUTDOWN_TIME}           1min

${WAIT_FOR_SERVICES_UP}           3min

${EVENT_RECORD}        ${RECORDS_URI}events/
${DIMM_PREFIX}         ${INVENTORY_URI}system/chassis/motherboard/
${DIMM1_URI}           ${DIMM_PREFIX}dimm1
${DIMM2_URI}           ${DIMM_PREFIX}dimm2
${DIMM3_URI}           ${DIMM_PREFIX}dimm3

${BUSCTL_PREFIX}                busctl call ${OPENBMC_BASE_DBUS}.records.events
...                             ${OPENBMC_BASE_URI}records/events
...                             ${OPENBMC_BASE_DBUS}.recordlog
...                             acceptHostMessage sssay "Error"

${CREATE_ERROR_SINGLE_FRU}      ${BUSCTL_PREFIX} "Testing failure"
...                             "${DIMM1_URI}" 1 1

${CREATE_ERROR_INVALID_FRU}     ${BUSCTL_PREFIX} "Testing with invalid FRU"
...                             "abc" 1 1

${CREATE_ERROR_NO_FRU}          ${BUSCTL_PREFIX} "Testing with no fru" "" 1 1

${CREATE_ERROR_VIRTUAL_SENSOR}  ${BUSCTL_PREFIX}
...                             "Testing with a virtual sensor"
...                             "${INVENTORY_URI}system/systemevent " 1 1

&{NIL}                          data=@{EMPTY}

*** 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
    [Tags]  Create_Error_Log_On_Two_FRU

    ${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
    [Tags]  Create_Multiple_Error_Logs

    : 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
    [Tags]  Association_With_Invalid_FRU

    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


Association 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
    [Tags]  Association_With_No_FRU_Error_Event

    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}
    ...  ${OPENBMC_BASE_URI}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

    Initiate Host PowerOff

    Initiate BMC Reboot

    Wait Until Keyword Succeeds  10 min  10 sec  Is BMC Ready

    ${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   ${EVENT_RECORD}
    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
    ...     ${EVENT_RECORD}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=   ${EVENT_RECORD}   ${LOGID}
    [Return]  ${uri}

Clear all logs
    ${resp}=   openbmc post request
    ...   ${EVENT_RECORD}action/clear    data=${NIL}
    should be equal as strings      ${resp.status_code}     ${HTTP_OK}
    ${resp}=   openbmc get request   ${EVENT_RECORD}
    ${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
