def test_tcp_specific(): """ Test concrete TCP API. """ @gen.coroutine def handle_comm(comm): assert comm.peer_address.startswith("tcp://" + host) assert comm.extra_info == {} msg = yield comm.read() msg["op"] = "pong" yield comm.write(msg) yield comm.close() listener = tcp.TCPListener("localhost", handle_comm) listener.start() host, port = listener.get_host_port() assert host in ("localhost", "127.0.0.1", "::1") assert port > 0 connector = tcp.TCPConnector() l = [] @gen.coroutine def client_communicate(key, delay=0): addr = "%s:%d" % (host, port) comm = yield connector.connect(addr) assert comm.peer_address == "tcp://" + addr assert comm.extra_info == {} yield comm.write({"op": "ping", "data": key}) if delay: yield gen.sleep(delay) msg = yield comm.read() assert msg == {"op": "pong", "data": key} l.append(key) yield comm.close() yield client_communicate(key=1234) # Many clients at once N = 100 futures = [client_communicate(key=i, delay=0.05) for i in range(N)] yield futures assert set(l) == {1234} | set(range(N))
def test_tcp_specific(): """ Test concrete TCP API. """ @gen.coroutine def handle_comm(comm): assert comm.peer_address.startswith('tcp://' + host) assert comm.extra_info == {} msg = yield comm.read() msg['op'] = 'pong' yield comm.write(msg) yield comm.close() listener = tcp.TCPListener('localhost', handle_comm) listener.start() host, port = listener.get_host_port() assert host in ('localhost', '127.0.0.1', '::1') assert port > 0 connector = tcp.TCPConnector() l = [] @gen.coroutine def client_communicate(key, delay=0): addr = '%s:%d' % (host, port) comm = yield connector.connect(addr) assert comm.peer_address == 'tcp://' + addr assert comm.extra_info == {} yield comm.write({'op': 'ping', 'data': key}) if delay: yield gen.sleep(delay) msg = yield comm.read() assert msg == {'op': 'pong', 'data': key} l.append(key) yield comm.close() yield client_communicate(key=1234) # Many clients at once N = 100 futures = [client_communicate(key=i, delay=0.05) for i in range(N)] yield futures assert set(l) == {1234} | set(range(N))