示例#1
0
    def test_invoke_retry_exception_has_async(self):

        target = 'target_{}'.format(rand_string())
        callback = 'callback_{}'.format(rand_string())
        callback_impl_name = 'callback_impl_name_{}'.format(rand_string())
        cid = new_cid()
        expected_result = rand_string()

        invoking_service = DummyInvokingService(callback,
                                                callback_impl_name,
                                                cid,
                                                expected_result,
                                                raise_on_invoke=True)
        ir = InvokeRetry(invoking_service)

        kwargs = {
            'async_fallback': True,
            'callback': callback,
            'context': {
                rand_string(): rand_string()
            },
            'repeats': rand_int(1, 10),
            'seconds': 0.01,
            'minutes': 0,
        }

        try:
            ir.invoke_retry(target, 1, 2, 3, **kwargs)
        except NeedsRetry, e:
            self.assertEquals(e.cid, cid)
            self.assertEquals(e.cid, e.inner_exc.message)
示例#2
0
    def test_invoke_retry_exception_has_async(self):

        target = 'target_{}'.format(rand_string())
        callback = 'callback_{}'.format(rand_string())
        callback_impl_name = 'callback_impl_name_{}'.format(rand_string())
        cid = new_cid()
        expected_result = rand_string()

        invoking_service = DummyInvokingService(callback, callback_impl_name, cid, expected_result, raise_on_invoke=True)
        ir = InvokeRetry(invoking_service)

        kwargs = {
            'async_fallback': True,
            'callback': callback,
            'context': {rand_string():rand_string()},
            'repeats': rand_int(1, 10),
            'seconds': 0.01,
            'minutes': 0,
        }

        kwargs_copy = deepcopy(kwargs)

        try:
            ir.invoke_retry(target, 1, 2, 3, **kwargs)
        except NeedsRetry, e:
            self.assertEquals(e.cid, cid)
            self.assertEquals(e.cid, e.inner_exc.message)
示例#3
0
    def test_invoke_retry_exception_no_async(self):
        class Sleep(object):
            def __init__(self):
                self.times_called = 0
                self.retry_seconds = []

            def __call__(self, retry_seconds):
                self.times_called += 1
                self.retry_seconds.append(retry_seconds)

        sleep = Sleep()

        with patch('zato.server.pattern.invoke_retry.sleep', sleep):

            target = 'target_{}'.format(rand_string())
            callback = 'callback_{}'.format(rand_string())
            callback_impl_name = 'callback_impl_name_{}'.format(rand_string())
            cid = new_cid()
            expected_result = rand_string()

            invoking_service = DummyInvokingService(callback,
                                                    callback_impl_name,
                                                    cid,
                                                    expected_result,
                                                    raise_on_invoke=True)
            ir = InvokeRetry(invoking_service)

            kwargs = {
                'async_fallback': False,
                'callback': callback,
                'context': {
                    rand_string(): rand_string()
                },
                'repeats': rand_int(1, 10),
                'seconds': 0.01,
                'minutes': 0,
            }

            kwargs_copy = deepcopy(kwargs)

            try:
                ir.invoke_retry(target, 1, 2, 3, **kwargs)
            except ZatoException, e:
                expected_msg = retry_limit_reached_msg(kwargs_copy['repeats'],
                                                       target,
                                                       kwargs_copy['seconds'],
                                                       invoking_service.cid)
                self.assertEquals(e.cid, cid)
                self.assertEquals(e.message, expected_msg)
                self.assertEquals(invoking_service.invoke_called_times,
                                  kwargs_copy['repeats'])

                self.assertEquals(sleep.times_called,
                                  kwargs_copy['repeats'] - 1)
                self.assertEquals(sleep.retry_seconds,
                                  [kwargs_copy['seconds']] *
                                  (kwargs_copy['repeats'] - 1))

            else:
示例#4
0
    def test_invoke_retry_ok(self):

        target = 'target_{}'.format(rand_string())
        callback = 'callback_{}'.format(rand_string())
        callback_impl_name = 'callback_impl_name_{}'.format(rand_string())
        cid = new_cid()
        expected_result = rand_string()

        invoking_service = DummyInvokingService(callback, callback_impl_name,
                                                cid, expected_result)
        ir = InvokeRetry(invoking_service)

        kwargs = {
            'async_fallback': True,
            'callback': callback,
            'context': {
                rand_string(): rand_string()
            },
            'repeats': rand_int(),
            'seconds': rand_int(),
            'minutes': 0,
        }

        result = ir.invoke_retry(target, 1, 2, 3, **kwargs)
        self.assertEquals(expected_result, result)

        self.assertTrue(len(invoking_service.invoke_args), 2)
        self.assertEquals(invoking_service.invoke_args, (target, 1, 2, 3))
        self.assertEquals(invoking_service.invoke_kwargs, {})
示例#5
0
    def test_invoke_retry_ok(self):

        target = 'target_{}'.format(rand_string())
        callback = 'callback_{}'.format(rand_string())
        callback_impl_name = 'callback_impl_name_{}'.format(rand_string())
        cid = new_cid()
        expected_result = rand_string()

        invoking_service = DummyInvokingService(callback, callback_impl_name, cid, expected_result)
        ir = InvokeRetry(invoking_service)

        kwargs = {
            'async_fallback': True,
            'callback': callback,
            'context': {rand_string():rand_string()},
            'repeats': rand_int(),
            'seconds': rand_int(),
            'minutes': 0,
        }

        kwargs_copy = deepcopy(kwargs)

        result = ir.invoke_retry(target, 1, 2, 3, **kwargs)
        self.assertEquals(expected_result, result)

        self.assertTrue(len(invoking_service.invoke_args), 2)
        self.assertEquals(invoking_service.invoke_args, (target, 1, 2, 3))
        self.assertEquals(invoking_service.invoke_kwargs, {})
示例#6
0
    def test_invoke_retry_exception_no_async(self):

        class Sleep(object):
            def __init__(self):
                self.times_called = 0
                self.retry_seconds = []

            def __call__(self, retry_seconds):
                self.times_called += 1
                self.retry_seconds.append(retry_seconds)

        sleep = Sleep()

        with patch('zato.server.pattern.invoke_retry.sleep', sleep):

            target = 'target_{}'.format(rand_string())
            callback = 'callback_{}'.format(rand_string())
            callback_impl_name = 'callback_impl_name_{}'.format(rand_string())
            cid = new_cid()
            expected_result = rand_string()
    
            invoking_service = DummyInvokingService(callback, callback_impl_name, cid, expected_result, raise_on_invoke=True)
            ir = InvokeRetry(invoking_service)
    
            kwargs = {
                'async_fallback': False,
                'callback': callback,
                'context': {rand_string():rand_string()},
                'repeats': rand_int(1, 10),
                'seconds': 0.01,
                'minutes': 0,
            }
    
            kwargs_copy = deepcopy(kwargs)
    
            try:
                ir.invoke_retry(target, 1, 2, 3, **kwargs)
            except ZatoException, e:
                expected_msg = retry_limit_reached_msg(kwargs_copy['repeats'], target, kwargs_copy['seconds'], invoking_service.cid)
                self.assertEquals(e.cid, cid)
                self.assertEquals(e.message, expected_msg)
                self.assertEquals(invoking_service.invoke_called_times, kwargs_copy['repeats'])

                self.assertEquals(sleep.times_called, kwargs_copy['repeats']-1)
                self.assertEquals(sleep.retry_seconds, [kwargs_copy['seconds']] * (kwargs_copy['repeats']-1))

            else: