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