Revision 2042aa94

b/test/ganeti.locking_unittest.py
494 494
      # Start thread to hold lock for 20 ms
495 495
      self._addThread(target=_LockExclusive, args=(20.0 / 1000.0, ))
496 496

  
497
      # Wait for sleep to begin
498
      self.assertEqual(self.done.get(), "A: start sleep")
499

  
497 500
      # Wait up to 100 ms to get lock
498 501
      self.failUnless(self.sl.acquire(shared=shared, timeout=0.1))
499 502
      self.done.put("got 2nd")
......
501 504

  
502 505
      self._waitThreads()
503 506

  
504
      self.assertEqual(self.done.get_nowait(), "A: start sleep")
505 507
      self.assertEqual(self.done.get_nowait(), "A: end sleep")
506 508
      self.assertEqual(self.done.get_nowait(), "got 2nd")
507 509
      self.assertRaises(Queue.Empty, self.done.get_nowait)
......
565 567
      self._addThread(target=_Acquire, args=(0, "exclusive D"))
566 568

  
567 569
    # Expect 6 pending exclusive acquires and 1 for all shared acquires
568
    # together
569
    self.assertEqual(self.sl._count_pending(), 7)
570
    # together. There's no way to wait for SharedLock.acquire to start
571
    # its work. Hence the timeout of 2 seconds.
572
    pending = 0
573
    end_time = time.time() + 2.0
574
    while time.time() < end_time:
575
      pending = self.sl._count_pending()
576
      self.assert_(pending >= 0 and pending <= 7)
577
      if pending == 7:
578
        break
579
      time.sleep(0.05)
580
    self.assertEqual(pending, 7)
570 581

  
571 582
    # Release exclusive lock and wait
572 583
    self.sl.release()
......
574 585
    self._waitThreads()
575 586

  
576 587
    # Check sequence
588
    shr_a = 0
589
    shr_c = 0
577 590
    for _ in xrange(10):
578 591
      # Shared locks aren't guaranteed to be notified in order, but they'll be
579 592
      # first
580
      self.assert_(self.done.get_nowait() in ("shared A", "shared C"))
593
      tmp = self.done.get_nowait()
594
      if tmp == "shared A":
595
        shr_a += 1
596
      elif tmp == "shared C":
597
        shr_c += 1
598
    self.assertEqual(shr_a, 5)
599
    self.assertEqual(shr_c, 5)
581 600

  
582 601
    for _ in xrange(3):
583 602
      self.assertEqual(self.done.get_nowait(), "exclusive B")

Also available in: Unified diff