blob: f4559ec0f9f844934bd1cc63a9271c9c8bfe5f44 [file] [log] [blame]
*** 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
*** 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:<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}
${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}