*** Settings ***
Documentation   Test Non-maskable interrupt functionality.

Resource        ../lib/bmc_redfish_resource.robot
Resource        ../lib/boot_utils.robot
Resource        ../lib/openbmc_ffdc.robot
Resource        ../lib/secureboot/secureboot.robot
Resource        ../lib/state_manager.robot
Library         ../lib/bmc_ssh_utils.py
Library         ../syslib/utils_os.py

Test Teardown   FFDC On Test Case Fail
Suite Teardown  Redfish.Logout


*** Test Cases ***

Trigger NMI When OPAL/Host OS Is Not Up
    [Documentation]  Verify return error code from Redfish
    ...  while injecting NMI when HOST OS is not up.
    [Tags]  Trigger_NMI_When_OPAL/Host_OS_Is_Not_Up

    Redfish Power Off
    Trigger NMI


Trigger NMI When OPAL/Host OS Is Running And Secureboot Is Disabled
    [Documentation]  Verify valid return status code from Redfish
    ...  while injecting NMI, when HOST OS is running and
    ...  secureboot is disabled.
    [Tags]  Trigger_NMI_When_OPAL/Host_OS_Is_Running_And_Secureboot_Is_Disabled
    [Setup]  Test Setup Execution  ${0}

    Trigger NMI  valid_status_codes=[${HTTP_OK}]
    # NMI Post Crash Dump Verification
    Wait Until Keyword Succeeds  10 min  1 min  Is Host Rebooted
    Is OS Booted
    Wait Until Keyword Succeeds  1 min  10 sec  Verify Crash Dump Directory


*** Keywords ***

Test Setup Execution
    [Documentation]  Test setup execution.
    [Arguments]  ${secure_boot_mode}=${1}

    # Description of argument(s):
    # secure_boot_mode  Secure boot -> Enable-1 or Disable-0.

    Redfish Power Off  stack_mode=skip
    Set Auto Reboot  ${1}
    # Set and verify secure boot policy as disabled.
    Set And Verify TPM Policy  ${secure_boot_mode}
    Redfish Power On
    # Delete any pre-existing dump files.
    OS Execute Command  rm -rf /var/crash/*
    ${os_release_info}=  Get OS Release Info
    # Start crash dump utility on OS.
    ${cmd}=  Set Variable If
    ...  '${os_release_info['id']}' == 'ubuntu'  kdump-config show  kdumpctl start
    OS Execute Command  ${cmd}  print_out=1


Trigger NMI
    [Documentation]  Inject non-maskable interrupt Redfish URI.
    [Arguments]  ${valid_status_codes}=[${HTTP_INTERNAL_SERVER_ERROR}]

    # Description of argument(s):
    # valid_status_codes  A list of status codes that the
    #                     caller considers acceptable.
    #                     See lib/redfish_plus.py for details.

    Redfish.Login
    Redfish.Post  ${SYSTEM_BASE_URI}Actions/ComputerSystem.Reset
    ...  body={"ResetType": "Nmi"}  valid_status_codes=${valid_status_codes}

Verify Crash Dump Directory
    [Documentation]  Verify that the crash dump directory is not empty.

    # As per the requirement, there should be a crash dump file
    # after successful NMI injection.
    ${output}  ${stderr}  ${rc}=
    ...  OS Execute Command  ls -ltr /var/crash/*  print_out=1
