From 7ed3248b5be3cb2305d7d2212ac9f541864e847e Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Thu, 17 Jun 2010 14:02:32 +0100 Subject: [PATCH] count the number of tasks done in the wp unittest Currently there's no way to know if something actually gets done. After this check we actually test that the threads do their job. Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- test/ganeti.workerpool_unittest.py | 57 +++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/test/ganeti.workerpool_unittest.py b/test/ganeti.workerpool_unittest.py index f5aee8e93..ca8fc1ae1 100755 --- a/test/ganeti.workerpool_unittest.py +++ b/test/ganeti.workerpool_unittest.py @@ -31,10 +31,35 @@ from ganeti import workerpool import testutils +class CountingContext(object): + + def __init__(self): + self._lock = threading.Condition(threading.Lock()) + self.done = 0 + + def DoneTask(self): + self._lock.acquire() + try: + self.done += 1 + finally: + self._lock.release() + + def GetDoneTasks(self): + self._lock.acquire() + try: + return self.done + finally: + self._lock.release() + + @staticmethod + def UpdateChecksum(current, value): + return zlib.adler32(str(value), current) -class DummyBaseWorker(workerpool.BaseWorker): - def RunTask(self, text): - pass + +class CountingBaseWorker(workerpool.BaseWorker): + + def RunTask(self, ctx, text): + ctx.DoneTask() class ChecksumContext: @@ -61,21 +86,24 @@ class ChecksumBaseWorker(workerpool.BaseWorker): class TestWorkerpool(unittest.TestCase): """Workerpool tests""" - def testDummy(self): - wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker) + def testCounting(self): + ctx = CountingContext() + wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) try: self._CheckWorkerCount(wp, 3) for i in range(10): - wp.AddTask("Hello world %s" % i) + wp.AddTask(ctx, "Hello world %s" % i) wp.Quiesce() finally: wp.TerminateWorkers() self._CheckWorkerCount(wp, 0) + self.assertEquals(ctx.GetDoneTasks(), 10) + def testNoTasks(self): - wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker) + wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) try: self._CheckWorkerCount(wp, 3) self._CheckNoTasks(wp) @@ -84,7 +112,7 @@ class TestWorkerpool(unittest.TestCase): self._CheckWorkerCount(wp, 0) def testNoTasksQuiesce(self): - wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker) + wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) try: self._CheckWorkerCount(wp, 3) self._CheckNoTasks(wp) @@ -122,14 +150,15 @@ class TestWorkerpool(unittest.TestCase): self._CheckWorkerCount(wp, 0) def testAddManyTasks(self): - wp = workerpool.WorkerPool("Test", 3, DummyBaseWorker) + ctx = CountingContext() + wp = workerpool.WorkerPool("Test", 3, CountingBaseWorker) try: self._CheckWorkerCount(wp, 3) - wp.AddManyTasks(["Hello world %s" % i for i in range(10)]) - wp.AddTask("A separate hello") - wp.AddTask("Once more, hi!") - wp.AddManyTasks([("Hello world %s" % i, ) for i in range(10)]) + wp.AddManyTasks([(ctx, "Hello world %s" % i, ) for i in range(10)]) + wp.AddTask(ctx, "A separate hello") + wp.AddTask(ctx, "Once more, hi!") + wp.AddManyTasks([(ctx, "Hello world %s" % i, ) for i in range(10)]) wp.Quiesce() @@ -138,6 +167,8 @@ class TestWorkerpool(unittest.TestCase): wp.TerminateWorkers() self._CheckWorkerCount(wp, 0) + self.assertEquals(ctx.GetDoneTasks(), 22) + def _CheckNoTasks(self, wp): wp._lock.acquire() try: -- GitLab