Skip to content

Commit 0805345

Browse files
committed
Added workhorse tests (incomplete).
1 parent 25af381 commit 0805345

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
from __future__ import absolute_import
2+
3+
import errno
4+
import socket
5+
import time
6+
import os
7+
8+
from itertools import cycle
9+
10+
from celery.five import items, range
11+
from celery.utils.functional import noop
12+
from celery.tests.case import AppCase, Mock, SkipTest, call, patch
13+
from celery.concurrency.workhorse import TaskPool
14+
15+
from kombu.async.semaphore import LaxBoundedSemaphore
16+
17+
class test_Workhorse(AppCase):
18+
19+
def setup(self):
20+
if not hasattr(os, 'fork'):
21+
raise SkipTest('missing os.fork')
22+
23+
def test_run_stop_pool(self):
24+
pool = TaskPool(semaphore=LaxBoundedSemaphore(10))
25+
pool.start()
26+
pids = []
27+
accept_callback = lambda pid, ts: pids.append(pid)
28+
success_callback = Mock()
29+
error_callback = Mock()
30+
pool.apply_async(
31+
lambda x: x,
32+
(2, ),
33+
{},
34+
accept_callback=accept_callback,
35+
correlation_id='asdf-1234',
36+
error_callback=error_callback,
37+
callback=success_callback,
38+
)
39+
self.assertTrue(pool.workers)
40+
self.assertEqual(pids, list(pool.workers))
41+
pool.stop()
42+
success_callback.assert_called_with(None)
43+
self.assertFalse(error_callback.called)
44+
45+
def test_terminate_pool(self):
46+
pool = TaskPool(semaphore=LaxBoundedSemaphore(10))
47+
pool.start()
48+
pids = []
49+
accept_callback = lambda pid, ts: pids.append(pid)
50+
success_callback = Mock()
51+
error_callback = Mock()
52+
pool.apply_async(
53+
lambda x: time.sleep(x),
54+
(2, ),
55+
{},
56+
accept_callback=accept_callback,
57+
correlation_id='asdf-1234',
58+
error_callback=error_callback,
59+
callback=success_callback,
60+
)
61+
self.assertTrue(pool.workers)
62+
self.assertEqual(pids, list(pool.workers))
63+
pool.terminate()
64+
self.assertFalse(success_callback.called)
65+
self.assertTrue(error_callback.called)
66+
67+
68+
def test_grow_pool(self):
69+
semaphore = LaxBoundedSemaphore(1)
70+
pool = TaskPool(semaphore=semaphore)
71+
pool.start()
72+
pids = []
73+
accept_callback = lambda pid, ts: pids.append(pid)
74+
success_callback = Mock()
75+
error_callback = Mock()
76+
for i in range(3):
77+
pool.apply_async(
78+
lambda x: time.sleep(x),
79+
(2, ),
80+
{},
81+
accept_callback=accept_callback,
82+
correlation_id='asdf-1234-%s' % i,
83+
error_callback=error_callback,
84+
callback=success_callback,
85+
)
86+
self.assertTrue(pool.workers)
87+
self.assertEqual(pids, list(pool.workers))
88+
89+
#self.assertEqual(semaphore.value, 0)
90+
pool.terminate()
91+
# TODO TODO TODO TODO TODO TODO
92+
#pool.grow()
93+
#self.assertFalse(success_callback.called)
94+
#self.assertTrue(error_callback.called)
95+
96+
#def test_restart
97+
#
98+
#def test_timeout
99+
#
100+
#def test_

0 commit comments

Comments
 (0)