Revision bba69414 test/ganeti.workerpool_unittest.py

b/test/ganeti.workerpool_unittest.py
31 31
from ganeti import workerpool
32 32
from ganeti import errors
33 33
from ganeti import utils
34
from ganeti import compat
34 35

  
35 36
import testutils
36 37

  
......
114 115
    self.lock = threading.Lock()
115 116
    self.prioresult = {}
116 117
    self.samepriodefer = {}
118
    self.num2ordertaskid = {}
117 119

  
118 120

  
119 121
class DeferringWorker(workerpool.BaseWorker):
120 122
  def RunTask(self, ctx, num, targetprio):
121 123
    ctx.lock.acquire()
122 124
    try:
125
      otilst = ctx.num2ordertaskid.setdefault(num, [])
126
      otilst.append(self._GetCurrentOrderAndTaskId())
127

  
123 128
      if num in ctx.samepriodefer:
124 129
        del ctx.samepriodefer[num]
125 130
        raise workerpool.DeferTask()
......
466 471
      rnd = random.Random(14921)
467 472

  
468 473
      data = {}
474
      num2taskid = {}
469 475
      for i in range(1, 333):
470 476
        ctx.lock.acquire()
471 477
        try:
......
475 481
          ctx.lock.release()
476 482

  
477 483
        prio = int(rnd.random() * 30)
478
        wp.AddTask((ctx, i, prio), priority=50)
484
        num2taskid[i] = 1000 * i
485
        wp.AddTask((ctx, i, prio), priority=50,
486
                   task_id=num2taskid[i])
479 487
        data.setdefault(prio, set()).add(i)
480 488

  
481 489
        # Cause some distortion
......
492 500
      ctx.lock.acquire()
493 501
      try:
494 502
        self.assertEqual(data, ctx.prioresult)
503

  
504
        all_order_ids = []
505

  
506
        for (num, numordertaskid) in ctx.num2ordertaskid.items():
507
          order_ids = map(compat.fst, numordertaskid)
508
          self.assertFalse(utils.FindDuplicates(order_ids),
509
                           msg="Order ID has been reused")
510
          all_order_ids.extend(order_ids)
511

  
512
          for task_id in map(compat.snd, numordertaskid):
513
            self.assertEqual(task_id, num2taskid[num],
514
                             msg=("Task %s used different task IDs" % num))
515

  
516
        self.assertFalse(utils.FindDuplicates(all_order_ids),
517
                         msg="Order ID has been reused")
495 518
      finally:
496 519
        ctx.lock.release()
497 520

  

Also available in: Unified diff