diff --git a/redfish/task_service/test_tasks_service.robot b/redfish/task_service/test_tasks_service.robot
new file mode 100644
index 0000000..73d959b
--- /dev/null
+++ b/redfish/task_service/test_tasks_service.robot
@@ -0,0 +1,278 @@
+*** 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:<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}
