blob: bde38883fc9ebb05389d24bcdcdc83c0ff50c134 [file] [log] [blame]
*** Settings ***
Documentation Test firmware boot side switch using pldmtool.
# Test Procedure:
# 1. Power off the host or post firmware is updated.
# 2. Check the firmware boot side ( login to BMC and execute )
# Example:
# pldmtool bios GetBIOSAttributeCurrentValueByHandle -a fw_boot_side
#
# It should return response either Temp or Perm
# 3. Set the firmware boot side to Temp or Perm accordingly
# Example:
# pldmtool bios SetBIOSAttributeCurrentValue -a fw_boot_side -d Temp
#
# 4. Power on
# 5. BMC take reset during power on ( expected )
# 6. Check the system booted to Runtime
# 7. Verify the boot side is still same which was set.
Library Collections
Library ../lib/tftp_update_utils.py
Resource ../lib/bmc_redfish_resource.robot
Resource ../lib/openbmc_ffdc.robot
Test Setup Printn
Test Teardown FFDC On Test Case Fail
*** Variables ***
# By default 2, to ensure, it performs both Perm and Temp side switch and boot.
${LOOP_COUNT} 2
# This dictionary is for Temp -> Perm or vice versa in the test code.
&{FW_BOOT_SIDE_DICT} Perm=Temp Temp=Perm
*** Test Cases ***
Test Firmware Boot Side Using Pldmtool
[Documentation] Power off the host , set the firmware boot side via pldmtool,
... power on the host and confirm the fw_boot_side attribute is
... still set.
[Tags] Test_Firmware_Boot_Side_Using_Pldmtool
[Template] Firmware Side Switch Power On Loop
# iteration
${LOOP_COUNT}
*** Keywords ***
Firmware Side Switch Power On Loop
[Documentation] Number of iteration, test should perform switch side and boot.
[Arguments] ${iteration}
# Description of argument(s):
# iteration Number of switch it needs to perform.
FOR ${count} IN RANGE 0 ${iteration}
Print Timen The Current Loop Count is ${count} of ${iteration}
# Get the current system state before BMC reset.
${state}= Get Pre Reboot State
Redfish Power Off stack_mode=skip
${cur_boot_side}= PLDM Get BIOS Attribute fw_boot_side
Print Timen Current BIOS attribute fw_boot_side: ${cur_boot_side}
${next_boot_side}= Set Variable ${FW_BOOT_SIDE_DICT["${cur_boot_side["CurrentValue"]}"]}
Print Timen Set BIOS attribute fw_boot_side: ${next_boot_side}
PLDM Set BIOS Attribute fw_boot_side ${next_boot_side}
${cur_boot_side}= PLDM Get BIOS Attribute fw_boot_side
Print Timen Next boot will apply BIOS attribute fw_boot_side: ${cur_boot_side}
Print Timen Perform power on operation and expect BMC to take reset.
Redfish Power Operation On
Print Timen Wait for the BMC to take reset and come back online.
Wait For Reboot start_boot_seconds=${state['epoch_seconds']} wait_state_check=0
Print Timen BMC rebooted, wait for host to boot to Runtime.
# Post BMC reset, host should auto power on back to runtime.
Wait Until Keyword Succeeds 10 min 20 sec Is Boot Progress Runtime Matched
# Verify the system is booting up with the new fw_boot_side set.
${cur_boot_side}= PLDM Get BIOS Attribute fw_boot_side
Should Be Equal As Strings ${cur_boot_side["CurrentValue"]} ${next_boot_side}
Print Timen Current: ${cur_boot_side["CurrentValue"]} and set side: ${next_boot_side} are same.
END
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