Revision 7ed3248b test/ganeti.workerpool_unittest.py
b/test/ganeti.workerpool_unittest.py | ||
---|---|---|
31 | 31 |
|
32 | 32 |
import testutils |
33 | 33 |
|
34 |
class CountingContext(object): |
|
35 |
|
|
36 |
def __init__(self): |
|
37 |
self._lock = threading.Condition(threading.Lock()) |
|
38 |
self.done = 0 |
|
39 |
|
|
40 |
def DoneTask(self): |
|
41 |
self._lock.acquire() |
|
42 |
try: |
|
43 |
self.done += 1 |
|
44 |
finally: |
|
45 |
self._lock.release() |
|
46 |
|
|
47 |
def GetDoneTasks(self): |
|
48 |
self._lock.acquire() |
|
49 |
try: |
|
50 |
return self.done |
|
51 |
finally: |
|
52 |
self._lock.release() |
|
53 |
|
|
54 |
@staticmethod |
|
55 |
def UpdateChecksum(current, value): |
|
56 |
return zlib.adler32(str(value), current) |
|
34 | 57 |
|
35 |
class DummyBaseWorker(workerpool.BaseWorker): |
|
36 |
def RunTask(self, text): |
|
37 |
pass |
|
58 |
|
|
59 |
class CountingBaseWorker(workerpool.BaseWorker): |
|
60 |
|
|
61 |
def RunTask(self, ctx, text): |
|
62 |
ctx.DoneTask() |
|
38 | 63 |
|
39 | 64 |
|
40 | 65 |
class ChecksumContext: |
... | ... | |
61 | 86 |
class TestWorkerpool(unittest.TestCase): |
62 | 87 |
"""Workerpool tests""" |
63 | 88 |
|
64 |
def testDummy(self): |
|
65 |
wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker) |
|
89 |
def testCounting(self): |
|
90 |
ctx = CountingContext() |
|
91 |
wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) |
|
66 | 92 |
try: |
67 | 93 |
self._CheckWorkerCount(wp, 3) |
68 | 94 |
|
69 | 95 |
for i in range(10): |
70 |
wp.AddTask("Hello world %s" % i) |
|
96 |
wp.AddTask(ctx, "Hello world %s" % i)
|
|
71 | 97 |
|
72 | 98 |
wp.Quiesce() |
73 | 99 |
finally: |
74 | 100 |
wp.TerminateWorkers() |
75 | 101 |
self._CheckWorkerCount(wp, 0) |
76 | 102 |
|
103 |
self.assertEquals(ctx.GetDoneTasks(), 10) |
|
104 |
|
|
77 | 105 |
def testNoTasks(self): |
78 |
wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker)
|
|
106 |
wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker)
|
|
79 | 107 |
try: |
80 | 108 |
self._CheckWorkerCount(wp, 3) |
81 | 109 |
self._CheckNoTasks(wp) |
... | ... | |
84 | 112 |
self._CheckWorkerCount(wp, 0) |
85 | 113 |
|
86 | 114 |
def testNoTasksQuiesce(self): |
87 |
wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker)
|
|
115 |
wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker)
|
|
88 | 116 |
try: |
89 | 117 |
self._CheckWorkerCount(wp, 3) |
90 | 118 |
self._CheckNoTasks(wp) |
... | ... | |
122 | 150 |
self._CheckWorkerCount(wp, 0) |
123 | 151 |
|
124 | 152 |
def testAddManyTasks(self): |
125 |
wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker) |
|
153 |
ctx = CountingContext() |
|
154 |
wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) |
|
126 | 155 |
try: |
127 | 156 |
self._CheckWorkerCount(wp, 3) |
128 | 157 |
|
129 |
wp.AddManyTasks(["Hello world %s" % i for i in range(10)])
|
|
130 |
wp.AddTask("A separate hello") |
|
131 |
wp.AddTask("Once more, hi!") |
|
132 |
wp.AddManyTasks([("Hello world %s" % i, ) for i in range(10)]) |
|
158 |
wp.AddManyTasks([(ctx, "Hello world %s" % i, ) for i in range(10)])
|
|
159 |
wp.AddTask(ctx, "A separate hello")
|
|
160 |
wp.AddTask(ctx, "Once more, hi!")
|
|
161 |
wp.AddManyTasks([(ctx, "Hello world %s" % i, ) for i in range(10)])
|
|
133 | 162 |
|
134 | 163 |
wp.Quiesce() |
135 | 164 |
|
... | ... | |
138 | 167 |
wp.TerminateWorkers() |
139 | 168 |
self._CheckWorkerCount(wp, 0) |
140 | 169 |
|
170 |
self.assertEquals(ctx.GetDoneTasks(), 22) |
|
171 |
|
|
141 | 172 |
def _CheckNoTasks(self, wp): |
142 | 173 |
wp._lock.acquire() |
143 | 174 |
try: |
Also available in: Unified diff