def test_hook_server_after_exec_on_error_puller(): zero_ctx = zerorpc.Context() trigger = gevent.event.Event() endpoint = random_ipc_endpoint() echo_module = BrokenEchoModule(trigger) test_server = zerorpc.Puller(echo_module, context=zero_ctx) test_server.bind(endpoint) test_server_task = gevent.spawn(test_server.run) test_client = zerorpc.Pusher() test_client.connect(endpoint) test_middleware = ServerAfterExecMiddleware() zero_ctx.register_middleware(test_middleware) assert test_middleware.called == False try: test_client.echo("test with a middleware") trigger.wait(timeout=2) except zerorpc.RemoteError: pass assert echo_module.last_msg == "Raise" assert test_middleware.called == False test_server.stop() test_server_task.join()
def test_hook_server_before_exec_puller(): zero_ctx = zerorpc.Context() trigger = gevent.event.Event() endpoint = random_ipc_endpoint() echo_module = EchoModule(trigger) test_server = zerorpc.Puller(echo_module, context=zero_ctx) test_server.bind(endpoint) test_server_task = gevent.spawn(test_server.run) test_client = zerorpc.Pusher() test_client.connect(endpoint) # Test without a middleware test_client.echo("test") trigger.wait(timeout=2) assert echo_module.last_msg == "echo: test" trigger.clear() # Test with a middleware test_middleware = ServerBeforeExecMiddleware() zero_ctx.register_middleware(test_middleware) assert test_middleware.called == False test_client.echo("test with a middleware") trigger.wait(timeout=2) assert echo_module.last_msg == "echo: test with a middleware" assert test_middleware.called == True test_server.stop() test_server_task.join()
def test_hook_server_after_exec_puller(): zero_ctx = zerorpc.Context() trigger = gevent.event.Event() echo_module = EchoModule(trigger) test_server = zerorpc.Puller(echo_module, context=zero_ctx) test_server.bind(endpoint) test_server_task = gevent.spawn(test_server.run) test_client = zerorpc.Pusher() test_client.connect(endpoint) # Test without a middleware test_client.echo("test") trigger.wait(timeout=TIME_FACTOR * 2) assert echo_module.last_msg == "echo: test" trigger.clear() # Test with a middleware test_middleware = ServerAfterExecMiddleware() zero_ctx.register_middleware(test_middleware) assert test_middleware.called == False test_client.echo("test with a middleware") trigger.wait(timeout=TIME_FACTOR * 2) assert echo_module.last_msg == "echo: test with a middleware" assert test_middleware.called == True assert test_middleware.request_event_name == 'echo' assert test_middleware.reply_event_name is None test_server.stop() test_server_task.join()
def test_server_inspect_exception_middleware_puller(): endpoint = random_ipc_endpoint() barrier = gevent.event.Event() middleware = InspectExceptionMiddleware(barrier) ctx = zerorpc.Context() ctx.register_middleware(middleware) module = Srv() server = zerorpc.Puller(module, context=ctx) server.bind(endpoint) gevent.spawn(server.run) client = zerorpc.Pusher() client.connect(endpoint) barrier.clear() client.echo( 'This is a test which should call the InspectExceptionMiddleware') barrier.wait(timeout=2) client.close() server.close() assert middleware.called is True
def test_pushpull_composite(): ''' 推拉 接口 用于平峰 Pusher 推, 放入数据 Puller 拉, 主动拉取数据 :return: ''' trigger = gevent.event.Event() class Puller(object): def lolita(self, a, b): print('lolita', a, b) assert a + b == 3 trigger.set() pusher = zerorpc.Pusher() pusher.bind(endpoint) service = Puller() puller = zerorpc.Puller(service) puller.connect(endpoint) gevent.spawn(puller.run) trigger.clear() pusher.lolita(1, 2) trigger.wait() print('done')
def test_task_context_pushpull(): puller_ctx = zerorpc.Context() pusher_ctx = zerorpc.Context() puller_tracer = Tracer('[puller]') puller_ctx.register_middleware(puller_tracer) pusher_tracer = Tracer('[pusher]') pusher_ctx.register_middleware(pusher_tracer) trigger = gevent.event.Event() class Puller(object): def echo(self, msg): trigger.set() puller = zerorpc.Puller(Puller(), context=puller_ctx) puller.bind(endpoint) puller_task = gevent.spawn(puller.run) c = zerorpc.Pusher(context=pusher_ctx) c.connect(endpoint) trigger.clear() c.echo('hello') trigger.wait() puller.stop() puller_task.join() assert pusher_tracer._log == [ ('new', pusher_tracer.trace_id), ] assert puller_tracer._log == [ ('load', pusher_tracer.trace_id), ]
def test_inspect_error_middleware_puller(): class InspectErrorMiddleware(Tracer): def __init__(self, barrier): self.called = False self._barrier = barrier Tracer.__init__(self, identity='[server]') def inspect_error(self, task_context, exc_info): assert 'trace_id' in task_context exc_type, exc_value, exc_traceback = exc_info self.called = True self._barrier.set() class Srv(object): def echo(self, msg): raise RuntimeError(msg) endpoint = random_ipc_endpoint() barrier = gevent.event.Event() middleware = InspectErrorMiddleware(barrier) ctx = zerorpc.Context() ctx.register_middleware(middleware) module = Srv() server = zerorpc.Puller(module, context=ctx) server.bind(endpoint) gevent.spawn(server.run) client = zerorpc.Pusher() client.connect(endpoint) barrier.clear() client.echo('This is a test which should call the InspectErrorMiddleware') barrier.wait() client.close() server.close() assert middleware.called is True
def test_pushpull_composite(): endpoint = random_ipc_endpoint() trigger = gevent.event.Event() class Puller(object): def lolita(self, a, b): print 'lolita', a, b assert a + b == 3 trigger.set() pusher = zerorpc.Pusher() pusher.bind(endpoint) service = Puller() puller = zerorpc.Puller(service) puller.connect(endpoint) gevent.spawn(puller.run) trigger.clear() pusher.lolita(1, 2) trigger.wait() print 'done'