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()
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()