Пример #1
0
 def setUp(self):
     self._builtin_open = builtins.open
     self._failure_countdown = None
     self._retry_count = None
     self._errno = EMOCKEDFAILURE
     lock_dir = TemporaryDirectory()
     self.addCleanup(lock_dir.cleanup)
     self._lock = Lock(os.path.join(lock_dir.name, 'test.lck'))
Пример #2
0
 def setUp(self):
     self._builtin_open = builtins.open
     self._failure_countdown = None
     self._retry_count = None
     self._errno = EMOCKEDFAILURE
     fd, self._lockfile = tempfile.mkstemp('.lck')
     os.close(fd)
     self._lock = Lock(self._lockfile)
Пример #3
0
 def setUp(self):
     self._saved_CLOCK_SLOP = flufl.lock._lockfile.CLOCK_SLOP
     flufl.lock._lockfile.CLOCK_SLOP = datetime.timedelta(seconds=0)
     fd, self._lockfile = tempfile.mkstemp('.lck')
     os.close(fd)
     self._lifetime = datetime.timedelta(seconds=1)
     self._lock1 = Lock(self._lockfile, lifetime=self._lifetime)
     self._lock2 = Lock(self._lockfile, lifetime=self._lifetime)
Пример #4
0
class ErrnoRetryTests(unittest.TestCase):
    def setUp(self):
        self._builtin_open = builtins.open
        self._failure_countdown = None
        self._retry_count = None
        self._errno = EMOCKEDFAILURE
        fd, self._lockfile = tempfile.mkstemp('.lck')
        os.close(fd)
        self._lock = Lock(self._lockfile)

    def tearDown(self):
        self._disable()
        try:
            self._lock.unlock()
        except NotLockedError:
            pass
        try:
            os.remove(self._lockfile)
        except OSError as error:
            if error.errno != errno.ENOENT:
                raise

    def _enable(self):
        builtins.open = self._testable_open
        self._failure_countdown = 3
        self._retry_count = 0

    def _disable(self):
        builtins.open = self._builtin_open

    def _testable_open(self, *args, **kws):
        if self._failure_countdown <= 0:
            return self._builtin_open(*args, **kws)
        self._failure_countdown -= 1
        self._retry_count += 1
        raise TestableEnvironmentError(self._errno)

    def test_retry_errno_api(self):
        self.assertEqual(self._lock.retry_errnos, [])
        self._lock.retry_errnos = [EMOCKEDFAILURE, EOTHERMOCKEDFAILURE]
        self.assertEqual(self._lock.retry_errnos,
                         [EMOCKEDFAILURE, EOTHERMOCKEDFAILURE])
        del self._lock.retry_errnos
        self.assertEqual(self._lock.retry_errnos, [])

    def test_retries(self):
        # Test that _read() will retry when a given errno is encountered.
        self._lock.lock()
        self._lock.retry_errnos = [self._errno]
        self._enable()
        self.assertTrue(self._lock.is_locked)
        # The _read() trigged by the .is_locked call should have been retried.
        self.assertEqual(self._retry_count, 3)
Пример #5
0
class ErrnoRetryTests(unittest.TestCase):
    def setUp(self):
        self._builtin_open = builtins.open
        self._failure_countdown = None
        self._retry_count = None
        self._errno = EMOCKEDFAILURE
        fd, self._lockfile = tempfile.mkstemp('.lck')
        os.close(fd)
        self._lock = Lock(self._lockfile)

    def tearDown(self):
        self._disable()
        try:
            self._lock.unlock()
        except NotLockedError:
            pass
        try:
            os.remove(self._lockfile)
        except OSError as error:
            if error.errno != errno.ENOENT:
                raise

    def _enable(self):
        builtins.open = self._testable_open
        self._failure_countdown = 3
        self._retry_count = 0

    def _disable(self):
        builtins.open = self._builtin_open

    def _testable_open(self, *args, **kws):
        if self._failure_countdown <= 0:
            return self._builtin_open(*args, **kws)
        self._failure_countdown -= 1
        self._retry_count += 1
        raise TestableEnvironmentError(self._errno)

    def test_retry_errno_api(self):
        self.assertEqual(self._lock.retry_errnos, [])
        self._lock.retry_errnos = [EMOCKEDFAILURE, EOTHERMOCKEDFAILURE]
        self.assertEqual(self._lock.retry_errnos, 
                         [EMOCKEDFAILURE, EOTHERMOCKEDFAILURE])
        del self._lock.retry_errnos
        self.assertEqual(self._lock.retry_errnos, [])

    def test_retries(self):
        # Test that _read() will retry when a given errno is encountered.
        self._lock.lock()
        self._lock.retry_errnos = [self._errno]
        self._enable()        
        self.assertTrue(self._lock.is_locked)
        # The _read() trigged by the .is_locked call should have been retried.
        self.assertEqual(self._retry_count, 3)
