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