anchor.diff:              #'ClientMessage'{message_id = N, message_body = {ping, #'Ping'{}}}
           end, MsgNumbersBin),
       RawPings = lists:map(fun(E) -> client_messages:encode_msg(E) end, Pings),
  -
  -    % when
  -    {ok, {Sock, _}} = connect_via_token(Worker1, [{active, true}], Transport),
  +    Self = self(),
  +
       T1 = os:timestamp(),
  -    lists:foreach(fun(E) -> ok = Transport:send(Sock, E) end, RawPings),
  +    [
  +        spawn_link(
  +            fun() ->
  +                % when
  +                {ok, {Sock, _}} = connect_via_token(Worker1, [{active, true}], Transport),
  +                lists:foreach(fun(E) ->
  +                    ok = Transport:send(Sock, E)
  +                end, RawPings),
  +                Received = lists:map(
  +                    fun(_) ->
  +                        Pong = receive_server_message(),
  +                        ?assertMatch(#'ServerMessage'{message_body = {pong, #'Pong'{}}}, Pong),
  +                        {binary_to_integer(Pong#'ServerMessage'.message_id), Pong}
  +                    end, MsgNumbersBin),
  +
  +                % then
  +                {_, ReceivedInOrder} = lists:unzip(lists:keysort(1, Received)),
  +                IdToMessage = lists:zip(MsgNumbersBin, ReceivedInOrder),
  +                lists:foreach(
  +                    fun({Id, #'ServerMessage'{message_id = MsgId}}) ->
  +                        ?assertEqual(Id, MsgId)
  +                    end, IdToMessage),
  +                ok = Transport:close(Sock),
  +                Self ! success
  +            end)
  +        || _ <- ConnNumbersList
  +    ],
  +    lists:foreach(fun(_) ->
  +        {ok, success} = test_utils:receive_msg(success, infinity)
  +    end, ConnNumbersList),
       T2 = os:timestamp(),
  -    Received = lists:map(
  -        fun(_) ->
  -            Pong = receive_server_message(),
  -            ?assertMatch(#'ServerMessage'{message_body = {pong, #'Pong'{}}}, Pong),
  -            {binary_to_integer(Pong#'ServerMessage'.message_id), Pong}
  -        end, MsgNumbersBin),
  -    T3 = os:timestamp(),
  -
  -    % then
  -    {_, ReceivedInOrder} = lists:unzip(lists:keysort(1, Received)),
  -    IdToMessage = lists:zip(MsgNumbersBin, ReceivedInOrder),
  -    lists:foreach(
  -        fun({Id, #'ServerMessage'{message_id = MsgId}}) ->
  -            ?assertEqual(Id, MsgId)
  -        end, IdToMessage),
  -    ok = Transport:close(Sock),
       [
  -        {sending_time, timer:now_diff(T2, T1)},
  -        {receiving_time, timer:now_diff(T3, T2)},
  -        {full_time, timer:now_diff(T3, T1)}
  +        {full_time, timer:now_diff(T2, T1)}
       ].
   
   -perf_test([
  
positive.code: 
  % todo repair oneproxy error:
  % todo [error] <0.1099.0>@oneproxy:main_loop:234 [ oneproxy 5555 ] handle_client_read failed due to: tlsv1 alert internal error
  % todo and activate 'proto_version_test'
  -perf_test({perf_cases, [multi_message_test, multi_ping_pong_test,
      sequential_ping_pong_test, multi_connection_test, bandwidth_test, python_client_test]}).
  all() ->
  
negative.code:     PacketSize = ?config(packet_size_kilobytes, Config),
      PacketNum = ?config(packet_num, Config),
      Transport = ?config(transport, Config),
      Data = crypto:rand_bytes(PacketSize * 1024),
      Packet = #'ClientMessage'{message_body = {data, #'Data'{data = Data}}},
      PacketRaw = client_messages:encode_msg(Packet),
      Self = self(),
  