645
646
self.assertRaises(errors.LockContention, ld2.attempt_lock)
647
648
check_dir(['held'])
650
def record_hook(self, result):
651
self._calls.append(result)
653
def reset_hooks(self):
654
self._old_hooks = lock.hooks
655
self.addCleanup(self.restore_hooks)
656
lock.hooks = lock.PhysicalLockHooks()
658
def restore_hooks(self):
659
lock.hooks = self._old_hooks
661
def test_PhysicalLock_dot_acquired_success(self):
662
# the PhysicalLock.acquired hook fires when a lock is acquired.
665
lock.hooks.install_hook('acquired', self.record_hook)
668
self.assertEqual([], self._calls)
669
result = ld.attempt_lock()
670
self.assertEqual([lock.LockResult(ld, result)], self._calls)
672
self.assertEqual([lock.LockResult(ld, result)], self._calls)
674
def test_PhysicalLock_dot_acquired_fail(self):
675
# the PhysicalLock.acquired hook does not fire on failure.
680
ld2 = self.get_lock()
682
# install a lock hook now, when the disk lock is locked
683
lock.hooks.install_hook('acquired', self.record_hook)
684
self.assertRaises(errors.LockContention, ld.attempt_lock)
685
self.assertEqual([], self._calls)
687
self.assertEqual([], self._calls)
689
def test_PhysicalLock_dot_released_success(self):
690
# the PhysicalLock.released hook fires when a lock is acquired.
693
lock.hooks.install_hook('released', self.record_hook)
696
self.assertEqual([], self._calls)
697
result = ld.attempt_lock()
698
self.assertEqual([], self._calls)
700
self.assertEqual([lock.LockResult(ld, result)], self._calls)
702
def test_PhysicalLock_dot_released_fail(self):
703
# the PhysicalLock.released hook does not fire on failure.
708
ld2 = self.get_lock()
710
ld2.force_break(ld2.peek())
711
lock.hooks.install_hook('released', self.record_hook)
712
self.assertRaises(LockBroken, ld.unlock)
713
self.assertEqual([], self._calls)