Code enhancement for firmware update

Changes:
   - Code enhancement.
     "Redfish Code Update With Multiple Firmware"

Tested: - Ran successfully
     Redfish Code Update With Multiple Firmware
Change-Id: I955e81db5de30f82aa4ec57868c46c0f3cd12b3a
Signed-off-by: Sushil Singh <susilsi7@in.ibm.com>
diff --git a/lib/redfish_code_update_utils.robot b/lib/redfish_code_update_utils.robot
index 916540e..4395ef2 100644
--- a/lib/redfish_code_update_utils.robot
+++ b/lib/redfish_code_update_utils.robot
@@ -341,6 +341,26 @@
     [Return]  ${task_inv}
 
 
+Get Task Inventory
+    [Documentation]  Return task inventory.
+    [Arguments]  ${task_info}
+
+    # Description of argument(s):
+    # task_info    Task information.
+
+    # Task information.
+    # @odata.id: /redfish/v1/TaskService/Tasks/1
+    # Id: 1
+    # TaskState: Starting
+    # TaskStatus: OK
+
+    ${task_payload}=  Redfish.Get Properties   ${task_info['@odata.id']}
+
+    ${task_inv}=  Create Initiated Task State Dict  ${task_payload}
+
+    [Return]  ${task_inv}
+
+
 Match Target URI
     [Documentation]  Match target uri from task list.
     [Arguments]  ${task_list}  ${target_uri}
diff --git a/lib/rest_client.robot b/lib/rest_client.robot
index c82087f..2ebbd14 100644
--- a/lib/rest_client.robot
+++ b/lib/rest_client.robot
@@ -372,7 +372,7 @@
     Valid Value  ret.status_code  ${valid_status_codes}
     Delete All Sessions
 
-    [Return]  ${ret.status_code}
+    [Return]  ${ret}
 
 
 Redfish Login
diff --git a/redfish/update_service/test_redfish_bmc_code_update.robot b/redfish/update_service/test_redfish_bmc_code_update.robot
index b02441e..5f6741d 100644
--- a/redfish/update_service/test_redfish_bmc_code_update.robot
+++ b/redfish/update_service/test_redfish_bmc_code_update.robot
@@ -82,7 +82,7 @@
     [Template]  Redfish Multiple Upload Image And Check Progress State
 
     # policy   image_file_path     alternate_image_file_path
-    Immediate  ${IMAGE_FILE_PATH}  ${ALTERNATE_IMAGE_FILE_PATH}
+    OnReset  ${IMAGE_FILE_PATH}  ${ALTERNATE_IMAGE_FILE_PATH}
 
 
 Post BMC Reset Perform Redfish Code Update
@@ -227,6 +227,7 @@
     ${redfish_update_uri}=  Get Redfish Update Service URI
 
     ${resp}=  Upload Image To BMC  ${redfish_update_uri}  timeout=${600}  data=${file_bin_data}
+
     Log To Console   Completed image upload to BMC.
 
     Sleep  5s
@@ -253,8 +254,13 @@
     # IMAGE_FILE_PATH            The path to BMC image file.
     # ALTERNATE_IMAGE_FILE_PATH  The path to alternate BMC image file.
 
+
+    ${task_inv_dict}=  Get Task State from File
+
     ${post_code_update_actions}=  Get Post Boot Action
+
     Valid File Path  ALTERNATE_IMAGE_FILE_PATH
+
     ${state}=  Get Pre Reboot State
     Rprint Vars  state
 
@@ -264,25 +270,35 @@
     # "HttpPushUri": "/redfish/v1/UpdateService/update",
 
     ${redfish_update_uri}=  Get Redfish Update Service URI
-    Redfish Upload Image  ${redfish_update_uri}  ${IMAGE_FILE_PATH}
 
-    ${first_image_id}=  Get Latest Image ID
-    Rprint Vars  first_image_id
-    Sleep  5s
-    Redfish Upload Image  ${redfish_update_uri}  ${ALTERNATE_IMAGE_FILE_PATH}
+    ${file_bin_data1}=  OperatingSystem.Get Binary File  ${IMAGE_FILE_PATH}
+    ${file_bin_data2}=  OperatingSystem.Get Binary File  ${ALTERNATE_IMAGE_FILE_PATH}
 
-    ${second_image_id}=  Get Latest Image ID
-    Rprint Vars  second_image_id
+    Log To Console  Uploading first image.
+    ${resp1}=  Upload Image To BMC  ${redfish_update_uri}  timeout=${600}  data=${file_bin_data1}
 
-    Check Image Update Progress State
-    ...  match_state='Updating', 'Disabled'  image_id=${second_image_id}
+    Log To Console  Uploading second image.
+    ${resp2}=  Upload Image To BMC  ${redfish_update_uri}  timeout=${600}  data=${file_bin_data2}
 
-    Check Image Update Progress State
-    ...  match_state='Updating'  image_id=${first_image_id}
+    ${task_info2}=    evaluate    json.loads('''${resp2.content}''')    json
 
-    Wait Until Keyword Succeeds  8 min  20 sec
-    ...  Check Image Update Progress State
-    ...    match_state='Enabled'  image_id=${first_image_id}
+    Sleep  3s
+
+    ${task_inv2}=  Get Task Inventory  ${task_info2}
+    Log  ${task_inv2}   
+
+    Wait Until Keyword Succeeds  5 min  10 sec
+    ...  Verify Task Progress State  ${task_inv2}  ${task_inv_dict['TaskException']}
+
+    ${task_info1}=    evaluate    json.loads('''${resp1.content}''')    json
+    Log  ${task_info1}
+
+    ${task_inv1}=  Get Task Inventory  ${task_info1}
+    Log  ${task_inv1}
+
+    Wait Until Keyword Succeeds  5 min  10 sec
+    ...  Verify Task Progress State  ${task_inv1}  ${task_inv_dict['TaskCompleted']}
+
     Run Key  ${post_code_update_actions['BMC image']['${apply_time}']}
     Redfish.Login
     Redfish Verify BMC Version  ${IMAGE_FILE_PATH}
diff --git a/redfish/update_service/test_redfish_image_upload.robot b/redfish/update_service/test_redfish_image_upload.robot
index ebb6936..19b4436 100644
--- a/redfish/update_service/test_redfish_image_upload.robot
+++ b/redfish/update_service/test_redfish_image_upload.robot
@@ -142,13 +142,13 @@
     Valid File Path  image_file_path
     Set ApplyTime  policy=OnReset
     ${image_data}=  OperatingSystem.Get Binary File  ${image_file_path}
-    ${status_code}=  Upload Image To BMC
+    ${resp}=  Upload Image To BMC
     ...  ${REDFISH_BASE_URI}UpdateService
     ...  ${timeout}
     ...  valid_status_codes=[${HTTP_OK}, ${HTTP_INTERNAL_SERVER_ERROR}]
     ...  data=${image_data}
 
-    Return From Keyword If  ${status_code} == ${HTTP_INTERNAL_SERVER_ERROR}
+    Return From Keyword If  ${resp.status_code} == ${HTTP_INTERNAL_SERVER_ERROR}
 
     ${image_id}=  Get Latest Image ID
     Rprint Vars  image_id