*** 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

    Printn
    # 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}
