blob: a7d7ea5d906a1f09dc44d1dff00f5ee24a6491ab [file] [log] [blame]
*** Settings ***
Documentation Update the PNOR code on a target BMC.
... Execution Method:
... python -m robot -v OPENBMC_HOST:<hostname>
... -v DELETE_OLD_PNOR_IMAGES:<"true" or "false">
... -v IMAGE_FILE_PATH:<path/*.tar>
... -v ALTERNATE_IMAGE_FILE_PATH:<path/*.tar>
... host_code_update.robot
...
... Code update method BMC
... Update work flow sequence:
... - Upload image via REST
... - Verify that the file exists on the BMC
... - Check that software "Activation" is set to "Ready"
... - Set "Requested Activation" to "Active"
... - Wait for code update to complete
... - Verify the new version
Library ../../lib/bmc_ssh_utils.py
Library ../../lib/code_update_utils.py
Library ../../lib/gen_robot_keyword.py
Variables ../../data/variables.py
Resource ../../lib/boot_utils.robot
Resource code_update_utils.robot
Resource ../../lib/code_update_utils.robot
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/state_manager.robot
Resource ../../lib/dump_utils.robot
Test Teardown Code Update Test Teardown
Force Tags Host_Code_Update
*** Variables ***
${QUIET} ${1}
${IMAGE_FILE_PATH} ${EMPTY}
${DELETE_OLD_PNOR_IMAGES} false
${DELETE_OLD_GUARD_FILE} false
${ALTERNATE_IMAGE_FILE_PATH} ${EMPTY}
*** Test Cases ***
REST Host Code Update
[Documentation] Do a PNOR code update by uploading image on BMC via REST.
# 1. Delete error logs if there is any.
# 1. Do code update.
# 2. Do post update the following:
# - Collect FFDC if error log exist and delete error logs.
[Tags] REST_Host_Code_Update
[Setup] Code Update Setup
Run Keyword And Ignore Error List Installed Images Host
Upload And Activate Image ${IMAGE_FILE_PATH}
OBMC Reboot (off)
Post Update Boot To OS
[Documentation] Boot the host OS
[Tags] Post_Update_Boot_To_OS
[Setup] Start SOL Console Logging
[Teardown] Run Keywords Stop SOL Console Logging
... AND Code Update Test Teardown
Run Keyword If '${PREV_TEST_STATUS}' == 'FAIL'
... Fail Code update failed. No need to boot to OS.
Delete All Error Logs
REST Power On
Verify Running Host Image ${IMAGE_FILE_PATH}
REST Host Code Update While OS Is Running
[Documentation] Do a PNOR code update while the host is running.
[Tags] REST_Host_Code_Update_While_OS_Is_Running
[Teardown] Run Keywords REST Power Off stack_mode=skip
... AND Code Update Test Teardown
Run Keyword If '${PREV_TEST_STATUS}' == 'FAIL'
... Fail Cannot boot the OS.
REST Power On stack_mode=skip
Upload And Activate Image
... ${ALTERNATE_IMAGE_FILE_PATH} skip_if_active=true
REST Power On stack_mode=normal
Verify Running Host Image ${ALTERNATE_IMAGE_FILE_PATH}
Host Image Priority Attribute Test
[Documentation] Set "Priority" attribute.
[Tags] Host_Image_Priority_Attribute_Test
[Template] Temporarily Set PNOR Attribute
# Property Value
Priority ${0}
Priority ${1}
Priority ${127}
Priority ${255}
Host Set Priority To Invalid Values
[Documentation] Attempt to set the priority of an image to an invalid
... value and expect an error.
[Tags] Host_Set_Priority_To_Invalid_Values
[Template] Set Priority To Invalid Value And Expect Error
# Version Type Priority
${VERSION_PURPOSE_HOST} ${-1}
${VERSION_PURPOSE_HOST} ${256}
Set RequestedActivation To None
[Documentation] Set the RequestedActivation of the image to None and
... verify that it is in fact set to None.
[Tags] Set_RequestedActivation_To_None
${software_objects}= Get Software Objects
Set Host Software Property @{software_objects}[0] RequestedActivation
... ${REQUESTED_NONE}
${software_properties}= Get Host Software Property @{software_objects}[0]
Should Be Equal As Strings &{software_properties}[RequestedActivation]
... ${REQUESTED_NONE}
Set RequestedActivation And Activation To Invalid Value
[Documentation] Set the RequestedActivation and Activation propreties of
... the image to an invalid value and verify that it was not
... changed.
[Template] Set Property To Invalid Value And Verify No Change
[Tags] Set_RequestedActivation_And_Activation_To_Invalid_Value
# Property Version Type
RequestedActivation ${VERSION_PURPOSE_HOST}
Activation ${VERSION_PURPOSE_HOST}
Upload And Activate Multiple Host Images
[Documentation] Upload another PNOR image and verify that its state is
... different from all others.
[Tags] Upload_And_Activate_Multiple_Host_Images
[Template] Activate Image And Verify No Duplicate Priorities
[Setup] Upload And Activate Multiple BMC Images Setup
# Image File Path Image Purpose
${ALTERNATE_IMAGE_FILE_PATH} ${VERSION_PURPOSE_HOST}
Set Same Priority For Multiple Host Images
[Documentation] Attempt to set the priority to be the same for two PNOR
... images and verify that the priorities are not the same.
[Tags] Set_Same_Priority_For_Multiple_Host_Images
Run Keyword If '${PREV_TEST_STATUS}' == 'FAIL'
... Fail Activation of alternate image failed. Cannot set priority.
Set Same Priority For Multiple Images ${VERSION_PURPOSE_HOST}
Delete Host Image
[Documentation] Delete a PNOR image from the BMC and PNOR flash chip.
[Tags] Delete_Host_Image
[Setup] Initiate Host PowerOff
${software_objects}= Get Software Objects
... version_type=${VERSION_PURPOSE_HOST}
${num_images}= Get Length ${software_objects}
Should Be True 0 < ${num_images}
... msg=There are no PNOR images on the BMC to delete.
Delete Image And Verify @{software_objects}[0] ${VERSION_PURPOSE_HOST}
Verify Host Update When Host Reboot During Activation In Progress
[Documentation] Attempt to reboot the host while an image is activating.
[Tags] Verify_Host_Update_When_Host_Reboot_During_Activation_In_Progress
Upload And Activate Image ${IMAGE_FILE_PATH}
REST Power On
Delete All Error Logs
${version_id}= Upload And Activate Image ${ALTERNATE_IMAGE_FILE_PATH}
... wait=${0}
${resp}= OpenBMC Get Request ${SOFTWARE_VERSION_URI}${version_id}
Should Be Equal As Strings ${resp.status_code} ${HTTP_OK}
# Reboot Host during activation.
Host Reboot
Wait For Activation State Change ${version_id} ${ACTIVATING}
# New image priority should be 0.
${new_host_properties}=
... Get Host Software Property ${SOFTWARE_VERSION_URI}${version_id}
Should Be Equal As Integers ${new_host_properties["Priority"]} ${0}
# Reboot host to boot up with the new host image version.
Host Reboot
Verify Running Host Image ${ALTERNATE_IMAGE_FILE_PATH}
*** Keywords ***
Temporarily Set PNOR Attribute
[Documentation] Update the PNOR attribute value.
[Arguments] ${attribute_name} ${attribute_value}
# Description of argument(s):
# attribute_name Host software attribute name (e.g. "Priority").
# attribute_value Value to be written.
${image_ids}= Get Software Objects
${init_host_properties}= Get Host Software Property ${image_ids[0]}
${initial_priority}= Set Variable ${init_host_properties["Priority"]}
Set Host Software Property ${image_ids[0]} ${attribute_name}
... ${attribute_value}
${cur_host_properties}= Get Host Software Property ${image_ids[0]}
Should Be Equal As Integers ${cur_host_properties["Priority"]}
... ${attribute_value}
# Revert to to initial value.
Set Host Software Property
... ${image_ids[0]} ${attribute_name} ${initial_priority}
Code Update Setup
[Documentation] Do code update test case setup.
# - Clean up all existing BMC dumps.
# - Clean up all currently install PNOR images.
Run Keyword And Ignore Error Smart Power Off
Run Key Delete All Dumps ignore=1
Run Key Delete All Error Logs ignore=1
Run Keyword If 'true' == '${DELETE_OLD_PNOR_IMAGES}'
... Delete All PNOR Images
Run Keyword If 'true' == '${DELETE_OLD_GUARD_FILE}' BMC Execute Command
... rm -f /var/lib/phosphor-software-manager/pnor/prsv/GUARD
Upload And Activate Multiple BMC Images Setup
[Documentation] Check that the ALTERNATE_FILE_PATH variable is set.
Should Not Be Empty ${ALTERNATE_IMAGE_FILE_PATH}
Delete All PNOR Images
Upload And Activate Image ${IMAGE_FILE_PATH} skip_if_active=true
Get PNOR Extended Version
[Documentation] Return the PNOR extended version.
[Arguments] ${manifest_path}
# Description of argument(s):
# manifest_path Path of the MANIFEST file
# (e.g. "/tmp/images/abc123/MANIFEST").
${version}= BMC Execute Command
... grep extended_version= ${manifest_path}
[return] ${version.split(",")}
Code Update Test Teardown
[Documentation] Do code update test case teardown.
# 1. Collect FFDC if test case failed.
# 2. Collect FFDC if test PASS but error log exists.
FFDC On Test Case Fail
Run Keyword If '${TEST_STATUS}' == 'PASS' Check Error And Collect FFDC