blob: bb4a43cdf91513a15ec2e7316866233683201dc8 [file] [log] [blame]
*** Settings ***
Documentation Trigger code update to a target BMC.
... Execution Method :
... python -m robot -v OPENBMC_HOST:<hostname>
... -v FILE_PATH:<path/*all.tar> update_bmc.robot
...
... Code update method BMC using REST
... Update work flow sequence:
... - User input BMC File existence check
... - Ping Test and REST authentication
... - Set Host Power host setting Policy to RESTORE_LAST_STATE
... On reboot this policy would ensure the BMC comes
... online and stays at HOST_POWERED_OFF state.
... - Issue poweroff
... - Prune archived journal logs
... - Prepare for Update
... - Wait for BMC to come online clean
... - Wait for BMC_READY state
... - Apply preserve BMC Network setting
... - SCP image to BMC
... - Activate the flash image
... - Warm Reset BMC to activate code
... - Wait for BMC to come online time out 30 minutes
... - Version check post update
Resource code_update_utils.robot
Resource ../../lib/state_manager.robot
Resource ../../lib/utils.robot
Resource ../../lib/openbmc_ffdc.robot
Test Teardown FFDC On Test Case Fail
*** Variables ***
${FILE_PATH} ${EMPTY}
${FORCE_UPDATE} ${0}
# There are two reboots issued by code update.
${MAX_BOOT_COUNT} ${2}
*** Test Cases ***
Test Basic BMC Performance Before Code Update
[Documentation] Check performance of memory, CPU & file system of BMC.
[Tags] Test_Basic_BMC_Performance_Before_Code_Update
Open Connection And Log In
Check BMC CPU Performance
Check BMC Mem Performance
Check BMC File System Performance
Check Core Dump Exist Before Code Update
[Documentation] Check core dump existence on BMC before code update.
[Tags] Check_Core_Dump_Exist_Before_Code_Update
Check For Core Dumps
Initiate Code Update BMC
[Documentation] BMC code update process initiation
[Setup] Set State Interface Version
[Tags] Initiate_Code_Update_BMC
Check If File Exist ${FILE_PATH}
System Readiness Test
# TODO: Disabling version check until new logic are in place.
# ${status}= Run Keyword and Return Status
# ... Validate BMC Version before
# Run Keyword if '${status}' == '${False}'
# ... Pass Execution Same Driver version installed
# Enable user to bypass prerequisite operations.
# Use cases for if BMC is not in working state.
Run Keyword If ${FORCE_UPDATE} == ${0}
... Prepare BMC For Update
Preserve BMC Network Setting
SCP Tar Image File to BMC ${FILE_PATH}
Activate BMC flash image
Run Keyword And Ignore Error Trigger Warm Reset
# Warm reset adds 3 seconds delay before forcing reboot
# To minimize race conditions, we wait for 7 seconds
Sleep 7s
${session_active}= Check If warmReset is Initiated
Run Keyword If '${session_active}' == '${True}'
... Trigger Warm Reset via Reboot
Check If BMC is Up 30 min 10 sec
Check Boot Count And Time
Sleep 1 min
# Validate BMC Version
# Now that the code update is completed, make sure we use the correct
# interface while checking for BMC ready state.
Set State Interface Version
Wait For BMC Ready
Check Boot Count And Time
Run Keyword If ${BOOT_COUNT} == ${1}
... Log Boot Time not Updated by Kernel!!! level=WARN
Test Basic BMC Performance At Ready State
[Documentation] Check performance of memory, CPU & file system of BMC.
[Tags] Test_Basic_BMC_Performance_At_Ready_State
Open Connection And Log In
Check BMC CPU Performance
Check BMC Mem Performance
Check BMC File System Performance
Check Core Dump Exist After Code Update
[Documentation] Check core dump existence on BMC after code update.
[Tags] Check_Core_Dump_Exist_After_Code_Update
Check For Core Dumps
Enable Core Dump File Size To Be Unlimited
[Documentation] Set core dump file size to unlimited.
[Tags] Enable_Core_Dump_File_size_To_Be_unlimited
Set Core Dump File Size Unlimited
*** Keywords ***
Prepare BMC For Update
[Documentation] Prerequisite operation before code update.
Check Boot Count And Time
Prune Journal Log
Power Off Request
Set Policy Setting RESTORE_LAST_STATE
Prepare For Update
Check If BMC is Up 20 min 10 sec
Check Boot Count And Time
# Temporary fix for lab migration for driver which is booted with
# BMC state "/xyz/openbmc_project/state/BMC0/".
${status}= Run Keyword And Return Status Temp BMC URI Check
Run Keyword If '${status}' == '${False}'
... Wait For BMC Ready
... ELSE Wait For Temp BMC Ready
# TODO: openbmc/openbmc#815
Sleep 1 min
Check Boot Count And Time
[Documentation] Check for unexpected reboots.
Set BMC Reset Reference Time
Log To Console \n Boot Count: ${BOOT_COUNT}
Log To Console \n Boot Time: ${BOOT_TIME}
Run Keyword If ${BOOT_COUNT} > ${MAX_BOOT_COUNT}
... Log Phantom Reboot!!! Unexpected reboot detected level=WARN
Temp BMC URI Check
[Documentation] Check for transient "BMC0" interface.
${resp}= Openbmc Get Request /xyz/openbmc_project/state/BMC0/
Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
Check Temp BMC State
[Documentation] BMC state should be "Ready".
# quiet - Suppress REST output logging to console.
${state}=
... Read Attribute /xyz/openbmc_project/state/BMC0/ CurrentBMCState
Should Be Equal Ready ${state.rsplit('.', 1)[1]}
Wait For Temp BMC Ready
[Documentation] Check for BMC "Ready" until timedout.
Wait Until Keyword Succeeds
... 10 min 10 sec Check Temp BMC State