Exemplo n.º 1
0
def test_network_select_broadcast():
    received_msgs = []
    from coopy.base import logging_config

    logging_config(basedir="./")

    system = "a string represented system state"

    copynet = CopyNet(system, host="127.0.0.1", port=7777)
    copynet.start()

    actor1 = tcp_actor("127.0.0.1", 7777, "inet")
    actor1.send(_str_to_bytes('copynet'))

    actor2 = tcp_actor("127.0.0.1", 7777, "inet")
    actor2.send(_str_to_bytes('copynet'))

    clients = [actor1, actor2]

    #guarantee that the client is already connected
    import time
    time.sleep(0.2)

    copynet.receive(b"message")
    if six.PY3:
        import pickle
    else:
        import cPickle as pickle

    #both clients should receive the same message
    for cli in clients:
        import struct, zlib, pickle
        size = struct.calcsize(COPYNET_HEADER)
        header = cli.recv(size)
        (psize, stype) = struct.unpack(COPYNET_HEADER, header)
        data = pickle.loads(zlib.decompress(cli.recv(psize)))
        received_msgs.append(data)

        assert stype == b's'
        assert data == b"message"

    assert len(received_msgs) == 2
    assert received_msgs == [b"message", b"message"]

    copynet.close()
    actor1.close()
    actor2.close()
Exemplo n.º 2
0
def test_network_select_receive():
    from coopy.base import logging_config

    logging_config(basedir="./")

    system = "a string represented system state"

    copynet = CopyNet(system, host="127.0.0.1", port=7777)
    copynet.start()

    actor = tcp_actor("127.0.0.1", 7777, "inet")
    actor.send(b'copynet')

    #guarantee that the client is already connected
    import time
    time.sleep(0.2)

    copynet.receive(b"message")

    #if no error, socket is open
    import select
    select.select([], [], [actor], 0)

    import struct, zlib
    if six.PY3:
        import pickle
    else:
        import cPickle as pickle

    size = struct.calcsize(COPYNET_HEADER)
    header = actor.recv(size)
    (psize, stype) = struct.unpack(COPYNET_HEADER, header)
    data = pickle.loads(zlib.decompress(actor.recv(psize)))

    assert stype == b's'
    assert data == b"message"

    copynet.close()
    actor.close()