anchor.diff:         receive_request_udp2,
          send_response_udp_maddr,
          send_response_udp_default_port]},
  +     % tests using TCP socket
        {tcp, [], [receive_request_send_response_tcp,
  -                receive_request_send_response_tcp_reconnect]}].
  -
  +                receive_request_send_response_tcp_reconnect,
  +                send_request_udp_fallback_tcp]}].
  +
  +%% - start gproc
  +%% - mock sip_config module to return ports 15060 for UDP/TCP
  +%% - mock sip_cores to return test process when handling message
  +%% - start transport layer supervisor
   init_per_suite(Config) ->
       ok = application:start(gproc),
   
  
positive.code:     {ok, {_, _, ExpectedRequestBin}} = gen_udp:recv(UDP, size(ExpectedRequestBin), ?TIMEOUT),
      ok.
  
  send_request_udp_fallback(Config) ->
      TCP = ?config(tcp, Config),
  
      LongBody = sip_test:generate_body(<<$A>>, 1300),
  
negative.code:          init_per_testcase/2, end_per_testcase/2]).
  
  % test cases
  -export([send_request_udp/1, send_request_udp_multicast/1]).
  -export([receive_response_udp/1, receive_response_udp_wrong/1]).
  -export([receive_request_udp/1, receive_request_udp2/1]).
  -export([send_response_udp_maddr/1, send_response_udp_default_port/1]).
  -export([receive_request_send_response_tcp/1,
           receive_request_send_response_tcp_reconnect/1,
           send_request_udp_fallback_tcp/1]).
  
  all() ->
      [{group, udp}, {group, tcp}].
  
  groups() ->
      [% tests using UDP socket
       {udp, [],
        [send_request_udp,
         send_request_udp_multicast,
         receive_response_udp,
         receive_response_udp_wrong,
  