Exemplo n.º 1
0
class RWLockTestCase(unittest.TestCase):
    def setUp(self):
        self.lock = RWLock()

    def test_readers(self):
        with self.lock.read_lock():
            self.assertEqual(self.lock.readers, 1)
            self.assertEqual(self.lock.writers, 0)
            self.assertFalse(self.lock.blocked_for_readers)
            self.assertTrue(self.lock.blocked_for_writers)

            # Multiple readers can hold the lock simultaneously
            with self.lock.read_lock():
                self.assertEqual(self.lock.readers, 2)
                self.assertEqual(self.lock.writers, 0)
                self.assertFalse(self.lock.blocked_for_readers)
                self.assertTrue(self.lock.blocked_for_writers)

    def test_writers(self):
        with self.lock.write_lock():
            self.assertEqual(self.lock.readers, 0)
            self.assertEqual(self.lock.writers, 1)
            self.assertTrue(self.lock.blocked_for_readers)
            self.assertTrue(self.lock.blocked_for_writers)

    def test_unlocked(self):
        self.assertEqual(self.lock.readers, 0)
        self.assertEqual(self.lock.writers, 0)
        self.assertFalse(self.lock.blocked_for_readers)
        self.assertFalse(self.lock.blocked_for_writers)