xref: /openbmc/openbmc-test-automation/redfish/task_service/test_tasks_service.robot (revision 6fb70d98f2f1cb9273ba912deaa2cebe3c23ea86)
15431685fSGeorge Keishing*** Settings ***
25431685fSGeorge Keishing
35431685fSGeorge KeishingDocumentation       Test task service and tasks URI functionality of OpenBMC.
45431685fSGeorge Keishing
55431685fSGeorge KeishingLibrary             OperatingSystem
65431685fSGeorge Keishing
75431685fSGeorge KeishingResource            ../../lib/resource.robot
85431685fSGeorge KeishingResource            ../../lib/bmc_redfish_resource.robot
95431685fSGeorge KeishingResource            ../../lib/dump_utils.robot
105431685fSGeorge KeishingResource            ../../lib/openbmc_ffdc.robot
115431685fSGeorge Keishing
125431685fSGeorge KeishingSuite Setup         Suite Setup Execution
135431685fSGeorge KeishingSuite Teardown      Suite Teardown Execution
145431685fSGeorge KeishingTest Teardown       FFDC On Test Case Fail
155431685fSGeorge Keishing
16*6fb70d98SMatt FischerTest Tags          Tasks_Service
175431685fSGeorge Keishing
185431685fSGeorge Keishing*** Variables ***
195431685fSGeorge Keishing${TIME_REGEXP_PATTERN}   (.+)[\\-|\\+]\\d\\d\\:\\d\\d
205431685fSGeorge Keishing
215431685fSGeorge Keishing*** Test Cases ***
225431685fSGeorge Keishing
235431685fSGeorge KeishingVerify Task Service Attributes
245431685fSGeorge Keishing    [Documentation]  Validate attributes and default values in task service URI.
255431685fSGeorge Keishing    [Tags]  Verify_Task_Service_Attributes
265431685fSGeorge Keishing
275431685fSGeorge Keishing    # {
285431685fSGeorge Keishing    #     "@odata.id": "/redfish/v1/TaskService",
295431685fSGeorge Keishing    #     "@odata.type": "#TaskService.v1_1_4.TaskService",
305431685fSGeorge Keishing    #     "CompletedTaskOverWritePolicy": "Oldest",
315431685fSGeorge Keishing    #     "DateTime": "2022-08-08T06:04:11+00:00",
325431685fSGeorge Keishing    #     "Id": "TaskService",
335431685fSGeorge Keishing    #     "LifeCycleEventOnTaskStateChange": true,
345431685fSGeorge Keishing    #     "Name": "Task Service",
355431685fSGeorge Keishing    #     "ServiceEnabled": true,
365431685fSGeorge Keishing    #     "Status": {
375431685fSGeorge Keishing    #         "Health": "OK",
385431685fSGeorge Keishing    #         "HealthRollup": "OK",
395431685fSGeorge Keishing    #         "State": "Enabled"
405431685fSGeorge Keishing    #     },
415431685fSGeorge Keishing    #     "Tasks": {
425431685fSGeorge Keishing    #         "@odata.id": "/redfish/v1/TaskService/Tasks"
435431685fSGeorge Keishing    #     }
445431685fSGeorge Keishing    # }
455431685fSGeorge Keishing
465431685fSGeorge Keishing    ${resp}=  Redfish.Get Properties  /redfish/v1/TaskService
475431685fSGeorge Keishing
485431685fSGeorge Keishing    # Verify CompletedTaskOverWritePolicy is a valid value.
495431685fSGeorge Keishing    Should Be True
505431685fSGeorge Keishing    ...  '${resp["CompletedTaskOverWritePolicy"]}' in ${allowed_completed_task_overwrite_policy}
515431685fSGeorge Keishing
525431685fSGeorge Keishing    # Verify service enabled property.
535431685fSGeorge Keishing    Should Be Equal  ${resp["ServiceEnabled"]}  ${TRUE}
545431685fSGeorge Keishing
555431685fSGeorge Keishing    # Verify status.
565431685fSGeorge Keishing    Dictionaries Should Be Equal  ${resp["Status"]}  ${valid_status}
575431685fSGeorge Keishing
585431685fSGeorge Keishing    # Get current time from BMC console.
595431685fSGeorge Keishing    ${cur_time}=  Get Current Date from BMC
605431685fSGeorge Keishing
615431685fSGeorge Keishing    # Remove offset from task service time.
625431685fSGeorge Keishing    ${bmc_time}=  Get Regexp Matches  ${resp["DateTime"]}
635431685fSGeorge Keishing    ...  ${TIME_REGEXP_PATTERN}  1
645431685fSGeorge Keishing
655431685fSGeorge Keishing    ${time_diff}=  Subtract Date From Date  ${cur_time}  ${bmc_time[0]}
665431685fSGeorge Keishing    ...  date1_format=%m/%d/%Y %H:%M:%S  date2_format=%Y-%m-%dT%H:%M:%S
675431685fSGeorge Keishing
685431685fSGeorge Keishing    # Compare system time and time displayed in task service URI.
695431685fSGeorge Keishing    ${time_diff}=  Evaluate  ${time_diff} < 5
705431685fSGeorge Keishing
715431685fSGeorge Keishing    Should Be Equal  ${time_diff}  ${TRUE}
725431685fSGeorge Keishing    ...  Time Difference between BMC time and time displayed in task URI is higher.
735431685fSGeorge Keishing
745431685fSGeorge Keishing
755431685fSGeorge KeishingTest Generated Task Instance Validity And Task State
765431685fSGeorge Keishing    [Documentation]  Trigger a Redfish event that generates task instance and
775431685fSGeorge Keishing    ...  verify the values of generated task instance.
785431685fSGeorge Keishing    [Tags]  Test_Generated_Task_Instance_Validity_And_Task_State
795431685fSGeorge Keishing
805431685fSGeorge Keishing    # {
815431685fSGeorge Keishing    #     "@odata.id": "/redfish/v1/TaskService/Tasks/3",
825431685fSGeorge Keishing    #     "@odata.type": "#Task.v1_4_3.Task",
835431685fSGeorge Keishing    #     "Id": "3",
845431685fSGeorge Keishing    #     "Messages": [
855431685fSGeorge Keishing    #         {
865431685fSGeorge Keishing    #             "@odata.type": "#Message.v1_0_0.Message",
875431685fSGeorge Keishing    #             "Message": "The task with id 3 has started.",
885431685fSGeorge Keishing    #             "MessageArgs": [
895431685fSGeorge Keishing    #                 "3"
905431685fSGeorge Keishing    #             ],
915431685fSGeorge Keishing    #             "MessageId": "TaskEvent.1.0.1.TaskStarted",
925431685fSGeorge Keishing    #             "Resolution": "None.",
935431685fSGeorge Keishing    #             "Severity": "OK"
945431685fSGeorge Keishing    #         }
955431685fSGeorge Keishing    #     ],
965431685fSGeorge Keishing    #     "Name": "Task 3",
975431685fSGeorge Keishing    #     "Payload": {
985431685fSGeorge Keishing    #         "HttpHeaders": [
995431685fSGeorge Keishing    #             "User-Agent: PostmanRuntime/7.26.8",
1005431685fSGeorge Keishing    #             "Accept: */*",
1015431685fSGeorge Keishing    #             "Host: 10.0.123.113",
1025431685fSGeorge Keishing    #             "Accept-Encoding: gzip, deflate, br",
1035431685fSGeorge Keishing    #             "Connection: keep-alive",
1045431685fSGeorge Keishing    #             "Content-Length: 41"
1055431685fSGeorge Keishing    #         ],
1065431685fSGeorge Keishing    #         "HttpOperation": "POST",
1075431685fSGeorge Keishing    #         "JsonBody": "{\n  \"DiagnosticDataType\": \"Manager\"\n}",
1085431685fSGeorge Keishing    #         "TargetUri": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions
1095431685fSGeorge Keishing    #                      /LogService.CollectDiagnosticData"
1105431685fSGeorge Keishing    #     },
1115431685fSGeorge Keishing    #     "PercentComplete": 0,
1125431685fSGeorge Keishing    #     "StartTime": "2022-08-09T12:57:06+00:00",
1135431685fSGeorge Keishing    #     "TaskMonitor": "/redfish/v1/TaskService/Tasks/3/Monitor",
1145431685fSGeorge Keishing    #     "TaskState": "Running",
1155431685fSGeorge Keishing    #     "TaskStatus": "OK"
1165431685fSGeorge Keishing    # }
1175431685fSGeorge Keishing
1185431685fSGeorge Keishing    # Trigger a Redfish event that generates task instance.
1195431685fSGeorge Keishing    ${task_id}  ${resp_obj}=  Generate Task Instance
1205431685fSGeorge Keishing
1215431685fSGeorge Keishing    # Verify task monitor before task completion.
1225431685fSGeorge Keishing    ${resp}=  Redfish.Get  /redfish/v1/TaskService/Tasks/${task_id}/Monitor
1235431685fSGeorge Keishing    ...  valid_status_codes=[${HTTP_ACCEPTED}]
1245431685fSGeorge Keishing
1255431685fSGeorge Keishing    # Get current time from BMC console before generating task.
1265431685fSGeorge Keishing    ${cur_time}=  Get Current Date from BMC
1275431685fSGeorge Keishing
1285431685fSGeorge Keishing    # Verify task start time is within 10s of current time.
1295431685fSGeorge Keishing    ${resp}=  Redfish.Get Properties  /redfish/v1/TaskService/Tasks/${task_id}
1305431685fSGeorge Keishing
1315431685fSGeorge Keishing    ${start_time}=  Get Regexp Matches  ${resp["StartTime"]}
1325431685fSGeorge Keishing    ...  ${TIME_REGEXP_PATTERN}  1
1335431685fSGeorge Keishing
1345431685fSGeorge Keishing    # Compare system time and time displayed in task service URI.
1355431685fSGeorge Keishing    ${time_diff}=  Subtract Date From Date  ${cur_time}  ${start_time[0]}
1365431685fSGeorge Keishing    ...  date1_format=%m/%d/%Y %H:%M:%S  date2_format=%Y-%m-%dT%H:%M:%S
1375431685fSGeorge Keishing
1385431685fSGeorge Keishing
1395431685fSGeorge Keishing    ${time_diff}=  Evaluate  ${time_diff} < 10
1405431685fSGeorge Keishing    Should Be Equal  ${time_diff}  ${TRUE}  Time difference greater than 10 seconds.
1415431685fSGeorge Keishing
1425431685fSGeorge Keishing    # Verify HttpOperation in task payload.
1435431685fSGeorge Keishing    Should Be Equal  ${resp["Payload"]["HttpOperation"]}  POST
1445431685fSGeorge Keishing
1455431685fSGeorge Keishing    # Verify TargetUri.
1465431685fSGeorge Keishing    Should Be Equal  ${resp["Payload"]["TargetUri"]}
1475431685fSGeorge Keishing    ...  ${resp_obj.request.path}
1485431685fSGeorge Keishing
1495431685fSGeorge Keishing    Wait For Task Completion  ${task_id}  ${allowed_task_completion_state}
1505431685fSGeorge Keishing    ...  check_state=${TRUE}
1515431685fSGeorge Keishing
1525431685fSGeorge Keishing    # Verify task monitor URI after task completion.
1535431685fSGeorge Keishing    ${resp}=  Redfish.Get  /redfish/v1/TaskService/Tasks/${task_id}/Monitor
1545431685fSGeorge Keishing    ...  valid_status_codes=[${HTTP_NOT_FOUND}]
1555431685fSGeorge Keishing
1565431685fSGeorge Keishing    # Verify end time is greater than start time post task completion.
1575431685fSGeorge Keishing    ${resp}=  Redfish.Get Properties  /redfish/v1/TaskService/Tasks/${task_id}
1585431685fSGeorge Keishing
1595431685fSGeorge Keishing    ${end_time}=  Get Regexp Matches  ${resp["EndTime"]}
1605431685fSGeorge Keishing    ...  ${TIME_REGEXP_PATTERN}  1
1615431685fSGeorge Keishing
1625431685fSGeorge Keishing    # Compare start time and end time displayed in task service URI.
1635431685fSGeorge Keishing    ${time_diff}=  Subtract Date From Date  ${end_time[0]}  ${start_time[0]}
1645431685fSGeorge Keishing
1655431685fSGeorge Keishing    ${time_diff}=  Evaluate  ${time_diff} >= 0
1665431685fSGeorge Keishing
1675431685fSGeorge Keishing    Should Be Equal  ${time_diff}  ${TRUE}
1685431685fSGeorge Keishing    ...  End time not greater than start time.
1695431685fSGeorge Keishing
1705431685fSGeorge Keishing
1715431685fSGeorge KeishingVerify Task Persistency Post BMC Reboot
1725431685fSGeorge Keishing    [Documentation]  Verify task collection persistency post BMC reboot.
1735431685fSGeorge Keishing    [Tags]  Verify_Task_Persistency_Post_BMC_Reboot
1745431685fSGeorge Keishing
1755431685fSGeorge Keishing    Verify Generate Task Instance Completion
1765431685fSGeorge Keishing
1775431685fSGeorge Keishing    ${initial_task_count}=  Redfish.Get Attribute  /redfish/v1/TaskService/Tasks
1785431685fSGeorge Keishing    ...  Members@odata.count
1795431685fSGeorge Keishing
1805431685fSGeorge Keishing    Redfish BMC Reset Operation  reset_type=ForceRestart
1815431685fSGeorge Keishing
1825431685fSGeorge Keishing    ${current_task_count}=  Redfish.Get Attribute  /redfish/v1/TaskService/Tasks
1835431685fSGeorge Keishing    ...  Members@odata.count
1845431685fSGeorge Keishing
1855431685fSGeorge Keishing    Should Be Equal As Integers  ${initial_task_count}  ${current_task_count}
1865431685fSGeorge Keishing
1875431685fSGeorge Keishing
1885431685fSGeorge Keishing*** Keywords ***
1895431685fSGeorge Keishing
1905431685fSGeorge KeishingSuite Setup Execution
1915431685fSGeorge Keishing    [Documentation]  Do suite setup operation.
1925431685fSGeorge Keishing
1935431685fSGeorge Keishing    Redfish.login
1945431685fSGeorge Keishing    Load Task Service Properties Data
1955431685fSGeorge Keishing
1965431685fSGeorge Keishing
1975431685fSGeorge KeishingSuite Teardown Execution
1985431685fSGeorge Keishing    [Documentation]  Do suite teardown operation.
1995431685fSGeorge Keishing
2005431685fSGeorge Keishing    Run Keyword And Ignore Error  Redfish.Logout
2015431685fSGeorge Keishing    Close All Connections
2025431685fSGeorge Keishing
2035431685fSGeorge Keishing
2045431685fSGeorge KeishingGenerate Task Instance
2055431685fSGeorge Keishing    [Documentation]  Trigger Redfish event to generate task instance
2065431685fSGeorge Keishing    ...  and return the task id.
2075431685fSGeorge Keishing    [Arguments]  ${task_type}=bmc_dump
2085431685fSGeorge Keishing
2095431685fSGeorge Keishing    # Description of argument(s):
2105431685fSGeorge Keishing    # task_type         Default value for task_type is bmc_dump. When 'task_type'
2115431685fSGeorge Keishing    #                   is 'bmc_dump', then keyword will initiate bmc user dump
2125431685fSGeorge Keishing    #                   creation and will return the task id and response object.
2135431685fSGeorge Keishing
2145431685fSGeorge Keishing    IF  '${task_type}' == 'bmc_dump'
2155431685fSGeorge Keishing        ${task_id}  ${resp}=  Create BMC User Dump
2165431685fSGeorge Keishing    ELSE
2175431685fSGeorge Keishing        Fail  Task type "${task_type}" is unknown.
2185431685fSGeorge Keishing    END
2195431685fSGeorge Keishing
2205431685fSGeorge Keishing    Return From Keyword  ${task_id}  ${resp}
2215431685fSGeorge Keishing
2225431685fSGeorge Keishing
2235431685fSGeorge KeishingVerify Generate Task Instance Completion
2245431685fSGeorge Keishing    [Documentation]  Trigger Redfish event to generate task and wait until
2255431685fSGeorge Keishing    ...  task gets completed.
2265431685fSGeorge Keishing    [Arguments]  ${task_type}=bmc_dump
2275431685fSGeorge Keishing
2285431685fSGeorge Keishing    # Description of argument(s):
2295431685fSGeorge Keishing    # task_type         If 'task_type' set as 'bmc_dump', the keyword will
2305431685fSGeorge Keishing    #                   initiate bmc user dump creation and wait until
2315431685fSGeorge Keishing    #                   task is completed. Default value of task_type
2325431685fSGeorge Keishing    #                   is bmc_dump.
2335431685fSGeorge Keishing
2345431685fSGeorge Keishing    ${task_id}  ${resp}=  Generate Task Instance  ${task_type}
2355431685fSGeorge Keishing    Wait For Task Completion  ${task_id}  ${allowed_task_completion_state}
2365431685fSGeorge Keishing
2375431685fSGeorge Keishing
2385431685fSGeorge KeishingLoad Task Service Properties Data
2395431685fSGeorge Keishing    [Documentation]  Load the task service related properties from json file.
2405431685fSGeorge Keishing
2415431685fSGeorge Keishing    # User input -v TASK_JSON_FILE_PATH:<path> else default path.
2425431685fSGeorge Keishing    # ${task_json_file}=  Get Variable Value  ${TASK_JSON_FILE_PATH}  data/task_state.json
2435431685fSGeorge Keishing
2445431685fSGeorge Keishing    ${json}=  OperatingSystem.Get File  ${TASK_JSON_FILE_PATH}
2455431685fSGeorge Keishing    ${properties}=  Evaluate  json.loads('''${json}''')  json
2465431685fSGeorge Keishing
2475431685fSGeorge Keishing    Set Suite Variable  ${allowed_completed_task_overwrite_policy}
2485431685fSGeorge Keishing    ...  ${properties["TaskService"]["CompletedTaskOverWritePolicy"]["AllowedValues"]}
2495431685fSGeorge Keishing
2505431685fSGeorge Keishing    Set Suite Variable  ${allowed_task_state}
2515431685fSGeorge Keishing    ...  ${properties["Task"]["TaskState"]["AllowedValues"]}
2525431685fSGeorge Keishing
2535431685fSGeorge Keishing    Set Suite Variable  ${allowed_task_completion_state}
2545431685fSGeorge Keishing    ...  ${properties["Task"]["TaskState"]["AllowedCompletionTaskState"]}
2555431685fSGeorge Keishing
2565431685fSGeorge Keishing    Set Suite Variable  ${valid_status}
2575431685fSGeorge Keishing    ...  ${properties["TaskService"]["Status"]}
2585431685fSGeorge Keishing
2595431685fSGeorge Keishing
2605431685fSGeorge KeishingGet Current Date from BMC
2615431685fSGeorge Keishing    [Documentation]  Runs the date command from BMC and returns current date and time.
2625431685fSGeorge Keishing
2635431685fSGeorge Keishing    # Get Current Date from BMC
2645431685fSGeorge Keishing    ${date}  ${stderr}  ${rc}=  BMC Execute Command   date
2655431685fSGeorge Keishing
2665431685fSGeorge Keishing    # Split the string and remove first and 2nd last value from
2675431685fSGeorge Keishing    # the list and join to form %d %b %H:%M:%S %Y date format.
2685431685fSGeorge Keishing
2695431685fSGeorge Keishing   ${date}=  Split String  ${date}
2705431685fSGeorge Keishing
2715431685fSGeorge Keishing    Remove From List  ${date}  0
2725431685fSGeorge Keishing    Remove From List  ${date}  -2
2735431685fSGeorge Keishing    ${date}=  Evaluate  " ".join(${date})
2745431685fSGeorge Keishing
2755431685fSGeorge Keishing    # Convert the date format to %m/%d/%Y %H:%M:%S
2765431685fSGeorge Keishing    ${date}=  Convert Date  ${date}  date_format=%b %d %H:%M:%S %Y  result_format=%m/%d/%Y %H:%M:%S  exclude_millis=True
2775431685fSGeorge Keishing
278409df05dSGeorge Keishing    RETURN   ${date}
279