def test__calls_handler_on_notification(self): listener = PostgresListenerService() dv = DeferredValue() listener.register("machine", lambda *args: dv.set(args)) yield listener.startService() try: yield deferToDatabase(self.send_notification, "machine_create", 1) yield dv.get(timeout=2) self.assertEqual(('create', '1'), dv.value) finally: yield listener.stopService()
def test_calls_handler_on_notification(self): listener = PostgresListenerService() listener.HANDLE_NOTIFY_DELAY = listener.CHANNEL_REGISTRAR_DELAY = 0 dv = DeferredValue() listener.register("machine", lambda *args: dv.set(args)) yield listener.startService() yield listener.channelRegistrarDone try: yield deferToDatabase(self.send_notification, "machine_create", 1) yield dv.get(timeout=2) self.assertEqual(("create", "1"), dv.value) finally: yield listener.stopService()
def test__calls_handler_on_notification_with_delayed_registration(self): listener = PostgresListenerService() dv = DeferredValue() yield listener.startService() try: # Register after the service has been started. The handler should # still be called. listener.register("machine", lambda *args: dv.set(args)) yield deferToDatabase(self.send_notification, "machine_create", 1) yield dv.get(timeout=2) self.assertEqual(('create', '1'), dv.value) finally: yield listener.stopService()
def test__calls_system_handler_on_notification(self): listener = PostgresListenerService() # Change notifications to a frozenset. This makes sure that # the system message does not go into the queue. Instead if should # call the handler directly in `doRead`. listener.notifications = frozenset() dv = DeferredValue() listener.register("sys_test", lambda *args: dv.set(args)) yield listener.startService() try: yield deferToDatabase(self.send_notification, "sys_test", 1) yield dv.get(timeout=2) self.assertEqual(("sys_test", "1"), dv.value) finally: yield listener.stopService()