| *** 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 |
| ... - 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 *** |
| |
| 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 |
| |
| Check URLs Before Code Update |
| [Documentation] Check available URLs before code update. |
| [Tags] Check_URLs_Before_Code_Update |
| |
| ${url_list}= Get URL List ${OPENBMC_BASE_URI} |
| Set Global Variable ${URL_BEFORE_CU} ${url_list} |
| |
| ${bmc_version}= Get BMC Version |
| Set Suite Variable ${bmc_version_before} ${bmc_version} |
| |
| 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 |
| |
| Install BMC Debug Tarball |
| [Documentation] Install the downloaded debug tarball on BMC. |
| [Tags] Install_BMC_Debug_Tarball |
| Run Keyword If '${DEBUG_TARBALL_PATH}' != '${EMPTY}' |
| ... Install Debug Tarball On BMC ${DEBUG_TARBALL_PATH} |
| |
| Compare URLs Before And After Code Update |
| [Documentation] Compare URLs before and after code update. |
| [Tags] Compare_URLs_Before_And_After_Code_Update |
| |
| ${bmc_version}= Get BMC Version |
| Set Suite Variable ${bmc_version_after} ${bmc_version} |
| |
| # Exit test for same firmware version. |
| Pass Execution If '${bmc_version_before}' == '${bmc_version_after}' |
| ... Same BMC firmware version found |
| |
| ${url_after_cu}= Get URL List ${OPENBMC_BASE_URI} |
| Compare URL List After Code Update ${URL_BEFORE_CU} ${url_after_cu} |
| |
| 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 BMC Power Policy 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 |
| |
| 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 |
| |
| Compare URL List After Code Update |
| [Documentation] Compare URL list before and after code update. |
| [Arguments] ${url_before_cu} ${url_after_cu} |
| # Description of arguments: |
| # url_before_cu List of URLs available before code update. |
| # url_after_cu List of URLs available after code update. |
| |
| ${url_removed_list}= Subtract Lists ${url_before_cu} ${url_after_cu} |
| ${url_added_list}= Subtract Lists ${url_after_cu} ${url_before_cu} |
| Log ${url_removed_list} |
| Log ${url_added_list} |
| |
| Return From Keyword If '${REST_URL_FILE_PATH}' == '${EMPTY}' |
| |
| # Create file with BMC firmware version before and after code update. |
| # i.e. <Before_Version>--<After_Version> |
| # Example v1.99.6-141-ge662190--v1.99.6-141-ge664242 |
| |
| ${file_name}= Catenate SEPARATOR=-- |
| ... ${bmc_version_before} ${bmc_version_after} |
| ${REST_URL_FILE}= Catenate ${REST_URL_FILE_PATH}/${file_name} |
| Create File ${REST_URL_FILE} URL Removed${\n} |
| |
| Return From Keyword If |
| ... ${url_removed_list} == [] and ${url_added_list} == [] |
| |
| Create File ${REST_URL_FILE} URL Removed${\n} |
| Append To File ${REST_URL_FILE} [${url_removed_list}] |
| Append To File ${REST_URL_FILE} ${\n}URL Added${\n} |
| Append To File ${REST_URL_FILE} [${url_added_list}] |