async def METHOD_NAME(service_client, loop, monitor_client, gate):
    await service_client.reset_metrics()
    TIMEOUT = 10.0
    # respond with delay in TIMEOUT seconds
    gate.to_client_delay(TIMEOUT)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    await loop.sock_connect(sock, gate.get_sockname_for_clients())
    sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    recv_task = asyncio.create_task(recv_all_data(sock, loop))
    await send_all_data(sock, loop)
    done, _ = await asyncio.wait(
        [recv_task], timeout=TIMEOUT / 2, return_when=asyncio.FIRST_COMPLETED,
    )
    assert not done
    gate.to_client_pass()
    await recv_task
    metrics = await monitor_client.metrics(prefix='tcp-echo.')
    assert metrics.value_at('tcp-echo.sockets.opened') == 1
    assert metrics.value_at('tcp-echo.sockets.closed') == 0
    assert metrics.value_at('tcp-echo.bytes.read') == DATA_LENGTH