blob: df14de6a9cc9bc0d9a00dd9e21c22707b0202be3 [file] [log] [blame]
*** Settings ***
Documentation Verify that the uCode can be updated on supported
... Non-Volatile Memory Express (NVMe) adapters on RedHat.
# TEST PARAMETERS:
# OPENBMC_HOST The BMC host name or IP address.
# OPENBMC_USERNAME The BMC user name.
# OPENBMC_PASSWORD The BMC password.
# OS_HOST The OS host name or IP address.
# OS_USERNAME The OS user name.
# OS_PASSWORD The OS Host password.
# ADAPTER_UCODE_URL The url for the microcode file to be
# loaded.
# DEVICE NAMES A comma-seperated list containing the
# names of devices to be upgraded
# (e.g "nvme0n1,nvme1n1").
#
# Example:
# robot -v ADAPTER_UCODE_URL:http://someurl.com/ucode/file.img
# -v DEVICE_NAMES:nvme0n1,nvme1n1 adapter_ucode_update.robot
Resource ../syslib/utils_install.robot
Suite Setup Suite Setup Execution
Test Teardown FFDC On Test Case Fail
*** Variables ***
*** Test Cases ***
Load And Activate uCode On Adapters
[Documentation] Load and activate firmware on the given adapters.
[Tags] Load_And_Activate_uCode_On_Adapters
Rprintn
# Format parms.
# Ensure that nvme (pci-e storage utility) tool exists.
${device_names}= Split String ${DEVICE_NAMES} ,
OS Execute Command yes | yum install nvme-cli
Tool Exist nvme
# Load and activate firmware on the devices.
:FOR ${device_name} in @{device_names}
\ Load And Activate Firmware On Device ${device_name}
Reboot And Verify Code Update
[Documentation] Reboot the OS and verify that the firmware update
... was successful.
[Tags] Reboot_And_Verify_Code_Update
Host Reboot
# Reboot and verify success
${stdout} ${stderr} ${rc} OS Execute Command
... nvme list | grep nvme0 | awk '{print $NF'}
Should Contain ${image_file_name} ${stdout}
... msg=The code update was not successful.
*** Keywords ***
Load And Activate Firmware On Device
[Documentation] Load and activate firmware on device specified.
[Arguments] ${device_name} ${image_file_name}=${image_file_name}
# Description of argument(s):
# device_name The name of the NVMe device to be loaded
# and activated (e.g. "nvme0n1").
# image_file_name The name of the firmware image file.
:FOR ${slot_id} IN RANGE 1 4
\ Execute Commands On Slot
\ ... ${device_name} ${slot_id} ${image_file_name}
Execute Commands On Slot
[Documentation] Execute load and activate commands on given slot.
[Arguments] ${device_name} ${slot_id}
... ${image_file_name}=${image_file_name}
# Description of argument(s):
# device_name The name of the NVMe device to be loaded
# and activated (e.g. "nvme0n1").
# slot_id The NVMe device slot id to be activated
# (e.g. "0","1", etc.).
# image_file_name The name of the firmware image file.
${stdout} ${stderr} ${rc} OS Execute Command
... nvme fw-download /dev/${device_name} --fw=${image_file_name}
Should Contain ${stdout} Firmware download success
... msg=${image_file_name} could not be loaded on slot:${slot}
${stdout} ${stderr} ${rc} OS Execute Command
... nvme fw-activate /dev/${device_name} -a 0 -s ${slot_id}
Should Contain ${stdout} Success activating firmware
... msg=Could not activate slot:${slot_id} on ${device_name}.
Suite Setup Execution
[Documentation] Setup parms used in suite and download ucode file.
${stdout} ${stderr} ${rc}= OS Execute Command
... wget ${ADAPTER_UCODE_URL}
${image_dir_path_url} ${image_file_name}=
... Split Path ${ADAPTER_UCODE_URL}
Set Global Variable ${image_file_name}