Ejemplo n.º 1
0
    def test_get_retry_settings_has_invalid_async_callback(self):

        ir = InvokeRetry(None)

        callback = [None, rand_string()]
        repeats = [None, rand_int()]

        target = rand_string()

        for callback_item in callback:
            for repeats_item in repeats:
                kwargs = {
                    'async_fallback': True,
                    'callback': callback_item,
                    'repeats': repeats_item,
                }

            try:
                ir._get_retry_settings(target, **kwargs)
            except ValueError, e:

                for name in 'callback', 'repeats':
                    if name in e.message:
                        self.assertEquals(
                            e.message,
                            'Could not invoke `{}`, `{}` was not provided ({})'
                            .format(target, name, None))
            else:
                self.assertTrue(callback_item is not None)
                self.assertTrue(repeats_item is not None)
Ejemplo n.º 2
0
    def test_get_retry_settings_has_invalid_async_callback(self):

        ir = InvokeRetry(None)

        callback = [None, rand_string()]
        repeats = [None, rand_int()]

        target = rand_string()

        for callback_item in callback:
            for repeats_item in repeats:
                kwargs = {
                    'async_fallback': True,
                    'callback': callback_item,
                    'repeats': repeats_item,
                }

            try:
                ir._get_retry_settings(target, **kwargs)
            except ValueError, e:

                for name in 'callback', 'repeats':
                    if name in e.message:
                        self.assertEquals(e.message, 'Could not invoke `{}`, `{}` was not provided ({})'.format(
                            target, name, None))
            else:
                self.assertTrue(callback_item is not None)
                self.assertTrue(repeats_item is not None)
Ejemplo n.º 3
0
    def test_get_retry_settings_has_async_callback_invalid_target(self):
        ir = InvokeRetry(DummyTargetService())

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

        try:
            ir._get_retry_settings(rand_string(), **kwargs)
        except ValueError, e:
            prefix = 'Service:`{}` does not exist, e:`Traceback (most recent call last):'.format(kwargs['callback'])
            self.assertTrue(e.message.startswith(prefix))
            self.assertIn("KeyError: u'{}'".format(kwargs['callback']), e.message)
Ejemplo n.º 4
0
    def test_get_retry_settings_has_async_callback_both_secs_mins(self):
        ir = InvokeRetry(None)
        target = rand_string()

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

        try:
            ir._get_retry_settings(target, **kwargs)
        except ValueError, e:
            self.assertEquals(e.message, 'Could not invoke `{}`, only one of seconds:`{}` and minutes:`{}` can be given'.format(
                target, kwargs['seconds'], kwargs['minutes']))
Ejemplo n.º 5
0
    def test_get_retry_settings_has_async_callback_invalid_target(self):
        ir = InvokeRetry(DummyInvokingService())

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

        try:
            ir._get_retry_settings(rand_string(), **kwargs)
        except ValueError, e:
            prefix = 'Service:`{}` does not exist, e:`Traceback (most recent call last):'.format(
                kwargs['callback'])
            self.assertTrue(e.message.startswith(prefix))
            self.assertIn("KeyError: u'{}'".format(kwargs['callback']),
                          e.message)
Ejemplo n.º 6
0
    def test_get_retry_settings_has_async_callback_no_secs_mins(self):
        ir = InvokeRetry(None)
        target = rand_string()

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

        try:
            ir._get_retry_settings(target, **kwargs)
        except ValueError, e:
            self.assertEquals(
                e.message,
                'Could not invoke `{}`, exactly one of seconds:`{}` or minutes:`{}` must be given'
                .format(target, kwargs['seconds'], kwargs['minutes']))
Ejemplo n.º 7
0
    def test_get_retry_settings_has_async_callback_both_secs_mins(self):
        ir = InvokeRetry(None)
        target = rand_string()

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

        try:
            ir._get_retry_settings(target, **kwargs)
        except ValueError as e:
            self.assertEquals(
                e.message,
                'Could not invoke `{}`, only one of seconds:`{}` and minutes:`{}` can be given'
                .format(target, kwargs['seconds'], kwargs['minutes']))
        else:
            self.fail('Expected a ValueError')
Ejemplo n.º 8
0
    def test_get_retry_settings_has_async_callback(self):

        callback = rand_string()
        callback_impl_name = rand_string()

        invoking_service = DummyTargetService(callback, callback_impl_name)

        for needs_seconds in True, False:

            target = rand_string()
            kwargs = {
                'async_fallback': True,
                'callback': callback,
                'context': {rand_string():rand_string(), rand_int():rand_int()},
                'repeats': rand_int(),
                'seconds': rand_int() if needs_seconds else 0,
                'minutes': rand_int() if not needs_seconds else 0,
                'custom1': 'custom1',
                'custom2': 'custom2',
                }

            kwargs_copy = deepcopy(kwargs)

            ir = InvokeRetry(invoking_service)

            async_fallback, callback, callback_context, retry_repeats, retry_seconds, kwargs = ir._get_retry_settings(
                target, **kwargs)

            self.assertTrue(async_fallback)

            self.assertNotIn('callback', kwargs)
            self.assertEquals(callback, kwargs_copy['callback'])

            self.assertNotIn('context', kwargs)
            self.assertDictEqual(callback_context, kwargs_copy['context'])

            self.assertNotIn('repeats', kwargs)
            self.assertEquals(retry_repeats, kwargs_copy['repeats'])

            if needs_seconds:
                self.assertNotIn('seconds', kwargs)
                self.assertEquals(retry_seconds, kwargs_copy['seconds'])
            else:
                self.assertNotIn('minutes', kwargs)
                self.assertEquals(retry_seconds, kwargs_copy['minutes'] * 60)

            self.assertDictEqual(kwargs, {'custom1':'custom1', 'custom2':'custom2'})
Ejemplo n.º 9
0
    def test_get_retry_settings_has_async_callback(self):

        callback = rand_string()
        callback_impl_name = rand_string()

        invoking_service = DummyInvokingService(callback, callback_impl_name)

        for needs_seconds in True, False:

            target = rand_string()
            kwargs = {
                'async_fallback': True,
                'callback': callback,
                'context': {
                    rand_string(): rand_string(),
                    rand_int(): rand_int()
                },
                'repeats': rand_int(),
                'seconds': rand_int() if needs_seconds else 0,
                'minutes': rand_int() if not needs_seconds else 0,
                'custom1': 'custom1',
                'custom2': 'custom2',
            }

            kwargs_copy = deepcopy(kwargs)

            ir = InvokeRetry(invoking_service)

            async_fallback, callback, callback_context, retry_repeats, retry_seconds, kwargs = ir._get_retry_settings(
                target, **kwargs)

            self.assertTrue(async_fallback)

            self.assertNotIn('callback', kwargs)
            self.assertEquals(callback, kwargs_copy['callback'])

            self.assertNotIn('context', kwargs)
            self.assertDictEqual(callback_context, kwargs_copy['context'])

            self.assertNotIn('repeats', kwargs)
            self.assertEquals(retry_repeats, kwargs_copy['repeats'])

            if needs_seconds:
                self.assertNotIn('seconds', kwargs)
                self.assertEquals(retry_seconds, kwargs_copy['seconds'])
            else:
                self.assertNotIn('minutes', kwargs)
                self.assertEquals(retry_seconds, kwargs_copy['minutes'] * 60)

            self.assertDictEqual(kwargs, {
                'custom1': 'custom1',
                'custom2': 'custom2'
            })