def real_seraph(request, zmq_context, master_config): task = Seraph(master_config) task.front_queue.router_mandatory = True # don't drop msgs during test task.back_queue.router_mandatory = True task.start() yield task task.quit() task.join(2) if task.is_alive(): raise RuntimeError('failed to kill seraph task')
def test_router(zmq_context, master_config): seraph = Seraph(master_config) seraph.start() try: client = zmq_context.socket(transport.REQ) client.connect(master_config.db_queue) worker = zmq_context.socket(transport.REQ) worker.connect(const.ORACLE_QUEUE) worker.send(b'READY') client.send(cbor2.dumps(['FOO'])) client_addr, empty, msg = worker.recv_multipart() assert cbor2.loads(msg) == ['FOO'] worker.send_multipart([client_addr, empty, cbor2.dumps(['BAR'])]) assert cbor2.loads(client.recv()) == ['BAR'] finally: seraph.quit() seraph.join()
def test_router_no_workers(zmq_context, master_config): seraph = Seraph(master_config) seraph.start() try: client = zmq_context.socket(zmq.REQ) client.connect(master_config.db_queue) client.send_pyobj(['FOO']) with pytest.raises(zmq.ZMQError): client.recv_pyobj(flags=zmq.NOBLOCK) worker = zmq_context.socket(zmq.REQ) worker.connect(const.ORACLE_QUEUE) worker.send(b'READY') client_addr, empty, msg = worker.recv_multipart() assert pickle.loads(msg) == ['FOO'] worker.send_multipart([client_addr, empty, pickle.dumps(['BAR'])]) assert client.recv_pyobj() == ['BAR'] finally: seraph.quit() seraph.join()