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