Added new adapter firmware update TC

Change-Id: Ia7c8f32a385f97851af40b09bbff73cc6dd58ba7
Signed-off-by: Joy Onyerikwu <onyekachukwu.joy.onyerikwu@ibm.com>
diff --git a/systest/adapter_ucode_update.robot b/systest/adapter_ucode_update.robot
new file mode 100644
index 0000000..df14de6
--- /dev/null
+++ b/systest/adapter_ucode_update.robot
@@ -0,0 +1,106 @@
+*** 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}
\ No newline at end of file