Redfish code update changes
Changes:
- Added task state in json file
data/task_state.json
- Added Keyword Create List Of Task,
Create Initiated Task State Dict,
Match Target URI,
Check Task With Match TargetUri,
Verify Task Progress State
- Added Keyword Get Task State From File
Tested:
Ran succesfully redfish/
update_service/test_redfish_bmc_code_update.robot
Change-Id: Iba2131925cb60614f456cbf5ec91b1b02bddc06b
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 17ffbe0..5210c9b 100644
--- a/lib/redfish_code_update_utils.robot
+++ b/lib/redfish_code_update_utils.robot
@@ -284,3 +284,101 @@
Redfish.Patch /redfish/v1/Managers/bmc
... body={'Links': {'ActiveSoftwareImage': {'@odata.id': '${firmware_inv_path}'}}}
+
+Create List Of Task
+ [Documentation] Return list of task id(s) from provided list of dictionary.
+ [Arguments] ${task_dict_list}
+
+ # Description of argument(s):
+ # task_dict_list Task id dictionary list.
+
+ # '@odata.id': '/redfish/v1/TaskService/Tasks/0'
+
+ ${task_list}= Create List
+
+ FOR ${task_dict} IN @{task_dict_list}
+ Append To List ${task_list} ${task_dict['@odata.id']}
+ END
+
+ [Return] ${task_list}
+
+
+Create Initiated Task State Dict
+ [Documentation] Create active task inventory dictionary as certain URI create task
+ ... to serve the user request.
+ [Arguments] ${task_obj}
+
+ # Description of argument(s):
+ # task_obj Task dictionary.
+
+ # task_inv
+ # TargetUri /redfish/v1/UpdateService
+ # TaskIdURI /redfish/v1/TaskService/Tasks/0
+ # TaskState Starting
+ # TaskStatus OK
+
+ ${task_inv}= Create Dictionary
+ Set To Dictionary ${task_inv} TargetUri ${task_obj['Payload']['TargetUri']}
+ Set To Dictionary ${task_inv} TaskIdURI ${task_obj['@odata.id']}
+ Set To Dictionary ${task_inv} TaskState ${task_obj['TaskState']}
+ Set To Dictionary ${task_inv} TaskStatus ${task_obj['TaskStatus']}
+
+ [Return] ${task_inv}
+
+
+Match Target URI
+ [Documentation] Match target uri from task list.
+ [Arguments] ${task_list} ${target_uri}
+
+ # Description of argument(s):
+ # task_list Task id list.
+ # target_uri Task created for target URI.
+
+ # target_uri /redfish/v1/UpdateService
+
+ FOR ${task_id} IN @{task_list}
+ ${task_payload}= Redfish.Get Properties ${task_id}
+ Run Keyword And Return If '${task_payload['Payload']['TargetUri']}' == '${target_uri}' Create Initiated Task State Dict ${task_payload}
+ END
+
+
+Check Task With Match TargetUri
+ [Documentation] Create task state dictionary.
+ [Arguments] ${target_uri}=/redfish/v1/TaskService/Tasks
+
+ # Description of argument(s):
+ # target_uri Target URI for which task is initiated.
+
+ ${task_dict_list}= Redfish.Get Attribute /redfish/v1/TaskService/Tasks Members
+
+ ${task_list}= Create List Of Task ${task_dict_list}
+
+ ${task_inv}= Match Target URI ${task_list} ${target_uri}
+
+ [Return] ${task_inv}
+
+
+Verify Task Progress State
+ [Documentation] Verify task progress matches the user expected task state.
+ [Arguments] ${task_inv} ${task_state}
+
+ # Description of argument(s):
+ # task_inv Initiated task inventory dict information.
+ # task_state Expected task state, user reference from data/task_state.json.
+
+ # task_inv
+ # TaskIdURI /redfish/v1/TaskService/Tasks/0
+ # TaskState Starting
+ # TaskStatus OK
+
+ ${task_payload}= Redfish.Get Properties ${task_inv['TaskIdURI']}
+
+ ${temp_task_inv}= Create Dictionary
+ Set To Dictionary ${temp_task_inv} TaskState ${task_payload['TaskState']}
+ Set To Dictionary ${temp_task_inv} TaskStatus ${task_payload['TaskStatus']}
+
+ Rprint Vars temp_task_inv
+
+ Should Be Equal As Strings ${task_state['TaskState']} ${task_payload['TaskState']}
+ Should Be Equal As Strings ${task_state['TaskStatus']} ${task_payload['TaskStatus']}
+
diff --git a/lib/utils.robot b/lib/utils.robot
index 1032514..a306dc5 100755
--- a/lib/utils.robot
+++ b/lib/utils.robot
@@ -832,6 +832,35 @@
[Return] ${post_code_update_actions}
+Get Task State From File
+ [Documentation] Get task states from pre-define data/task_state.json file.
+
+ # Example: Task state JSON format.
+ #
+ # {
+ # "TaskRunning": {
+ # "TaskState": "Running",
+ # "TaskStatus": "OK"
+ # },
+ # "TaskCompleted": {
+ # "TaskState": "Completed",
+ # "TaskStatus": "OK"
+ # },
+ # "TaskException": {
+ # "TaskState": "Exception",
+ # "TaskStatus": "Warning"
+ # }
+ # }
+
+ # Python module: get_code_base_dir_path()
+ ${code_base_dir_path}= Get Code Base Dir Path
+ ${task_state}= Evaluate
+ ... json.load(open('${code_base_dir_path}data/task_state.json')) modules=json
+ Rprint Vars task_state
+
+ [Return] ${task_state}
+
+
Redfish Set Boot Default
[Documentation] Set and Verify Boot source override
[Arguments] ${override_enabled} ${override_target} ${override_mode}=UEFI