*** Settings ***
Documentation  Update internal storage devices uCode for solid-state
...  drives (SSDs) and hard disk drives (HDDs).

# TEST PARAMETERS:
#   OPENBMC_HOST                The BMC host name or IP address.
#   OPENBMC_PASSWORD            The BMC password.
#   OPENBMC_USERNAME            The BMC user name.
#   OS_HOST                     The OS host name or IP address.
#   OS_USERNAME                 The OS user name.
#   OS_PASSWORD                 The OS password.
#   SDA_UCODE_FILE_PATH         The path of the ucode file, on the OS
#                               for the sda disk (e.g "Code_File.bin").
#   SDA_DESIRED_LEVEL           The expected firmware level for sda
#                               after the firmware update (e.g "MJ06").
#   SDB_UCODE_FILE_PATH         The path of the ucode file, on the OS
#                               for the sdb disk (e.g "Code_File.bin").
#   SDB_DESIRED_LEVEL           The expected firmware level for sdb
#                               after the firmware update (e.g "MK06").

Resource            ../syslib/utils_os.robot
Library             ../lib/gen_robot_valid.py
Library             ../lib/firmware_utils.py


Test Setup          Test Setup Execution
Test Teardown       FFDC On Test Case Fail


*** Variables ***


*** Test Cases ***

Load Microcode On Hard Disks
    [Documentation]  Load the microcode onto the hard disks.
    [Tags]  Load_Microcode_On_Hard_Disks

    # Load firmware.
    ${sda_update_cmd}=  Catenate  hdparm --yes-i-know-what-i-am-doing
    ...  --please-destroy-my-drive --fwdownload ${SDA_UCODE_FILE_PATH}
    ...  /dev/sda
    ${sdb_update_cmd}=  Catenate  hdparm --yes-i-know-what-i-am-doing
    ...  --please-destroy-my-drive --fwdownload ${SDB_UCODE_FILE_PATH}
    ...  /dev/sdb

    OS Execute Command  ${sda_update_cmd}
    OS Execute Command  ${sdb_update_cmd}


Reboot OS And Verify Code Update
    [Documentation]  Reboot the OS and verify that the firmware revision
    ...  now reflects the desired levels.
    [Tags]  Reboot_OS_And_Verify_Code_Update

    Host Reboot
    &{sdb_info}=  Get Hard Disk Info  /dev/sdb
    &{sda_info}=  Get Hard Disk Info  /dev/sda
    Should Be Equal  ${sdb_info['firmware_revision']}
    ...  ${SDB_DESIRED_LEVEL}  msg=Update failed for SDB.
    Should Be Equal  ${sda_info['firmware_revision']}
    ...  ${SDA_DESIRED_LEVEL}  msg=Update failed for SDA.


*** Keywords ***
Test Setup Execution
    [Documentation]  Do initial setup tasks.

    Rvalid Value  SDB_DESIRED_LEVEL
    Rvalid Value  SDA_DESIRED_LEVEL
    Rvalid Value  SDB_UCODE_FILE_PATH
    Rvalid Value  SDA_UCODE_FILE_PATH