@@ -46,19 +46,16 @@ def rpc_name(cls):
4646 @classmethod
4747 async def setUpClass (cls ):
4848 # The name of the task queue application
49- name = cls .name ()
50- queues = ['%s1' % name , '%s2' % name ]
51- pq = api .PulsarQueue (cls .name (),
52- wsgi = True ,
53- config = 'tests.config' ,
54- queue_callable = dummy ,
55- task_queues = queues ,
56- default_task_queue = queues [0 ],
57- schedule_periodic = cls .schedule_periodic ,
58- rpc_bind = '127.0.0.1:0' ,
59- concurrency = cls .concurrency ,
60- rpc_concurrency = cls .concurrency ,
61- rpc_keep_alive = cls .rpc_timeout )
49+ params = cls .params ()
50+ params .update (dict (
51+ wsgi = True ,
52+ schedule_periodic = cls .schedule_periodic ,
53+ rpc_bind = '127.0.0.1:0' ,
54+ concurrency = cls .concurrency ,
55+ rpc_concurrency = cls .concurrency ,
56+ rpc_keep_alive = cls .rpc_timeout
57+ ))
58+ pq = api .PulsarQueue (** params )
6259 cfgs = await pq .start ()
6360 cls .tq = cfgs [0 ].app ()
6461 cls .rpc = cfgs [1 ].app ()
@@ -67,14 +64,30 @@ async def setUpClass(cls):
6764 timeout = cls .rpc_timeout )
6865 # Now flush the task queue
6966 backend = await cls .tq .backend .start ()
70- await backend .flush_queues (* queues )
67+ await backend .flush_queues (* cls . queues () )
7168
7269 @classmethod
7370 def tearDownClass (cls ):
7471 coros = [send ('arbiter' , 'kill_actor' , a .name ) for a in
7572 (cls .tq , cls .rpc ) if a is not None ]
7673 return asyncio .gather (* coros )
7774
75+ @classmethod
76+ def queues (cls ):
77+ name = cls .name ()
78+ return ['%s1' % name , '%s2' % name ]
79+
80+ @classmethod
81+ def params (cls ):
82+ queues = cls .queues ()
83+ return dict (
84+ name = cls .name (),
85+ config = 'tests.config' ,
86+ queue_callable = dummy ,
87+ task_queues = queues ,
88+ default_task_queue = queues [0 ]
89+ )
90+
7891
7992class TestTaskQueue (TaskQueueBase , unittest .TestCase ):
8093
@@ -261,6 +274,35 @@ async def test_scrape(self):
261274 self .assertEqual (task .status_string , 'SUCCESS' )
262275 self .assertTrue (task .result )
263276
277+ async def test_delay (self ):
278+ task = await self .tq .backend .queue_task ('scrape' ,
279+ delay = 2 ,
280+ url = 'https://www.bbc.co.uk/' )
281+
282+ self .assertEqual (task .status_string , 'SUCCESS' )
283+ self .assertEqual (task .delay , 2 )
284+ self .assertTrue (task .time_started - task .time_queued > 2 )
285+ self .assertTrue (task .result )
286+
287+ def test_sync (self ):
288+ loop = asyncio .new_event_loop ()
289+ tasks = api .TaskApp (loop = loop , ** self .params ()).backend
290+ self .assertEqual (tasks ._loop , loop )
291+ task = tasks .queue_task ('scrape' , url = 'https://github.com' )
292+ self .assertIsInstance (task , asyncio .Future )
293+ self .assertTrue (task .task_id )
294+ task = task .wait ()
295+ self .assertEqual (task .status_string , 'SUCCESS' )
296+ self .assertFalse (tasks ._loop .is_running ())
297+ #
298+ task = tasks .queue_task ('scrape' , url = 'https://github.com' ,
299+ callback = False )
300+ task = task .wait ()
301+ self .assertEqual (task .status_string , 'QUEUED' )
302+ self .assertTrue (task .done_callback )
303+ task = task .done_callback .wait ()
304+ self .assertEqual (task .status_string , 'SUCCESS' )
305+
264306 # RPC
265307 async def test_rpc_job_list (self ):
266308 data = await self .proxy .job_list ()
0 commit comments