def test_acquire_and_release(self): log = [] expected = [('acquire', 'ns', 'name', 'mode'), ('release', 'ns', 'name', 'mode')] lock = FakeGuardedLock('ns', 'name', 'mode', log) lock.acquire() self.assertEqual(expected[:1], log) lock.release() self.assertEqual(expected, log)
def test_deadlock(self): log = [] locks = [ FakeGuardedLock('00_storage', 'dom', 'shared', log), # Attemting to lock next locks will deadlock in resourceManager. FakeGuardedLock('02_img.dom', 'img', 'exclusive', log), FakeGuardedLock('02_img.dom', 'img', 'shared', log), FakeGuardedLock('03_vol.dom', 'vol', 'exclusive', log), ] # Creating a context should raise with self.assertRaises(guarded.Deadlock): with guarded.context(locks): pass # Without locking any of the locks self.assertEqual([], log)
def test_one_vol(self): log = [] locks = [ FakeGuardedLock('01_dom', 'dom', 'mode', log), FakeGuardedLock('02_img', 'img', 'mode', log), FakeGuardedLock('03_vol', 'vol', 'mode', log) ] expected = [('acquire', '01_dom', 'dom', 'mode'), ('acquire', '02_img', 'img', 'mode'), ('acquire', '03_vol', 'vol', 'mode'), ('release', '03_vol', 'vol', 'mode'), ('release', '02_img', 'img', 'mode'), ('release', '01_dom', 'dom', 'mode')] with guarded.context(locks): self.assertEqual(expected[:3], log) self.assertEqual(expected, log)
def test_fail_inside_context(self): log = [] locks = [ FakeGuardedLock('01_dom', 'dom1', 'mode', log), FakeGuardedLock('02_img', 'img1', 'mode', log), FakeGuardedLock('03_vol', 'vol1', 'mode', log) ] expected = [('acquire', '01_dom', 'dom1', 'mode'), ('acquire', '02_img', 'img1', 'mode'), ('acquire', '03_vol', 'vol1', 'mode'), ('release', '03_vol', 'vol1', 'mode'), ('release', '02_img', 'img1', 'mode'), ('release', '01_dom', 'dom1', 'mode')] with self.assertRaises(InjectedFailure): with guarded.context(locks): raise InjectedFailure() self.assertEqual(expected, log)
def test_release_failure(self): log = [] locks = [ FakeGuardedLock('01_dom', 'dom1', 'mode', log), FakeGuardedLock('02_img', 'img1', 'mode', log), FakeGuardedLock('03_vol', 'vol1', 'mode', log, release=InjectedFailure) ] expected = [('acquire', '01_dom', 'dom1', 'mode'), ('acquire', '02_img', 'img1', 'mode'), ('acquire', '03_vol', 'vol1', 'mode'), ('release', '02_img', 'img1', 'mode'), ('release', '01_dom', 'dom1', 'mode')] with self.assertRaises(guarded.ReleaseError): with guarded.context(locks): pass self.assertEqual(expected, log)
def test_two_vols_different_domains(self): log = [] locks = [ FakeGuardedLock('01_dom', 'dom1', 'mode', log), FakeGuardedLock('02_img', 'img1', 'mode', log), FakeGuardedLock('03_vol', 'vol1', 'mode', log), FakeGuardedLock('01_dom', 'dom2', 'mode', log), FakeGuardedLock('02_img', 'img2', 'mode', log), FakeGuardedLock('03_vol', 'vol2', 'mode', log) ] expected = [('acquire', '01_dom', 'dom1', 'mode'), ('acquire', '01_dom', 'dom2', 'mode'), ('acquire', '02_img', 'img1', 'mode'), ('acquire', '02_img', 'img2', 'mode'), ('acquire', '03_vol', 'vol1', 'mode'), ('acquire', '03_vol', 'vol2', 'mode'), ('release', '03_vol', 'vol2', 'mode'), ('release', '03_vol', 'vol1', 'mode'), ('release', '02_img', 'img2', 'mode'), ('release', '02_img', 'img1', 'mode'), ('release', '01_dom', 'dom2', 'mode'), ('release', '01_dom', 'dom1', 'mode')] with guarded.context(locks): self.assertEqual(expected[:6], log) self.assertEqual(expected, log)
def test_mode_ignored_for_sorting(self): a = FakeGuardedLock('nsA', 'nameA', 'modeA', []) b = FakeGuardedLock('nsA', 'nameA', 'modeB', []) self.assertFalse(a < b) self.assertFalse(b < a)
def test_mode_used_for_equality(self): a = FakeGuardedLock('nsA', 'nameA', 'modeA', []) b = FakeGuardedLock('nsA', 'nameA', 'modeB', []) self.assertNotEqual(a, b)
def test_equality(self): a = FakeGuardedLock('ns', 'name', 'mode', []) b = FakeGuardedLock('ns', 'name', 'mode', []) self.assertEqual(a, b)
def test_less_than(self, a, b): ns_a, name_a, mode_a = a ns_b, name_b, mode_b = b b = FakeGuardedLock(ns_b, name_b, mode_b, []) a = FakeGuardedLock(ns_a, name_a, mode_a, []) self.assertLess(a, b)
def test_different_types_sortable(self): a = FakeGuardedLock('nsA', 'name', 'mode', []) b = OtherFakeLock('nsB', 'name', 'mode', []) self.assertTrue(a < b) self.assertFalse(b < a) self.assertEqual([a, b], sorted([b, a]))
def test_different_types_not_equal(self): a = FakeGuardedLock('ns', 'name', 'mode', []) b = OtherFakeLock('ns', 'name', 'mode', []) self.assertFalse(a.__eq__(b)) self.assertTrue(a.__ne__(b))
def test_properties(self): a = FakeGuardedLock('ns', 'name', 'mode', []) self.assertEqual('ns', a.ns) self.assertEqual('name', a.name) self.assertEqual('mode', a.mode)