*** Settings *** Documentation Test task service and tasks URI functionality of OpenBMC. Library OperatingSystem Resource ../../lib/resource.robot Resource ../../lib/bmc_redfish_resource.robot Resource ../../lib/dump_utils.robot Resource ../../lib/openbmc_ffdc.robot Suite Setup Suite Setup Execution Suite Teardown Suite Teardown Execution Test Teardown FFDC On Test Case Fail Force Tags Tasks_Service *** Variables *** ${TIME_REGEXP_PATTERN} (.+)[\\-|\\+]\\d\\d\\:\\d\\d *** Test Cases *** Verify Task Service Attributes [Documentation] Validate attributes and default values in task service URI. [Tags] Verify_Task_Service_Attributes # { # "@odata.id": "/redfish/v1/TaskService", # "@odata.type": "#TaskService.v1_1_4.TaskService", # "CompletedTaskOverWritePolicy": "Oldest", # "DateTime": "2022-08-08T06:04:11+00:00", # "Id": "TaskService", # "LifeCycleEventOnTaskStateChange": true, # "Name": "Task Service", # "ServiceEnabled": true, # "Status": { # "Health": "OK", # "HealthRollup": "OK", # "State": "Enabled" # }, # "Tasks": { # "@odata.id": "/redfish/v1/TaskService/Tasks" # } # } ${resp}= Redfish.Get Properties /redfish/v1/TaskService # Verify CompletedTaskOverWritePolicy is a valid value. Should Be True ... '${resp["CompletedTaskOverWritePolicy"]}' in ${allowed_completed_task_overwrite_policy} # Verify service enabled property. Should Be Equal ${resp["ServiceEnabled"]} ${TRUE} # Verify status. Dictionaries Should Be Equal ${resp["Status"]} ${valid_status} # Get current time from BMC console. ${cur_time}= Get Current Date from BMC # Remove offset from task service time. ${bmc_time}= Get Regexp Matches ${resp["DateTime"]} ... ${TIME_REGEXP_PATTERN} 1 ${time_diff}= Subtract Date From Date ${cur_time} ${bmc_time[0]} ... date1_format=%m/%d/%Y %H:%M:%S date2_format=%Y-%m-%dT%H:%M:%S # Compare system time and time displayed in task service URI. ${time_diff}= Evaluate ${time_diff} < 5 Should Be Equal ${time_diff} ${TRUE} ... Time Difference between BMC time and time displayed in task URI is higher. Test Generated Task Instance Validity And Task State [Documentation] Trigger a Redfish event that generates task instance and ... verify the values of generated task instance. [Tags] Test_Generated_Task_Instance_Validity_And_Task_State # { # "@odata.id": "/redfish/v1/TaskService/Tasks/3", # "@odata.type": "#Task.v1_4_3.Task", # "Id": "3", # "Messages": [ # { # "@odata.type": "#Message.v1_0_0.Message", # "Message": "The task with id 3 has started.", # "MessageArgs": [ # "3" # ], # "MessageId": "TaskEvent.1.0.1.TaskStarted", # "Resolution": "None.", # "Severity": "OK" # } # ], # "Name": "Task 3", # "Payload": { # "HttpHeaders": [ # "User-Agent: PostmanRuntime/7.26.8", # "Accept: */*", # "Host: 10.0.123.113", # "Accept-Encoding: gzip, deflate, br", # "Connection: keep-alive", # "Content-Length: 41" # ], # "HttpOperation": "POST", # "JsonBody": "{\n \"DiagnosticDataType\": \"Manager\"\n}", # "TargetUri": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions # /LogService.CollectDiagnosticData" # }, # "PercentComplete": 0, # "StartTime": "2022-08-09T12:57:06+00:00", # "TaskMonitor": "/redfish/v1/TaskService/Tasks/3/Monitor", # "TaskState": "Running", # "TaskStatus": "OK" # } # Trigger a Redfish event that generates task instance. ${task_id} ${resp_obj}= Generate Task Instance # Verify task monitor before task completion. ${resp}= Redfish.Get /redfish/v1/TaskService/Tasks/${task_id}/Monitor ... valid_status_codes=[${HTTP_ACCEPTED}] # Get current time from BMC console before generating task. ${cur_time}= Get Current Date from BMC # Verify task start time is within 10s of current time. ${resp}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id} ${start_time}= Get Regexp Matches ${resp["StartTime"]} ... ${TIME_REGEXP_PATTERN} 1 # Compare system time and time displayed in task service URI. ${time_diff}= Subtract Date From Date ${cur_time} ${start_time[0]} ... date1_format=%m/%d/%Y %H:%M:%S date2_format=%Y-%m-%dT%H:%M:%S ${time_diff}= Evaluate ${time_diff} < 10 Should Be Equal ${time_diff} ${TRUE} Time difference greater than 10 seconds. # Verify HttpOperation in task payload. Should Be Equal ${resp["Payload"]["HttpOperation"]} POST # Verify TargetUri. Should Be Equal ${resp["Payload"]["TargetUri"]} ... ${resp_obj.request.path} Wait For Task Completion ${task_id} ${allowed_task_completion_state} ... check_state=${TRUE} # Verify task monitor URI after task completion. ${resp}= Redfish.Get /redfish/v1/TaskService/Tasks/${task_id}/Monitor ... valid_status_codes=[${HTTP_NOT_FOUND}] # Verify end time is greater than start time post task completion. ${resp}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id} ${end_time}= Get Regexp Matches ${resp["EndTime"]} ... ${TIME_REGEXP_PATTERN} 1 # Compare start time and end time displayed in task service URI. ${time_diff}= Subtract Date From Date ${end_time[0]} ${start_time[0]} ${time_diff}= Evaluate ${time_diff} >= 0 Should Be Equal ${time_diff} ${TRUE} ... End time not greater than start time. Verify Task Persistency Post BMC Reboot [Documentation] Verify task collection persistency post BMC reboot. [Tags] Verify_Task_Persistency_Post_BMC_Reboot Verify Generate Task Instance Completion ${initial_task_count}= Redfish.Get Attribute /redfish/v1/TaskService/Tasks ... Members@odata.count Redfish BMC Reset Operation reset_type=ForceRestart ${current_task_count}= Redfish.Get Attribute /redfish/v1/TaskService/Tasks ... Members@odata.count Should Be Equal As Integers ${initial_task_count} ${current_task_count} *** Keywords *** Suite Setup Execution [Documentation] Do suite setup operation. Redfish.login Load Task Service Properties Data Suite Teardown Execution [Documentation] Do suite teardown operation. Run Keyword And Ignore Error Redfish.Logout Close All Connections Generate Task Instance [Documentation] Trigger Redfish event to generate task instance ... and return the task id. [Arguments] ${task_type}=bmc_dump # Description of argument(s): # task_type Default value for task_type is bmc_dump. When 'task_type' # is 'bmc_dump', then keyword will initiate bmc user dump # creation and will return the task id and response object. IF '${task_type}' == 'bmc_dump' ${task_id} ${resp}= Create BMC User Dump ELSE Fail Task type "${task_type}" is unknown. END Return From Keyword ${task_id} ${resp} Verify Generate Task Instance Completion [Documentation] Trigger Redfish event to generate task and wait until ... task gets completed. [Arguments] ${task_type}=bmc_dump # Description of argument(s): # task_type If 'task_type' set as 'bmc_dump', the keyword will # initiate bmc user dump creation and wait until # task is completed. Default value of task_type # is bmc_dump. ${task_id} ${resp}= Generate Task Instance ${task_type} Wait For Task Completion ${task_id} ${allowed_task_completion_state} Load Task Service Properties Data [Documentation] Load the task service related properties from json file. # User input -v TASK_JSON_FILE_PATH: else default path. # ${task_json_file}= Get Variable Value ${TASK_JSON_FILE_PATH} data/task_state.json ${json}= OperatingSystem.Get File ${TASK_JSON_FILE_PATH} ${properties}= Evaluate json.loads('''${json}''') json Set Suite Variable ${allowed_completed_task_overwrite_policy} ... ${properties["TaskService"]["CompletedTaskOverWritePolicy"]["AllowedValues"]} Set Suite Variable ${allowed_task_state} ... ${properties["Task"]["TaskState"]["AllowedValues"]} Set Suite Variable ${allowed_task_completion_state} ... ${properties["Task"]["TaskState"]["AllowedCompletionTaskState"]} Set Suite Variable ${valid_status} ... ${properties["TaskService"]["Status"]} Get Current Date from BMC [Documentation] Runs the date command from BMC and returns current date and time. # Get Current Date from BMC ${date} ${stderr} ${rc}= BMC Execute Command date # Split the string and remove first and 2nd last value from # the list and join to form %d %b %H:%M:%S %Y date format. ${date}= Split String ${date} Remove From List ${date} 0 Remove From List ${date} -2 ${date}= Evaluate " ".join(${date}) # Convert the date format to %m/%d/%Y %H:%M:%S ${date}= Convert Date ${date} date_format=%b %d %H:%M:%S %Y result_format=%m/%d/%Y %H:%M:%S exclude_millis=True [Return] ${date}