|  | *** 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 ALWAYS_POWER_OFF | 
|  | ...                   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 | 
|  | ...                 - Identify REST url post update | 
|  |  | 
|  | Library                 ../../lib/gen_robot_keyword.py | 
|  | Library                 String | 
|  |  | 
|  | Resource                code_update_utils.robot | 
|  | Resource                ../../lib/state_manager.robot | 
|  | Resource                ../../lib/utils.robot | 
|  | Resource                ../../lib/list_utils.robot | 
|  | Resource                ../../lib/openbmc_ffdc.robot | 
|  | Resource                ../../extended/obmc_boot_test_resource.robot | 
|  |  | 
|  | Test Teardown           Run Key  FFDC On Test Case Fail | 
|  |  | 
|  | *** Variables *** | 
|  |  | 
|  | ${QUIET}                ${1} | 
|  | # Boot failures are not acceptable so we set the threshold to 0. | 
|  | ${boot_fail_threshold}  ${0} | 
|  |  | 
|  | ${FILE_PATH}            ${EMPTY} | 
|  | ${FORCE_UPDATE}         ${0} | 
|  | ${REST_URL_FILE_PATH}   ${EMPTY} | 
|  |  | 
|  | # There are two reboots issued by code update. | 
|  | ${MAX_BOOT_COUNT}       ${2} | 
|  |  | 
|  | *** Test Cases *** | 
|  |  | 
|  | Initiate Code Update BMC | 
|  | [Documentation]  Initiate a code update on the BMC. | 
|  | [Tags]  Initiate_Code_Update_BMC | 
|  |  | 
|  | ${status}=  Run Keyword If  '${LAST_KNOWN_GOOD_VERSION}' != '${EMPTY}' | 
|  | ...  Run Keyword And Return Status | 
|  | ...  Validate BMC Version  ${LAST_KNOWN_GOOD_VERSION} | 
|  |  | 
|  | Run Keyword if  '${status}' == '${True}' | 
|  | ...  Pass Execution  The BMC already has the requested build loaded so no further action will be taken. | 
|  |  | 
|  | # 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 | 
|  |  | 
|  | Run Key U  Preserve BMC Network Setting | 
|  | Run Key  SCP Tar Image File To BMC \ ${FILE_PATH} | 
|  | Run Key  Activate BMC Flash Image | 
|  | Run Key U  OBMC Boot Test \ OBMC Reboot (off) | 
|  | Run Key U  Check Boot Count And Time | 
|  | Run Keyword If  ${BOOT_COUNT} == ${1} | 
|  | ...  Log  Boot time not updated by kernel.  level=WARN | 
|  |  | 
|  | *** Keywords *** | 
|  |  | 
|  | Prepare BMC For Update | 
|  | [Documentation]  Prerequisite operation before code update. | 
|  | Check Boot Count And Time | 
|  | Prune Journal Log | 
|  | Power Off Request | 
|  | Set BMC Power Policy  ALWAYS_POWER_OFF | 
|  |  | 
|  | Prepare For Update | 
|  | Check If BMC is Up  20 min  10 sec | 
|  | Check Boot Count And Time | 
|  |  | 
|  | Wait For BMC Ready | 
|  |  | 
|  | 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 |