*** Settings ***
Documentation    Test MPIPL (Memory preserving IPL).

#------------------------------------------------------------------
# This boot path will generated a BMC dump followed by system dump.
#------------------------------------------------------------------

Resource         ../../lib/resource.robot
Resource         ../../lib/openbmc_ffdc.robot
Resource         ../../lib/bmc_redfish_utils.robot
Resource         ../../lib/bmc_redfish_resource.robot
Resource         ../../lib/boot_utils.robot

Suite Setup      Redfish.Login
Test Setup       Test Setup Execution
Test Teardown    Test Teardown Execution
Suite Teardown   Suite Teardown Execution

Force Tags       MPIPL_Basic

*** Variables ***

# By default 1 iteration, user can key in nth number of iteration to control
# how many time it needs MPIPL test runs.
${MPIPL_LOOP_COUNT}     ${1}


** Test Cases **

Trigger User Tool Initiated MPIPL
    [Documentation]  Trigger And Verify user tool initiated dump using
    ...              obmc-host-crash target.
    [Tags]  Trigger_User_Tool_Initiated_MPIPL

    FOR  ${count}  IN RANGE  0  ${MPIPL_LOOP_COUNT}
        Log To Console   MPIPL LOOP_COUNT:${count} execution.
        Tool Initd MP Reboot
        Wait Until Keyword Succeeds  5 min  10 sec  Required Dumps Should Exist
    END


Trigger User Initiated MPIPL Using Redfish
    [Documentation]  Verify redfish triggered MPIPL flow using diagnostic
    ...              mode target.
    [Tags]  Trigger_User_Initiated_MPIPL_Using_Redfish

    FOR  ${count}  IN RANGE  0  ${MPIPL_LOOP_COUNT}
        Log To Console   MPIPL LOOP_COUNT:${count} execution.
        Redfish Initiated MPIPL
        Wait Until Keyword Succeeds  5 min  10 sec  Required Dumps Should Exist
    END


*** Keywords ***


Test Setup Execution
    [Documentation]  Do the post test setup cleanup.

    Test System Cleanup
    Run Keyword And Ignore Error  Clear All Subscriptions


Test Teardown Execution
    [Documentation]  Do the post test teardown.

    FFDC On Test Case Fail


Suite Teardown Execution
    [Documentation]  Do the post suite teardown.

    Test System Cleanup
    Run Keyword And Ignore Error  Delete All Redfish Sessions


Test System Cleanup
    [Documentation]  Cleanup errors before exiting.

    Run Keyword And Ignore Error  Redfish Purge Event Log
    Run Keyword And Ignore Error  Redfish Delete All BMC Dumps
    Run Keyword And Ignore Error  Redfish Delete All System Dumps


Redfish Initiated MPIPL
    [Documentation]  Trigger redfish triggered MPIPL flow.

    # Power on
    Redfish Power On

    # Trigger MPIPL
    Log To Console  Trigger System dump
    ${payload} =  Create Dictionary
    ...  DiagnosticDataType=OEM  OEMDiagnosticDataType=System
    Redfish.Post  ${DUMP_URI}/Actions/LogService.CollectDiagnosticData  body=&{payload}
    ...  valid_status_codes=[${HTTP_ACCEPTED}]

    Sleep  10s

    Log To Console  Wait for system to transition DiagnosticMode
    Wait Until Keyword Succeeds  2 min  3 sec  Is Boot Progress Changed

    Log To Console  Wait for system to transition path DiagnosticMode to Runtime.
    Wait Until Keyword Succeeds  10 min  20 sec  Is Boot Progress Runtime Matched


Is Boot Progress Runtime Matched
    [Documentation]  Get BootProgress state and expect boot state mismatch.

    # Match any of the BootProgress state SystemHardwareInitializationComplete|OSBootStarted|OSRunning
    ${boot_progress}  ${host_state}=  Redfish Get Boot Progress
    Should Contain Any  ${boot_progress}  SystemHardwareInitializationComplete  OSBootStarted  OSRunning


Required Dumps Should Exist
    [Documentation]  Check for BMC and system dump.

    #   {
    #       "@odata.id": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/4",
    #       "@odata.type": "#LogEntry.v1_8_0.LogEntry",
    #       "AdditionalDataSizeBytes": 914254,
    #       "AdditionalDataURI": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries/4/attachment",
    #       "Created": "2022-07-22T03:36:23+00:00",
    #       "DiagnosticDataType": "Manager",
    #       "EntryType": "Event",
    #       "Id": "4",
    #       "Name": "BMC Dump Entry"
    #   }
    ${bmc_dump}=  Redfish.Get Properties  /redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Entries
    Log To Console  BMC dumps generated: ${bmc_dump['Members@odata.count']}
    Should Be True  ${bmc_dump['Members@odata.count']} >= 1  msg=No BMC dump generated.

    #"Members": [
    #   {
    #       "@odata.id": "/redfish/v1/Systems/system/LogServices/Dump/Entries/System_1",
    #       "@odata.type": "#LogEntry.v1_8_0.LogEntry",
    #       "AdditionalDataSizeBytes": 2363839216,
    #       "AdditionalDataURI": "/redfish/v1/Systems/system/LogServices/Dump/Entries/System_1/attachment",
    #       "Created": "2022-07-22T03:38:58+00:00",
    #       "DiagnosticDataType": "OEM",
    #       "EntryType": "Event",
    #       "Id": "System_1",
    #       "Name": "System Dump Entry",
    #       "OEMDiagnosticDataType": "System"
    #   }
    ${sys_dump}=  Redfish.Get Properties  /redfish/v1/Systems/system/LogServices/Dump/Entries
    Log To Console  System dump generated: ${sys_dump['Members@odata.count']}
    Should Be True  ${sys_dump['Members@odata.count']} == 1  msg=No system dump generated.


Clear All Subscriptions
    [Documentation]  Delete all subscriptions.

    ${subscriptions}=  Redfish.Get Attribute  /redfish/v1/EventService/Subscriptions  Members
    FOR  ${subscription}  IN  @{subscriptions}
        Redfish.Delete  ${subscription['@odata.id']}
    END
