2
0

test_middleware_system.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import unittest
  2. from pyeventsystem.events import SimpleEventDispatcher
  3. from pyeventsystem.middleware import SimpleMiddlewareManager
  4. from pyeventsystem.middleware import implement
  5. from cloudbridge.base.middleware import EventDebugLoggingMiddleware
  6. from cloudbridge.base.middleware import ExceptionWrappingMiddleware
  7. from cloudbridge.interfaces.exceptions import CloudBridgeBaseException
  8. from cloudbridge.interfaces.exceptions import \
  9. InvalidConfigurationException
  10. from .helpers import skipIfPython
  11. class ExceptionWrappingMiddlewareTestCase(unittest.TestCase):
  12. _multiprocess_can_split_ = True
  13. def test_unknown_exception_is_wrapped(self):
  14. EVENT_NAME = "an.exceptional.event"
  15. class SomeDummyClass(object):
  16. @implement(event_pattern=EVENT_NAME, priority=2500)
  17. def raise_a_non_cloudbridge_exception(self, *args, **kwargs):
  18. raise Exception("Some unhandled exception")
  19. dispatcher = SimpleEventDispatcher()
  20. manager = SimpleMiddlewareManager(dispatcher)
  21. middleware = ExceptionWrappingMiddleware()
  22. manager.add(middleware)
  23. # no exception should be raised when there's no next handler
  24. dispatcher.dispatch(self, EVENT_NAME)
  25. some_obj = SomeDummyClass()
  26. manager.add(some_obj)
  27. with self.assertRaises(CloudBridgeBaseException):
  28. dispatcher.dispatch(self, EVENT_NAME)
  29. def test_cloudbridge_exception_is_passed_through(self):
  30. EVENT_NAME = "an.exceptional.event"
  31. class SomeDummyClass(object):
  32. @implement(event_pattern=EVENT_NAME, priority=2500)
  33. def raise_a_cloudbridge_exception(self, *args, **kwargs):
  34. raise InvalidConfigurationException()
  35. dispatcher = SimpleEventDispatcher()
  36. manager = SimpleMiddlewareManager(dispatcher)
  37. some_obj = SomeDummyClass()
  38. manager.add(some_obj)
  39. middleware = ExceptionWrappingMiddleware()
  40. manager.add(middleware)
  41. with self.assertRaises(InvalidConfigurationException):
  42. dispatcher.dispatch(self, EVENT_NAME)
  43. class EventDebugLoggingMiddlewareTestCase(unittest.TestCase):
  44. _multiprocess_can_split_ = True
  45. # Only python 3 has assertLogs support
  46. @skipIfPython("<", 3, 0)
  47. def test_messages_logged(self):
  48. EVENT_NAME = "an.exceptional.event"
  49. class SomeDummyClass(object):
  50. @implement(event_pattern=EVENT_NAME, priority=2500)
  51. def return_some_value(self, *args, **kwargs):
  52. return "hello world"
  53. dispatcher = SimpleEventDispatcher()
  54. manager = SimpleMiddlewareManager(dispatcher)
  55. middleware = EventDebugLoggingMiddleware()
  56. manager.add(middleware)
  57. some_obj = SomeDummyClass()
  58. manager.add(some_obj)
  59. with self.assertLogs('cloudbridge.base.middleware',
  60. level='DEBUG') as cm:
  61. dispatcher.dispatch(self, EVENT_NAME,
  62. "named_param", keyword_param="hello")
  63. self.assertTrue(
  64. "named_param" in cm.output[0]
  65. and "keyword_param" in cm.output[0] and "hello" in cm.output[0],
  66. "Log output {0} not as expected".format(cm.output[0]))
  67. self.assertTrue(
  68. "hello world" in cm.output[1],
  69. "Log output {0} does not contain result".format(cm.output[1]))