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)
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)
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)
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']))
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)
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']))
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')
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'})
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' })