def test_network_select_send_direct(): 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')) actors = [actor1, actor2] #guarantee that the client is already connected import time time.sleep(0.2) copynet_client1 = list(copynet.clientmap.values())[0] copynet.send_direct(copynet_client1.client, _str_to_bytes("message")) time.sleep(0.2) if six.PY3: import pickle else: import cPickle as pickle import struct, zlib, pickle size = struct.calcsize(COPYNET_HEADER) #one of the 2 reads will raise an error and the other will work error_count = 0 for actor in actors: try: header = actor.recv(size) (psize, stype) = struct.unpack(COPYNET_HEADER, header) data = pickle.loads(zlib.decompress(actor.recv(psize))) received_msgs.append(data) except Exception: error_count += 1 assert len(received_msgs) == 1 assert error_count == 1 copynet.close() actor1.close() actor2.close()