コード例 #1
0
    def test_blocking_aqcuire(self, mock_acquire, mock_random):
        backend = mock.Mock(spec=LockBackend)
        key = "lock"
        duration = 60
        routing_key = None

        lock = Lock(backend, key, duration, routing_key)

        class MockTime:
            time = 0

            @classmethod
            def incr(cls, delta):
                cls.time += delta

        with patch("sentry.utils.locking.lock.time.monotonic",
                   side_effect=lambda: MockTime.time), patch(
                       "sentry.utils.locking.lock.time.sleep",
                       side_effect=MockTime.incr) as mock_sleep:
            with self.assertRaises(UnableToAcquireLock):
                lock.blocking_acquire(initial_delay=0.1, timeout=1, exp_base=2)

            # 0.0, 0.05, 0.15, 0.35, 0.75
            assert len(mock_acquire.mock_calls) == 5
            assert mock_sleep.mock_calls == [
                call(0.05), call(0.1),
                call(0.2), call(0.4)
            ]

        with patch("sentry.utils.locking.lock.Lock.acquire",
                   return_value="foo"):
            # Success case:
            assert lock.blocking_acquire(initial_delay=0, timeout=1) == "foo"