Redfish code update lab/ci usecases

Change-Id: I4b45ed9270776ba782b4d970cb8fb9df33bc8635
Signed-off-by: Sushil Singh <susilsi7@in.ibm.com>
diff --git a/redfish/extended/redfish_bmc_code_update.robot b/redfish/extended/redfish_bmc_code_update.robot
new file mode 100644
index 0000000..da8caf1
--- /dev/null
+++ b/redfish/extended/redfish_bmc_code_update.robot
@@ -0,0 +1,135 @@
+*** Settings ***
+Documentation            Update the BMC code on a target BMC via Redifsh.
+
+# Test Parameters:
+# IMAGE_FILE_PATH        The path to the BMC image file.
+#
+# Firmware update states:
+#     Enabled            Image is installed and either functional or active.
+#     Disabled           Image installation failed or ready for activation.
+#     Updating           Image installation currently in progress.
+
+Resource                 ../../lib/resource.robot
+Resource                 ../../lib/bmc_redfish_resource.robot
+Resource                 ../../lib/openbmc_ffdc.robot
+Resource                 ../../lib/common_utils.robot
+Resource                 ../../lib/code_update_utils.robot
+Resource                 ../../lib/redfish_code_update_utils.robot
+Resource                 ../../extended/code_update/update_bmc.robot
+Library                  ../../lib/gen_robot_valid.py
+Library                  ../../lib/var_funcs.py
+
+Suite Setup             Suite Setup Execution
+Suite Teardown          Redfish.Logout
+Test Setup              Printn
+Test Teardown           FFDC On Test Case Fail
+
+Force Tags              BMC_Code_Update
+
+*** Test Cases ***
+
+Redfish BMC Code Update
+    [Documentation]  Update the firmware image.
+    [Tags]  Redfish_BMC_Code_Update
+
+    ${image_version}=  Get Version Tar  ${IMAGE_FILE_PATH}
+    Rprint Vars  image_version
+
+    Run Keyword If  not ${FORCE_UPDATE}
+    ...  Activate Existing Firmware  ${image_version}
+    Redfish Update Firmware
+
+*** Keywords ***
+
+Suite Setup Execution
+    [Documentation]  Do the suite setup.
+
+    Redfish.Login
+
+    # Delete BMC dump and Error logs.
+    Delete All BMC Dump
+    Redfish Purge Event Log
+
+    # Checking for file existence.
+    Valid File Path  IMAGE_FILE_PATH
+
+
+Activate Existing Firmware
+    [Documentation]  Set fimware image to lower priority.
+    [Arguments]  ${image_version}
+
+    # Description of argument(s):
+    # image_version     Version of image.
+
+    ${software_inventory_record}=  Get Software Inventory State By Version
+    ...  ${image_version}
+    ${num_keys}=  Get Length  ${software_inventory_record}
+
+    Rprint Vars  software_inventory_record
+
+    # If no software inventory record was found, there is no existing
+    # firmware for the given version and therefore no action to be taken.
+    Return From Keyword If  not ${num_keys}
+
+    # Check if the existing firmware is functional.
+    Pass Execution If  ${software_inventory_record['functional']}
+    ...  The existing ${image_version} firmware is already functional.
+
+    # If existing firmware is not functional, then set the priority to least.
+    Print Timen  The existing ${image_version} firmware is not yet functional.
+    Set BMC Image Priority To Least  ${image_version}  ${software_inventory_record}
+
+    Pass Execution  The existing ${image_version} firmware is now functional.
+
+
+Get Image Priority
+    [Documentation]  Get Current Image Priority.
+    [Arguments]  ${image_version}
+
+    # Description of argument(s):
+    # image_version       The Fimware image version (e.g. ibm-v.x-xx).
+
+    ${software_info}=  Read Properties
+    ...  ${SOFTWARE_VERSION_URI}/enumerate  quiet=1
+    # Get only the record associated with our image_version.
+
+    ${software_info}=  Filter Struct
+    ...  ${software_info}  [('Version', '${image_version}')]
+    # Convert from dict to list.
+    ${software_info}=  Get Dictionary Values  ${software_info}
+
+    [Return]  ${software_info[0]['Priority']}
+
+
+Set BMC Image Priority To Least
+    [Documentation]  Set BMC image priority to least value.
+    [Arguments]  ${image_version}  ${software_inventory}
+
+    # Description of argument(s):
+    # image_version       The Fimware image version (e.g. ibm-v.x-xx).
+    # software_inventory  Software inventory details.
+
+    ${least_priority}=  Get Least Value Priority Image  ${VERSION_PURPOSE_BMC}
+    ${cur_priority}=  Get Image Priority  ${image_version}
+    Rprint Vars  least_priority  cur_priority
+
+    Return From Keyword If  '${least_priority}' == ${cur_priority}
+    Set Host Software Property
+    ...  ${SOFTWARE_VERSION_URI}${software_inventory['image_id']}
+    ...  Priority  ${least_priority}
+
+    # Reboot BMC And Login
+    Redfish OBMC Reboot (off)
+    Redfish.Login
+
+
+Redfish Update Firmware
+    [Documentation]  Update the BMC firmware via redfish interface.
+
+    ${state}=  Get Pre Reboot State
+    Rprint Vars  state
+
+    Redfish Upload Image And Check Progress State  Immediate
+    Reboot BMC And Verify BMC Image
+    ...  Immediate  start_boot_seconds=${state['epoch_seconds']}
+