blob: 8774aada9fa14c807eb74685b92616cd69e1135c [file] [log] [blame]
*** Settings ***
Documentation Module to test In band firmware update.
Resource ../../lib/ipmi_client.robot
Resource ../../lib/openbmc_ffdc.robot
Resource ../../lib/connection_client.robot
Resource ../../lib/code_update_utils.robot
Suite Setup Suite Setup Execution
Test Tags IPMI_Flash
*** Variables ***
${image-bios} image-bios
${image-bios-sig} image-bios.sig
${image-bmc} image-bmc
${image-bmc-sig} image-bmc.sig
${BAD_IMG} tmp.bin
${BAD_SIG} tmp.sig
${lpcshm_address} ${0}
*** Test Cases ***
Test BIOS Firmware Update
[Documentation] Test BIOS firmware update over IPMI.
[Tags] Test_BIOS_Firmware_Update
Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins
Get LPC SHM Address
Update BIOS Firmware ${IMAGE_HOST_FILE_PATH_0}
Verify BIOS Version ${IMAGE_HOST_FILE_PATH_0}
BMC Execute Command
... systemctl restart phosphor-ipmi-host.service
Sleep 10s
Get LPC SHM Address
Update BIOS Firmware ${IMAGE_HOST_FILE_PATH_1}
Verify BIOS Version ${IMAGE_HOST_FILE_PATH_1}
BMC Execute Command
... systemctl restart phosphor-ipmi-host.service
Sleep 10s
Test Invalid BIOS Firmware Update
[Documentation] Test Invalid BIOS firmware update over IPMI.
[Tags] Test_Invalid_BIOS_Firmware_Update
Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins
Get LPC SHM Address
${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc
... --image ${HOST_WORK_DIR}/${BAD_IMG} --sig ${HOST_WORK_DIR}/${BAD_SIG} --type bios
... --address 0x${lpcshmaddress} --length 0xFFC
${output} ${stderr} ${rc}= OS Execute Command ${cmd} ignore_err=1
Should Contain ${stderr} Verification failed
Test BMC Firmware Update
[Documentation] Test BMC firmware update over IPMI.
[Tags] Test_BMC_Firmware_Update
Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins
Get LPC SHM Address
Update BMC Firmware ${IMAGE_BMC_FILE_PATH_0}
Verify BMC Version ${IMAGE_BMC_FILE_PATH_0}
Sleep 10s
Update BMC Firmware ${IMAGE_BMC_FILE_PATH_1}
Verify BMC Version ${IMAGE_BMC_FILE_PATH_1}
Test Invalid BMC Firmware Update
[Documentation] Test Invalid BMC firmware update over IPMI.
[Tags] Test_Invalid_BMC_Firmware_Update
Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins
Get LPC SHM Address
${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc
... --image ${HOST_WORK_DIR}/${BAD_IMG} --sig ${HOST_WORK_DIR}/${BAD_SIG} --type image
... --address 0x${lpcshmaddress} --length 0xFFC
${output} ${stderr} ${rc}= OS Execute Command ${cmd} ignore_err=1
Should Contain ${stderr} Verification failed
*** Keywords ***
Suite Setup Execution
[Documentation] Suite Setup Execution.
${os_state}= Get Host State Attribute OperatingSystemState
Rprint Vars os_state
Run Keyword if '${OS_BOOT_COMPLETE}' != '${os_state}'
... Redfish Power On
# generate bad image for test
${cmd}= Catenate dd if=/dev/urandom of=${HOST_WORK_DIR}/${BAD_IMG} bs=1K count=4
OS Execute Command ${cmd} ignore_err=1
${cmd}= Catenate dd if=/dev/urandom of=${HOST_WORK_DIR}/${BAD_SIG} bs=1 count=128
OS Execute Command ${cmd} ignore_err=1
Get LPC SHM Address
[Documentation] Get Mapped Address of LPC hare Memory.
# select SHM logic device
OS Execute Command outb 0x4e 0x07
OS Execute Command outb 0x4f 0x0f
OS Execute Command outb 0x4e 0xf4
${output} ${stderr} ${rc}= OS Execute Command inb 0x4f
${output}= Evaluate ${output} + 4
${b0}= Convert To Hex ${output} length=2
OS Execute Command outb 0x4e 0xf5
${output} ${stderr} ${rc}= OS Execute Command inb 0x4f
${b1}= Convert To Hex ${output} length=2
OS Execute Command outb 0x4e 0xf6
${output} ${stderr} ${rc}= OS Execute Command inb 0x4f
${b2}= Convert To Hex ${output} length=2
OS Execute Command outb 0x4e 0xf7
${output} ${stderr} ${rc}= OS Execute Command inb 0x4f
${b3}= Convert To Hex ${output} length=2
Set Global Variable ${lpcshm_address} ${b3}${b2}${b1}${b0}
Rprint Vars lpcshm_address
BIOS Update Status Should Be
[Documentation] Check the Update Process is Activating.
[Arguments] ${state}
# Description of argument(s):
# state The state of update process.
${cmd}= Catenate systemctl show --property=ActiveState --property=LoadState
... --property=Result phosphor-ipmi-flash-bios-update.service
${output} ${stderr} ${rc}= BMC Execute Command ${cmd}
Should Contain ${output} ${state} case_insensitive=True
Verify BIOS Version
[Documentation] Verify BIOS Version.
[Arguments] ${image_file_path}
# Description of argument(s):
# image_file_path Path to the image tarball.
${image_version}= Get Version Tar ${image_file_path}
Rprint Vars image_version
${BIOS_Version}= Get BIOS Version
Rprint Vars BIOS_Version
Should Be Equal ${BIOS_Version} ${image_version}
Verify BMC Version
[Documentation] Verify that the version on the BMC is the same as the
... version in the given image via Redfish.
[Arguments] ${image_file_path}
# Description of argument(s):
# image_file_path Path to the image tarball.
# Extract the version from the image tarball on our local system.
${image_version}= Get Version Tar ${image_file_path}
Rprint Vars image_version
Redfish.Login
${bmc_version}= Redfish Get BMC Version
Rprint Vars bmc_version
Valid Value bmc_version valid_values=['${image_version}']
Update BIOS Firmware
[Documentation] Update BIOS Firmware.
[Arguments] ${image_file_path}
# Description of argument(s):
# image_file_path Path to the image tarball.
OperatingSystem.File Should Exist ${image_file_path}
Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins
scp.Open connection ${OS_HOST} username=${OS_USERNAME}
... password=${OS_PASSWORD}
scp.Put File ${image_file_path} ${HOST_WORK_DIR}/${image_file_path}
${cmd}= Catenate tar -xf ${HOST_WORK_DIR}/${image_file_path} -C ${HOST_WORK_DIR}
${output} ${stderr} ${rc}= OS Execute Command ${cmd}
${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc
... --image ${HOST_WORK_DIR}/${image-bios} --sig ${HOST_WORK_DIR}/${image-bios-sig} --type bios
... --address 0x${lpcshm_address} --length 0xFFC
OS Execute Command ${cmd} fork=1
Wait Until Keyword Succeeds 5 mins 10 secs
... BIOS Update Status Should Be ActiveState=activating
Wait Until Keyword Succeeds 20 mins 30 secs
... BIOS Update Status Should Be ActiveState=inactive
${cmd}= Catenate systemctl show --property=Result
... phosphor-ipmi-flash-bios-update.service
${output} ${stderr} ${rc}= BMC Execute Command ${cmd}
Should Contain ${output} Result=success
Run Keyword Wait For Host To Ping ${OS_HOST} 5 mins
Update BMC Firmware
[Documentation] Update BIOS Firmware.
[Arguments] ${image_file_path}
# Description of argument(s):
# image_file_path Path to the image tarball.
OperatingSystem.File Should Exist ${image_file_path}
Run Keyword Wait For Host To Ping ${OS_HOST} 3 mins
scp.Open connection ${OS_HOST} username=${OS_USERNAME}
... password=${OS_PASSWORD}
scp.Put File ${image_file_path} ${HOST_WORK_DIR}/${image_file_path}
${cmd}= Catenate tar -xf ${HOST_WORK_DIR}/${image_file_path} -C ${HOST_WORK_DIR}
${output} ${stderr} ${rc}= OS Execute Command ${cmd}
${cmd}= Catenate ${HOST_WORK_DIR}/burn_my_bmc --command update --interface ipmilpc
... --image ${HOST_WORK_DIR}/${image-bmc} --sig ${HOST_WORK_DIR}/${image-bmc-sig} --type image
... --address 0x${lpcshm_address} --length 0xFFC --ignore-update
${output} ${stderr} ${rc}= OS Execute Command ${cmd} ignore_err=1
Should Not Contain ${stderr} Exception received
Sleep 10s
Check If BMC is Up 20 min 20 sec
Wait For BMC Ready