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