| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- import unittest
- from cloudbridge.cloud.base.events import SimpleEventDispatcher
- from cloudbridge.cloud.base.middleware import BaseMiddleware
- from cloudbridge.cloud.base.middleware import SimpleMiddlewareManager
- from cloudbridge.cloud.interfaces.middleware import Middleware
- class MiddlewareSystemTestCase(unittest.TestCase):
- def test_basic_middleware(self):
- class DummyMiddleWare(Middleware):
- def __init__(self):
- self.invocation_order = ""
- def install(self, event_manager):
- self.event_manager = event_manager
- self.invocation_order += "install_"
- def uninstall(self):
- self.invocation_order += "uninstall"
- dispatcher = SimpleEventDispatcher()
- manager = SimpleMiddlewareManager(dispatcher)
- middleware = DummyMiddleWare()
- manager.add(middleware)
- self.assertEqual(middleware.invocation_order, "install_",
- "install should be called when adding new middleware")
- manager.remove(middleware)
- self.assertEqual(middleware.invocation_order, "install_uninstall",
- "uninstall should be called when removing middleware")
- def test_base_middleware(self):
- EVENT_NAME = "some.event.occurred"
- class DummyMiddleWare(BaseMiddleware):
- def __init__(self):
- self.invocation_order = ""
- def setup(self):
- self.add_observer(event_pattern="some.event.*", priority=1000,
- callback=self.my_callback_obs)
- self.add_interceptor(event_pattern="some.*", priority=900,
- callback=self.my_callback_intcpt)
- def my_callback_obs(self, **kwargs):
- self.invocation_order += "observe"
- def my_callback_intcpt(self, **kwargs):
- self.invocation_order += "intercept_"
- return kwargs.get('next_handler').invoke(**kwargs)
- dispatcher = SimpleEventDispatcher()
- manager = SimpleMiddlewareManager(dispatcher)
- middleware = DummyMiddleWare()
- manager.add(middleware)
- dispatcher.emit(self, EVENT_NAME)
- self.assertEqual(middleware.invocation_order, "intercept_observe")
- self.assertListEqual(
- [middleware.my_callback_intcpt, middleware.my_callback_obs],
- [handler.callback for handler
- in dispatcher.get_handlers_for_event(EVENT_NAME)])
- manager.remove(middleware)
- self.assertListEqual([], dispatcher.get_handlers_for_event(EVENT_NAME))
- def test_multiple_middleware(self):
- EVENT_NAME = "some.really.interesting.event.occurred"
- class DummyMiddleWare1(BaseMiddleware):
- def __init__(self):
- self.invocation_order = ""
- def setup(self):
- self.add_observer(event_pattern="some.really.*", priority=1000,
- callback=self.my_callback_obs1)
- self.add_interceptor(event_pattern="some.*", priority=900,
- callback=self.my_callback_intcpt2)
- def my_callback_obs1(self, **kwargs):
- self.invocation_order += "observe"
- def my_callback_intcpt2(self, **kwargs):
- self.invocation_order += "intercept_"
- return kwargs.get('next_handler').invoke(**kwargs)
- class DummyMiddleWare2(BaseMiddleware):
- def __init__(self):
- self.invocation_order = ""
- def setup(self):
- self.add_observer(event_pattern="some.really.*", priority=1050,
- callback=self.my_callback_obs1)
- self.add_interceptor(event_pattern="*", priority=950,
- callback=self.my_callback_intcpt2)
- def my_callback_obs1(self, **kwargs):
- self.invocation_order += "observe"
- def my_callback_intcpt2(self, **kwargs):
- self.invocation_order += "intercept_"
- return kwargs.get('next_handler').invoke(**kwargs)
- dispatcher = SimpleEventDispatcher()
- manager = SimpleMiddlewareManager(dispatcher)
- middleware1 = DummyMiddleWare1()
- middleware2 = DummyMiddleWare2()
- manager.add(middleware1)
- manager.add(middleware2)
- dispatcher.emit(self, EVENT_NAME)
- # Callbacks in both middleware classes should be registered
- self.assertListEqual(
- [middleware1.my_callback_intcpt2, middleware2.my_callback_intcpt2,
- middleware1.my_callback_obs1, middleware2.my_callback_obs1],
- [handler.callback for handler
- in dispatcher.get_handlers_for_event(EVENT_NAME)])
- manager.remove(middleware1)
- # Only middleware2 callbacks should be registered
- self.assertListEqual(
- [middleware2.my_callback_intcpt2, middleware2.my_callback_obs1],
- [handler.callback for handler in
- dispatcher.get_handlers_for_event(EVENT_NAME)])
|