blob: 0ec2abd651a240054818ee7cc5d0d188c346787a [file] [log] [blame]
*** 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