Пример #6
0
 def setUp(self):
     self._builtin_open = builtins.open
     self._failure_countdown = None
     self._retry_count = None
     self._errno = EMOCKEDFAILURE
     fd, self._lockfile = tempfile.mkstemp('.lck')
     os.close(fd)
     self._lock = Lock(self._lockfile)
Пример #7
0
class ErrnoRetryTests(unittest.TestCase):
    def setUp(self):
        self._builtin_open = builtins.open
        self._failure_countdown = None
        self._retry_count = None
        self._errno = EMOCKEDFAILURE
        lock_dir = TemporaryDirectory()
        self.addCleanup(lock_dir.cleanup)
        self._lock = Lock(os.path.join(lock_dir.name, 'test.lck'))

    def tearDown(self):
        with suppress(NotLockedError):
            self._lock.unlock()

    def _testable_open(self, *args, **kws):
        if self._failure_countdown <= 0:
            return self._builtin_open(*args, **kws)
        self._failure_countdown -= 1
        self._retry_count += 1
        raise TestableEnvironmentError(self._errno)

    def test_retry_errno_api(self):
        self.assertEqual(self._lock.retry_errnos, [])
        self._lock.retry_errnos = [EMOCKEDFAILURE, EOTHERMOCKEDFAILURE]
        self.assertEqual(self._lock.retry_errnos,
                         [EMOCKEDFAILURE, EOTHERMOCKEDFAILURE])
        del self._lock.retry_errnos
        self.assertEqual(self._lock.retry_errnos, [])

    def test_retries(self):
        # Test that _read() will retry when a given errno is encountered.
        self._lock.lock()
        self._lock.retry_errnos = [self._errno]
        self._failure_countdown = 3
        self._retry_count = 0
        with patch('builtins.open', self._testable_open):
            self.assertTrue(self._lock.is_locked)
        # The _read() trigged by the .is_locked call should have been retried.
        self.assertEqual(self._retry_count, 3)
Пример #8
0
 def setUp(self):
     lock_dir = TemporaryDirectory()
     self.addCleanup(lock_dir.cleanup)
     self._lock = Lock(os.path.join(lock_dir.name, 'test.lck'))
Пример #9
0
class LifetimeTests(unittest.TestCase):
    def setUp(self):
        self._saved_CLOCK_SLOP = flufl.lock._lockfile.CLOCK_SLOP
        flufl.lock._lockfile.CLOCK_SLOP = datetime.timedelta(seconds=0)
        fd, self._lockfile = tempfile.mkstemp('.lck')
        os.close(fd)
        self._lifetime = datetime.timedelta(seconds=1)
        self._lock1 = Lock(self._lockfile, lifetime=self._lifetime)
        self._lock2 = Lock(self._lockfile, lifetime=self._lifetime)

    def tearDown(self):
        flufl.lock._lockfile.CLOCK_SLOP = self._saved_CLOCK_SLOP
        try:
            self._lock1.unlock()
        except NotLockedError:
            pass
        try:
            self._lock2.unlock()
        except NotLockedError:
            pass
        try:
            os.remove(self._lockfile)
        except OSError as error:
            if error.errno != errno.ENOENT:
                raise

    def test_no_break(self):
        self._lock1.lock()
        with self.assertRaises(TimeOutError):
            self._lock2.lock(timeout=datetime.timedelta(seconds=0))

    def test_break(self):
        self._lock1.lock()
        time.sleep(self._lifetime.seconds)
        self._lock2.lock(timeout=datetime.timedelta(seconds=0))
        self.assertTrue(self._lock2.is_locked)
        self.assertFalse(self._lock1.is_locked)