14
14
15
15
"""Test cases for the firebase_admin.functions module."""
16
16
17
- from datetime import datetime , timedelta
17
+ from datetime import datetime , timedelta , timezone
18
18
import json
19
19
import time
20
20
import pytest
33
33
_CLOUD_TASKS_URL + 'projects/test-project/locations/us-central1/queues/test-function-name/tasks'
34
34
_DEFAULT_TASK_URL = _CLOUD_TASKS_URL + _DEFAULT_TASK_PATH
35
35
_DEFAULT_RESPONSE = json .dumps ({'name' : _DEFAULT_TASK_PATH })
36
- _ENQUEUE_TIME = datetime .utcnow ()
37
- _SCHEDULE_TIME = _ENQUEUE_TIME + timedelta (seconds = 100 )
38
36
39
37
class TestTaskQueue :
40
38
@classmethod
@@ -185,47 +183,65 @@ def _instrument_functions_service(self, app=None, status=200, payload=_DEFAULT_R
185
183
testutils .MockAdapter (payload , status , recorder ))
186
184
return functions_service , recorder
187
185
188
-
189
- @pytest .mark .parametrize ('task_opts_params' , [
190
- {
186
+ def test_task_options_delay_seconds (self ):
187
+ _ , recorder = self ._instrument_functions_service ()
188
+ enqueue_time = datetime .now (timezone .utc )
189
+ expected_schedule_time = enqueue_time + timedelta (seconds = 100 )
190
+ task_opts_params = {
191
191
'schedule_delay_seconds' : 100 ,
192
192
'schedule_time' : None ,
193
193
'dispatch_deadline_seconds' : 200 ,
194
194
'task_id' : 'test-task-id' ,
195
195
'headers' : {'x-test-header' : 'test-header-value' },
196
196
'uri' : 'https://google.com'
197
- },
198
- {
197
+ }
198
+ queue = functions .task_queue ('test-function-name' )
199
+ task_opts = functions .TaskOptions (** task_opts_params )
200
+ queue .enqueue (_DEFAULT_DATA , task_opts )
201
+
202
+ assert len (recorder ) == 1
203
+ task = json .loads (recorder [0 ].body .decode ())['task' ]
204
+
205
+ task_schedule_time = datetime .fromisoformat (task ['schedule_time' ].replace ('Z' , '+00:00' ))
206
+ delta = abs (task_schedule_time - expected_schedule_time )
207
+ assert delta <= timedelta (seconds = 1 )
208
+
209
+ assert task ['dispatch_deadline' ] == '200s'
210
+ assert task ['http_request' ]['headers' ]['x-test-header' ] == 'test-header-value'
211
+ assert task ['http_request' ]['url' ] in ['http://google.com' , 'https://google.com' ]
212
+ assert task ['name' ] == _DEFAULT_TASK_PATH
213
+
214
+ def test_task_options_utc_time (self ):
215
+ _ , recorder = self ._instrument_functions_service ()
216
+ enqueue_time = datetime .now (timezone .utc )
217
+ expected_schedule_time = enqueue_time + timedelta (seconds = 100 )
218
+ task_opts_params = {
199
219
'schedule_delay_seconds' : None ,
200
- 'schedule_time' : _SCHEDULE_TIME ,
220
+ 'schedule_time' : expected_schedule_time ,
201
221
'dispatch_deadline_seconds' : 200 ,
202
222
'task_id' : 'test-task-id' ,
203
223
'headers' : {'x-test-header' : 'test-header-value' },
204
224
'uri' : 'http://google.com'
205
- },
206
- ])
207
- def test_task_options (self , task_opts_params ):
208
- _ , recorder = self ._instrument_functions_service ()
225
+ }
209
226
queue = functions .task_queue ('test-function-name' )
210
227
task_opts = functions .TaskOptions (** task_opts_params )
211
228
queue .enqueue (_DEFAULT_DATA , task_opts )
212
229
213
230
assert len (recorder ) == 1
214
231
task = json .loads (recorder [0 ].body .decode ())['task' ]
215
232
216
- schedule_time = datetime .fromisoformat (task ['schedule_time' ][:- 1 ])
217
- delta = abs (schedule_time - _SCHEDULE_TIME )
218
- assert delta <= timedelta (seconds = 15 )
233
+ task_schedule_time = datetime .fromisoformat (task ['schedule_time' ].replace ('Z' , '+00:00' ))
234
+ assert task_schedule_time == expected_schedule_time
219
235
220
236
assert task ['dispatch_deadline' ] == '200s'
221
237
assert task ['http_request' ]['headers' ]['x-test-header' ] == 'test-header-value'
222
238
assert task ['http_request' ]['url' ] in ['http://google.com' , 'https://google.com' ]
223
239
assert task ['name' ] == _DEFAULT_TASK_PATH
224
240
225
-
226
241
def test_schedule_set_twice_error (self ):
227
242
_ , recorder = self ._instrument_functions_service ()
228
- opts = functions .TaskOptions (schedule_delay_seconds = 100 , schedule_time = datetime .utcnow ())
243
+ opts = functions .TaskOptions (
244
+ schedule_delay_seconds = 100 , schedule_time = datetime .now (timezone .utc ))
229
245
queue = functions .task_queue ('test-function-name' )
230
246
with pytest .raises (ValueError ) as excinfo :
231
247
queue .enqueue (_DEFAULT_DATA , opts )
@@ -236,9 +252,9 @@ def test_schedule_set_twice_error(self):
236
252
237
253
@pytest .mark .parametrize ('schedule_time' , [
238
254
time .time (),
239
- str (datetime .utcnow ( )),
240
- datetime .utcnow ( ).isoformat (),
241
- datetime .utcnow ( ).isoformat () + 'Z' ,
255
+ str (datetime .now ( timezone . utc )),
256
+ datetime .now ( timezone . utc ).isoformat (),
257
+ datetime .now ( timezone . utc ).isoformat () + 'Z' ,
242
258
'' , ' '
243
259
])
244
260
def test_invalid_schedule_time_error (self , schedule_time ):
0 commit comments