Пример #1
0
def test_direct_xpub_xsub(socket, addr, reply_sockets):
    worker_sock = socket(zmq.XSUB)
    worker_sock.bind(addr)
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    xpub = socket(zmq.XPUB)
    xpub.connect(addr)
    # logic
    app = Application()
    worker = zeronimo.Worker(app, [worker_sock], reply_sock)
    collector = zeronimo.Collector(collector_sock, reply_topic)
    fanout = zeronimo.Fanout(xpub, collector)
    with running([worker, collector]):
        assert fanout.emit('', 'zeronimo') == []
        # subscribe ''
        worker_sock.send(b'\x01')
        assert xpub.recv() == b'\x01'
        assert get_results(fanout.emit(b'', 'zeronimo')) == ['zeronimo']
        # unsubscribe ''
        worker_sock.send(b'\x00')
        assert xpub.recv() == b'\x00'
        assert fanout.emit(b'', 'zeronimo') == []
        # subscribe 'zeronimo'
        worker_sock.send(b'\x01zeronimo')
        assert xpub.recv() == b'\x01zeronimo'
        assert \
            get_results(fanout.emit(b'zeronimo', 'zeronimo')) == ['zeronimo']
Пример #2
0
def test_proxied_fanout(collector, worker_pub, socket, device,
                        topic, addr1, addr2):
    # customer  |----| forwarder with XPUB/XSUB |---> | worker
    # collector | <-----------------------------------|
    # run forwarder
    forwarder_in_addr, forwarder_out_addr = addr1, addr2
    device(socket(zmq.XSUB), socket(zmq.XPUB),
           forwarder_in_addr, forwarder_out_addr)
    # connect to the devices
    worker_sub1 = socket(zmq.SUB)
    worker_sub2 = socket(zmq.SUB)
    worker_sub1.set(zmq.SUBSCRIBE, topic)
    worker_sub2.set(zmq.SUBSCRIBE, topic)
    worker_sub1.connect(forwarder_out_addr)
    worker_sub2.connect(forwarder_out_addr)
    pub = socket(zmq.PUB)
    pub.connect(forwarder_in_addr)
    sync_pubsub(pub, [worker_sub1, worker_sub2], topic)
    # make and start workers
    app = Application()
    worker1 = zeronimo.Worker(app, [worker_sub1], worker_pub)
    worker2 = zeronimo.Worker(app, [worker_sub2], worker_pub)
    fanout = zeronimo.Fanout(pub, collector)
    with running([worker1, worker2, collector]):
        # zeronimo!
        results = fanout.emit(topic, 'zeronimo')
        assert get_results(results) == ['zeronimo', 'zeronimo']
Пример #3
0
def _test_duplex(socket, worker_socket, customer_and_collector_socket):
    worker = zeronimo.Worker(Application(), [worker_socket])
    collector = zeronimo.Collector(customer_and_collector_socket)
    customer = zeronimo.Customer(customer_and_collector_socket, collector)
    with running([worker, collector]):
        assert customer.call('zeronimo').get() == 'zeronimo'
        assert ' '.join(customer.call('rycbar123').get()) == \
               'run, you clever boy; and remember.'
        with pytest.raises(ZeroDivisionError):
            customer.call('zero_div').get()
Пример #4
0
def test_collector_without_topic(socket, addr, worker, push,
                                 left_type, right_type):
    left = socket(left_type)
    right = socket(right_type)
    right.bind(addr)
    left.connect(addr)
    worker.reply_socket = right
    collector = zeronimo.Collector(left)  # topic is not required.
    customer = zeronimo.Customer(push, collector)
    with running([collector]):
        assert customer.call('zeronimo').get() == 'zeronimo'
Пример #5
0
def test_pair_with_collector(socket, addr, reply_sockets):
    # Failed at 0.3.0.
    left = socket(zmq.PAIR)
    right = socket(zmq.PAIR)
    left.bind(addr)
    right.connect(addr)
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    worker = zeronimo.Worker(Application(), [left], reply_sock)
    sync_pubsub(reply_sock, [collector_sock], reply_topic)
    collector = zeronimo.Collector(collector_sock, reply_topic)
    customer = zeronimo.Customer(right, collector)
    with running([worker, collector]):
        assert customer.call('zeronimo').get() == 'zeronimo'
Пример #6
0
def test_fanout_by_other_types(left_type, right_type, socket, addr1, addr2):
    fanout_sock = socket(left_type)
    worker_sock = socket(right_type)
    worker_sock.bind(addr1)
    fanout_sock.connect(addr1)
    worker_pub, collector_sub = socket(zmq.PUB), socket(zmq.SUB)
    worker_pub.bind(addr2)
    collector_sub.connect(addr2)
    collector_sub.set(zmq.SUBSCRIBE, 'xxx')
    sync_pubsub(worker_pub, [collector_sub], 'xxx')
    worker = zeronimo.Worker(Application(), [worker_sock], worker_pub)
    collector = zeronimo.Collector(collector_sub, 'xxx')
    fanout = zeronimo.Fanout(fanout_sock, collector)
    with running([worker]):
        assert get_results(fanout.emit('anything', 'zeronimo')) == ['zeronimo']
