def test_40_confirm_easy(self): """Confirm a lock that's already held""" t = self.get_transport() lf1 = LockDir(t, 'test_lock') lf1.create() lf1.attempt_lock() lf1.confirm()
def test_auto_break_stale_lock_configured_off(self): """Automatic breaking can be turned off""" l1 = LockDir(self.get_transport(), 'a', extra_holder_info={'pid': '12312313'}) token_1 = l1.attempt_lock() self.addCleanup(l1.unlock) l2 = LockDir(self.get_transport(), 'a') # This fails now, because dead lock breaking is off by default. self.assertRaises(LockContention, l2.attempt_lock) # and it's in fact not broken l1.confirm()
def test_44_break_already_released(self): """Lock break races with regular release""" t = self.get_transport() lf1 = LockDir(t, 'test_lock') lf1.create() lf1.attempt_lock() # someone else sees it's still locked lf2 = LockDir(t, 'test_lock') holder_info = lf2.peek() # in the interim the lock is released lf1.unlock() # break should succeed lf2.force_break(holder_info) # now we should be able to take it lf2.attempt_lock() lf2.confirm()
def test_43_break(self): """Break a lock whose caller has forgotten it""" t = self.get_transport() lf1 = LockDir(t, 'test_lock') lf1.create() lf1.attempt_lock() # we incorrectly discard the lock object without unlocking it del lf1 # someone else sees it's still locked lf2 = LockDir(t, 'test_lock') holder_info = lf2.peek() self.assertTrue(holder_info) lf2.force_break(holder_info) # now we should be able to take it lf2.attempt_lock() lf2.confirm()