anchor.diff:          end),
   
       % when
  -    {ok, {Sock, _}} = connect_via_token(Worker1, [{active, true}]),
  +    {ok, {Sock, _}} = connect_via_token(Worker1, [{active, true}], Transport),
       T1 = os:timestamp(),
  -    lists:foreach(fun(_) -> ok = ssl:send(Sock, PacketRaw) end, lists:seq(1, PacketNum)),
  +    lists:foreach(fun(_) -> ok = Transport:send(Sock, PacketRaw) end, lists:seq(1, PacketNum)),
       T2 = os:timestamp(),
   
       % then
  
positive.code:     _SendingTime = {sending_time, timer:now_diff(T2, T1)},
      _ReceivingTime = {receiving_time, timer:now_diff(T3, T2)},
      _FullTime = {full_time, timer:now_diff(T3, T1)},
  %%     ct:print("~p ~p ~p", [_SendingTime, _ReceivingTime, _FullTime]),
      ssl:close(Sock).
  
  %%%===================================================================
  %%% SetUp and TearDown functions
  
negative.code: -perf_test([
      {repeats, 10},
      {perf_configs, [
          [{packet_size_kilobytes, 1024}, {packet_num, 1000}, {transport, gen_tcp}]
      ]},
      {ct_config, [{packet_size_kilobytes, 1024}, {packet_num, 100}, {transport, ssl}]}
  ]).
  bandwidth_test(Config) ->
      % given
      [Worker1 | _] = Workers = ?config(op_worker_nodes, Config),
      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),
  