Пример #7
0
def test_from_socket(socket, addr, reply_sockets):
    # sockets
    worker_sock = socket(zmq.PULL)
    worker_sock.bind(addr)
    push = socket(zmq.PUSH)
    push.connect(addr)
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    # logic
    app = Application()
    worker = zeronimo.Worker(app, [worker_sock], reply_sock)
    collector = zeronimo.Collector(collector_sock, reply_topic)
    customer = zeronimo.Customer(push, collector)
    with running([worker, collector]):
        # test
        result = customer.call('zeronimo')
        assert result.get() == 'zeronimo'
Пример #8
0
def test_xpub_sub(socket, addr, reply_sockets, topic):
    worker_sub = socket(zmq.SUB)
    worker_sub.set(zmq.SUBSCRIBE, topic)
    worker_sub.bind(addr)
    customer_xpub = socket(zmq.XPUB)
    customer_xpub.connect(addr)
    assert customer_xpub.recv() == b'\x01' + topic
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    worker = zeronimo.Worker(Application(), [worker_sub], reply_sock)
    collector = zeronimo.Collector(collector_sock, reply_topic)
    fanout = zeronimo.Fanout(customer_xpub, collector)
    with running([worker, collector]):
        took = False
        for r in fanout.emit(topic, 'zeronimo'):
            assert r.get() == 'zeronimo'
            took = True
        assert took
Пример #9
0
def test_marshal_message(socket, addr, reply_sockets):
    import marshal
    pack = marshal.dumps
    unpack = marshal.loads
    # sockets
    worker_sock = socket(zmq.PULL)
    worker_sock.bind(addr)
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    customer_sock = socket(zmq.PUSH)
    customer_sock.connect(addr)
    # logic
    app = Application()
    worker = zeronimo.Worker(app, [worker_sock], reply_sock,
                             pack=pack, unpack=unpack)
    collector = zeronimo.Collector(collector_sock, reply_topic, unpack=unpack)
    customer = zeronimo.Customer(customer_sock, collector, pack=pack)
    with running([worker, collector]):
        assert customer.call('zeronimo').get() == 'zeronimo'
Пример #10
0
def test_only_workers_bind(socket, addr1, addr2):
    pub1, pub2 = socket(zmq.PUB), socket(zmq.PUB)
    sub1, sub2 = socket(zmq.SUB), socket(zmq.SUB)
    pub1.bind(addr1)
    sub1.bind(addr2)
    pub2.connect(addr2)
    sub2.connect(addr1)
    topic1, topic2 = rand_str(), rand_str()
    sub1.set(zmq.SUBSCRIBE, topic1)
    sub2.set(zmq.SUBSCRIBE, topic2)
    gevent.sleep(0.1)
    worker = zeronimo.Worker(Application(), [sub1], pub1)
    collector = zeronimo.Collector(sub2, topic=topic2)
    fanout = zeronimo.Fanout(pub2, collector)
    with running([worker, collector]):
        took = False
        for r in fanout.emit(topic1, 'zeronimo'):
            assert r.get() == 'zeronimo'
            took = True
        assert took
Пример #11
0
def test_worker_info(socket, addr, reply_sockets):
    # sockets
    worker_sock = socket(zmq.PULL)
    worker_sock.bind(addr)
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    customer_sock = socket(zmq.PUSH)
    customer_sock.connect(addr)
    # logic
    app = Application()
    worker = zeronimo.Worker(app, [worker_sock], reply_sock)
    collector = zeronimo.Collector(collector_sock, reply_topic)
    customer = zeronimo.Customer(customer_sock, collector)
    with running([worker, collector]):
        r = customer.call('zeronimo')
        assert r.get() == 'zeronimo'
        assert r.worker_info is None
        worker.info = b'zeronimo'
        r = customer.call('zeronimo')
        assert r.get() == 'zeronimo'
        assert r.worker_info == b'zeronimo'
        assert isinstance(r.worker_info, bytes)
Пример #12
0
def test_exception_state(socket, addr, reply_sockets):
    # sockets
    worker_sock = socket(zmq.PULL)
    worker_sock.bind(addr)
    push = socket(zmq.PUSH)
    push.connect(addr)
    reply_sock, (collector_sock, reply_topic) = reply_sockets()
    # logic
    app = ExampleExceptionRaiser()
    worker = zeronimo.Worker(app, [worker_sock], reply_sock)
    collector = zeronimo.Collector(collector_sock, reply_topic)
    customer = zeronimo.Customer(push, collector)
    with running([worker, collector]):
        result = customer.call('throw', 2007)
        try:
            result.get()
        except BaseException as exc:
            assert isinstance(exc, zeronimo.RemoteException)
            assert isinstance(exc, ExampleException)
            assert exc.errno == 2007
            assert not exc.initialized
        else:
            assert False