blob: 73d959bdf90c3726b88de38640a5782b43b6b27f [file] [log] [blame]
aravinth0510350edc82022-09-30 06:33:48 +00001*** Settings ***
2
3Documentation Test task service and tasks URI functionality of OpenBMC.
4
5Library OperatingSystem
6
7Resource ../../lib/resource.robot
8Resource ../../lib/bmc_redfish_resource.robot
9Resource ../../lib/dump_utils.robot
10Resource ../../lib/openbmc_ffdc.robot
11
12Suite Setup Suite Setup Execution
13Suite Teardown Suite Teardown Execution
14Test Teardown FFDC On Test Case Fail
15
George Keishing54316852023-10-16 14:03:29 +053016Force Tags Tasks_Service
17
aravinth0510350edc82022-09-30 06:33:48 +000018*** Variables ***
19${TIME_REGEXP_PATTERN} (.+)[\\-|\\+]\\d\\d\\:\\d\\d
20
aravinth0510350edc82022-09-30 06:33:48 +000021*** Test Cases ***
22
23Verify Task Service Attributes
24 [Documentation] Validate attributes and default values in task service URI.
25 [Tags] Verify_Task_Service_Attributes
26
27 # {
28 # "@odata.id": "/redfish/v1/TaskService",
29 # "@odata.type": "#TaskService.v1_1_4.TaskService",
30 # "CompletedTaskOverWritePolicy": "Oldest",
31 # "DateTime": "2022-08-08T06:04:11+00:00",
32 # "Id": "TaskService",
33 # "LifeCycleEventOnTaskStateChange": true,
34 # "Name": "Task Service",
35 # "ServiceEnabled": true,
36 # "Status": {
37 # "Health": "OK",
38 # "HealthRollup": "OK",
39 # "State": "Enabled"
40 # },
41 # "Tasks": {
42 # "@odata.id": "/redfish/v1/TaskService/Tasks"
43 # }
44 # }
45
46 ${resp}= Redfish.Get Properties /redfish/v1/TaskService
47
48 # Verify CompletedTaskOverWritePolicy is a valid value.
49 Should Be True
50 ... '${resp["CompletedTaskOverWritePolicy"]}' in ${allowed_completed_task_overwrite_policy}
51
52 # Verify service enabled property.
53 Should Be Equal ${resp["ServiceEnabled"]} ${TRUE}
54
55 # Verify status.
56 Dictionaries Should Be Equal ${resp["Status"]} ${valid_status}
57
58 # Get current time from BMC console.
59 ${cur_time}= Get Current Date from BMC
60
61 # Remove offset from task service time.
62 ${bmc_time}= Get Regexp Matches ${resp["DateTime"]}
63 ... ${TIME_REGEXP_PATTERN} 1
64
65 ${time_diff}= Subtract Date From Date ${cur_time} ${bmc_time[0]}
66 ... date1_format=%m/%d/%Y %H:%M:%S date2_format=%Y-%m-%dT%H:%M:%S
67
68 # Compare system time and time displayed in task service URI.
69 ${time_diff}= Evaluate ${time_diff} < 5
70
71 Should Be Equal ${time_diff} ${TRUE}
72 ... Time Difference between BMC time and time displayed in task URI is higher.
73
74
75Test Generated Task Instance Validity And Task State
76 [Documentation] Trigger a Redfish event that generates task instance and
77 ... verify the values of generated task instance.
78 [Tags] Test_Generated_Task_Instance_Validity_And_Task_State
79
80 # {
81 # "@odata.id": "/redfish/v1/TaskService/Tasks/3",
82 # "@odata.type": "#Task.v1_4_3.Task",
83 # "Id": "3",
84 # "Messages": [
85 # {
86 # "@odata.type": "#Message.v1_0_0.Message",
87 # "Message": "The task with id 3 has started.",
88 # "MessageArgs": [
89 # "3"
90 # ],
91 # "MessageId": "TaskEvent.1.0.1.TaskStarted",
92 # "Resolution": "None.",
93 # "Severity": "OK"
94 # }
95 # ],
96 # "Name": "Task 3",
97 # "Payload": {
98 # "HttpHeaders": [
99 # "User-Agent: PostmanRuntime/7.26.8",
100 # "Accept: */*",
101 # "Host: 10.0.123.113",
102 # "Accept-Encoding: gzip, deflate, br",
103 # "Connection: keep-alive",
104 # "Content-Length: 41"
105 # ],
106 # "HttpOperation": "POST",
107 # "JsonBody": "{\n \"DiagnosticDataType\": \"Manager\"\n}",
ganesanb4d430282023-04-27 14:33:23 +0000108 # "TargetUri": "/redfish/v1/Managers/${MANAGER_ID}/LogServices/Dump/Actions
aravinth0510350edc82022-09-30 06:33:48 +0000109 # /LogService.CollectDiagnosticData"
110 # },
111 # "PercentComplete": 0,
112 # "StartTime": "2022-08-09T12:57:06+00:00",
113 # "TaskMonitor": "/redfish/v1/TaskService/Tasks/3/Monitor",
114 # "TaskState": "Running",
115 # "TaskStatus": "OK"
116 # }
117
118 # Trigger a Redfish event that generates task instance.
119 ${task_id} ${resp_obj}= Generate Task Instance
120
121 # Verify task monitor before task completion.
122 ${resp}= Redfish.Get /redfish/v1/TaskService/Tasks/${task_id}/Monitor
123 ... valid_status_codes=[${HTTP_ACCEPTED}]
124
125 # Get current time from BMC console before generating task.
126 ${cur_time}= Get Current Date from BMC
127
128 # Verify task start time is within 10s of current time.
129 ${resp}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
130
131 ${start_time}= Get Regexp Matches ${resp["StartTime"]}
132 ... ${TIME_REGEXP_PATTERN} 1
133
134 # Compare system time and time displayed in task service URI.
135 ${time_diff}= Subtract Date From Date ${cur_time} ${start_time[0]}
136 ... date1_format=%m/%d/%Y %H:%M:%S date2_format=%Y-%m-%dT%H:%M:%S
137
George Keishing206f6ed2023-01-30 08:05:45 -0600138
aravinth0510350edc82022-09-30 06:33:48 +0000139 ${time_diff}= Evaluate ${time_diff} < 10
140 Should Be Equal ${time_diff} ${TRUE} Time difference greater than 10 seconds.
141
142 # Verify HttpOperation in task payload.
143 Should Be Equal ${resp["Payload"]["HttpOperation"]} POST
144
145 # Verify TargetUri.
146 Should Be Equal ${resp["Payload"]["TargetUri"]}
147 ... ${resp_obj.request.path}
148
149 Wait For Task Completion ${task_id} ${allowed_task_completion_state}
150 ... check_state=${TRUE}
151
152 # Verify task monitor URI after task completion.
153 ${resp}= Redfish.Get /redfish/v1/TaskService/Tasks/${task_id}/Monitor
154 ... valid_status_codes=[${HTTP_NOT_FOUND}]
155
156 # Verify end time is greater than start time post task completion.
157 ${resp}= Redfish.Get Properties /redfish/v1/TaskService/Tasks/${task_id}
158
159 ${end_time}= Get Regexp Matches ${resp["EndTime"]}
160 ... ${TIME_REGEXP_PATTERN} 1
161
162 # Compare start time and end time displayed in task service URI.
163 ${time_diff}= Subtract Date From Date ${end_time[0]} ${start_time[0]}
164
165 ${time_diff}= Evaluate ${time_diff} >= 0
166
167 Should Be Equal ${time_diff} ${TRUE}
168 ... End time not greater than start time.
169
170
171Verify Task Persistency Post BMC Reboot
172 [Documentation] Verify task collection persistency post BMC reboot.
173 [Tags] Verify_Task_Persistency_Post_BMC_Reboot
174
175 Verify Generate Task Instance Completion
176
177 ${initial_task_count}= Redfish.Get Attribute /redfish/v1/TaskService/Tasks
178 ... Members@odata.count
179
180 Redfish BMC Reset Operation reset_type=ForceRestart
181
182 ${current_task_count}= Redfish.Get Attribute /redfish/v1/TaskService/Tasks
183 ... Members@odata.count
184
185 Should Be Equal As Integers ${initial_task_count} ${current_task_count}
186
187
188*** Keywords ***
189
190Suite Setup Execution
191 [Documentation] Do suite setup operation.
192
193 Redfish.login
194 Load Task Service Properties Data
195
196
197Suite Teardown Execution
198 [Documentation] Do suite teardown operation.
199
200 Run Keyword And Ignore Error Redfish.Logout
201 Close All Connections
202
203
204Generate Task Instance
205 [Documentation] Trigger Redfish event to generate task instance
206 ... and return the task id.
207 [Arguments] ${task_type}=bmc_dump
208
209 # Description of argument(s):
210 # task_type Default value for task_type is bmc_dump. When 'task_type'
211 # is 'bmc_dump', then keyword will initiate bmc user dump
212 # creation and will return the task id and response object.
213
214 IF '${task_type}' == 'bmc_dump'
215 ${task_id} ${resp}= Create BMC User Dump
216 ELSE
217 Fail Task type "${task_type}" is unknown.
218 END
219
220 Return From Keyword ${task_id} ${resp}
221
222
223Verify Generate Task Instance Completion
224 [Documentation] Trigger Redfish event to generate task and wait until
225 ... task gets completed.
226 [Arguments] ${task_type}=bmc_dump
227
228 # Description of argument(s):
229 # task_type If 'task_type' set as 'bmc_dump', the keyword will
230 # initiate bmc user dump creation and wait until
231 # task is completed. Default value of task_type
232 # is bmc_dump.
233
234 ${task_id} ${resp}= Generate Task Instance ${task_type}
235 Wait For Task Completion ${task_id} ${allowed_task_completion_state}
236
237
238Load Task Service Properties Data
239 [Documentation] Load the task service related properties from json file.
240
George Keishingdd804162023-01-30 05:21:27 -0600241 # User input -v TASK_JSON_FILE_PATH:<path> else default path.
Nagarjun Be4f518d2023-07-24 20:40:32 +0530242 # ${task_json_file}= Get Variable Value ${TASK_JSON_FILE_PATH} data/task_state.json
George Keishingdd804162023-01-30 05:21:27 -0600243
Nagarjun Be4f518d2023-07-24 20:40:32 +0530244 ${json}= OperatingSystem.Get File ${TASK_JSON_FILE_PATH}
aravinth0510350edc82022-09-30 06:33:48 +0000245 ${properties}= Evaluate json.loads('''${json}''') json
246
247 Set Suite Variable ${allowed_completed_task_overwrite_policy}
248 ... ${properties["TaskService"]["CompletedTaskOverWritePolicy"]["AllowedValues"]}
249
250 Set Suite Variable ${allowed_task_state}
251 ... ${properties["Task"]["TaskState"]["AllowedValues"]}
252
253 Set Suite Variable ${allowed_task_completion_state}
254 ... ${properties["Task"]["TaskState"]["AllowedCompletionTaskState"]}
255
256 Set Suite Variable ${valid_status}
George Keishingdd804162023-01-30 05:21:27 -0600257 ... ${properties["TaskService"]["Status"]}
George Keishing206f6ed2023-01-30 08:05:45 -0600258
259
260Get Current Date from BMC
261 [Documentation] Runs the date command from BMC and returns current date and time.
262
263 # Get Current Date from BMC
264 ${date} ${stderr} ${rc}= BMC Execute Command date
265
266 # Split the string and remove first and 2nd last value from
267 # the list and join to form %d %b %H:%M:%S %Y date format.
268
269 ${date}= Split String ${date}
270
271 Remove From List ${date} 0
272 Remove From List ${date} -2
273 ${date}= Evaluate " ".join(${date})
274
275 # Convert the date format to %m/%d/%Y %H:%M:%S
276 ${date}= Convert Date ${date} date_format=%b %d %H:%M:%S %Y result_format=%m/%d/%Y %H:%M:%S exclude_millis=True
277
278 [Return] ${date}