159 lines
5.8 KiB
Erlang
159 lines
5.8 KiB
Erlang
% Eunit test rig for mangle_tt_sri_sm
|
|
|
|
-module(mangle_tt_sri_sm_tests).
|
|
-author('Harald Welte <laforge@gnumonks.org>').
|
|
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
|
|
-include_lib("osmo_map/include/map.hrl").
|
|
-include_lib("osmo_ss7/include/isup.hrl").
|
|
-include_lib("osmo_ss7/include/sccp.hrl").
|
|
-include_lib("osmo_ss7/include/osmo_util.hrl").
|
|
|
|
-define(SCCP_MAP_INV_SRI_SM,
|
|
#sccp_msg{msg_type = 9,
|
|
parameters = [{protocol_class, {0,0}},
|
|
{called_party_addr, #sccp_addr{res_nat_use = 0,
|
|
route_on_ssn = 0,
|
|
point_code = undefined,
|
|
ssn = 6,
|
|
global_title = #global_title{gti = 4,
|
|
nature_of_addr_ind = 4,
|
|
trans_type = 0,
|
|
encoding = undefined,
|
|
numbering_plan = 1,
|
|
phone_number = [9,1,3,0,0,0,0,0,0,0,1]}}},
|
|
{calling_party_addr, #sccp_addr{res_nat_use = 0,
|
|
route_on_ssn = 0,
|
|
point_code = undefined,
|
|
ssn = 8,
|
|
global_title = #global_title{gti = 4,
|
|
nature_of_addr_ind = 4,
|
|
trans_type = 0,
|
|
encoding = undefined,
|
|
numbering_plan = 1,
|
|
phone_number = [9,8,7,0,0,0,0,0,0,1]}}},
|
|
{user_data,<<98,70,72,4,81,1,13,65,107,30,40,28,6,7,0,17,134,5,1,1,1,160,17,96,15,128,2,7,128,161,9,6,7,4,0,0,1,0,20,2,108,30,161,28,2,1,64,2,1,45,48,20,128,7,145,114,39,67,83,32,249,129,1,1,130,6,145,83,132,9,0,103>>}]
|
|
}).
|
|
|
|
-define(MAP_INV_SRI_SM, {'begin',
|
|
#'MapSpecificPDUs_begin'{
|
|
otid = [81,1,2,200],
|
|
dialoguePortion = {'EXTERNAL', {syntax,{0,0,17,773,1,1,1}}, asn1_NOVALUE,
|
|
[96,15,128,2,7,128,161,9,6,7,4,0,0,1,0,1,3]},
|
|
components = [{basicROS,
|
|
{invoke, #'MapSpecificPDUs_begin_components_SEQOF_basicROS_invoke'{
|
|
invokeId = {present,64},
|
|
linkedId = asn1_NOVALUE,
|
|
opcode = {local,45},
|
|
argument = #'RoutingInfoForSM-Arg'{
|
|
msisdn = [145,114,39,67,83,32,249],
|
|
'sm-RP-PRI' = true,
|
|
serviceCentreAddress = [145,83,132,9,0,103],
|
|
_ = asn1_NOVALUE},
|
|
_ = asn1_NOVALUE}}}],
|
|
_ = asn1_NOVALUE}}).
|
|
|
|
% helper functions
|
|
|
|
make_party_number(Digits) when is_integer(Digits) ->
|
|
#party_number{phone_number = osmo_util:int2digit_list(Digits)}.
|
|
|
|
make_gt(Digits) when is_integer(Digits) ->
|
|
#global_title{phone_number = osmo_util:int2digit_list(Digits)}.
|
|
|
|
make_sccp_sri_sm_to(CalledPartyNum) ->
|
|
NumL = osmo_util:int2digit_list(CalledPartyNum),
|
|
SccpIn = ?SCCP_MAP_INV_SRI_SM,
|
|
Called = proplists:get_value(called_party_addr, SccpIn#sccp_msg.parameters),
|
|
Dgt = Called#sccp_addr.global_title,
|
|
CalledNew = Called#sccp_addr{global_title=Dgt#global_title{phone_number=NumL}},
|
|
ParamsOut = lists:keyreplace(called_party_addr, 1, SccpIn#sccp_msg.parameters,
|
|
{called_party_addr, CalledNew}),
|
|
SccpIn#sccp_msg{parameters=ParamsOut}.
|
|
|
|
get_dgt_tt(Sccp) when is_record(Sccp, sccp_msg) ->
|
|
Called = proplists:get_value(called_party_addr, Sccp#sccp_msg.parameters),
|
|
Dgt = Called#sccp_addr.global_title,
|
|
Dgt#global_title.trans_type.
|
|
|
|
|
|
% actual test cases
|
|
|
|
tcap_comps() ->
|
|
{'begin', BeginInvoke} = ?MAP_INV_SRI_SM,
|
|
Comps = mangle_tt_sri_sm:get_tcap_components(?MAP_INV_SRI_SM),
|
|
?assertEqual(BeginInvoke#'MapSpecificPDUs_begin'.components, Comps).
|
|
|
|
tcap_ops() ->
|
|
Ops = mangle_tt_sri_sm:get_tcap_operations(?MAP_INV_SRI_SM),
|
|
?assertEqual([{invoke,{local,45}}], Ops).
|
|
|
|
sri_sm() ->
|
|
% test with decoded MAP as well as SCCP input
|
|
?assertEqual(true, mangle_tt_sri_sm:check_for_invoke_sri_sm(?MAP_INV_SRI_SM)),
|
|
?assertEqual(true, mangle_tt_sri_sm:check_for_invoke_sri_sm(?SCCP_MAP_INV_SRI_SM)).
|
|
|
|
isup_pfx_match() ->
|
|
TrueNum = make_party_number(9101234567),
|
|
FalseNum = make_party_number(4901234567),
|
|
% test with integer and list input
|
|
?assertEqual(true, mangle_tt_sri_sm:isup_party_match_pfx(TrueNum, 91)),
|
|
?assertEqual(true, mangle_tt_sri_sm:isup_party_match_pfx(TrueNum, [9,1])),
|
|
?assertEqual(false, mangle_tt_sri_sm:isup_party_match_pfx(FalseNum, 91)),
|
|
?assertEqual(false, mangle_tt_sri_sm:isup_party_match_pfx(FalseNum, [9,1])).
|
|
|
|
gt_pfx_match() ->
|
|
TrueNum = make_gt(9101234567),
|
|
FalseNum = make_gt(4901234567),
|
|
% test with integer and list input
|
|
?assertEqual(true, mangle_tt_sri_sm:gt_match_pfx(TrueNum, 91)),
|
|
?assertEqual(true, mangle_tt_sri_sm:gt_match_pfx(TrueNum, [9,1])),
|
|
?assertEqual(false, mangle_tt_sri_sm:gt_match_pfx(FalseNum, 91)),
|
|
?assertEqual(false, mangle_tt_sri_sm:gt_match_pfx(FalseNum, [9,1])).
|
|
|
|
gt_pfx_list_match() ->
|
|
TrueNum = make_gt(9101234567),
|
|
FalseNum = make_gt(4901234567),
|
|
?assertEqual(true, mangle_tt_sri_sm:gt_match_pfx_list(TrueNum, [91, 53])),
|
|
?assertEqual(true, mangle_tt_sri_sm:gt_match_pfx_list(TrueNum, [53, 91])),
|
|
?assertEqual(false, mangle_tt_sri_sm:gt_match_pfx_list(FalseNum, [91, 53])),
|
|
?assertEqual(false, mangle_tt_sri_sm:gt_match_pfx_list(FalseNum, [53, 91])).
|
|
|
|
tt_mangle() ->
|
|
% test the overall macro-function for mangling the TT in case the DGT matches a
|
|
% prefix and the message contains an Invoke(SRI-for-SM)
|
|
Sccp91 = make_sccp_sri_sm_to(9101234567),
|
|
SccpOut91 = mangle_tt_sri_sm:mangle_tt_sri_sm(from_msc, path, ?SCCP_MSGT_UDT, Sccp91),
|
|
?assertEqual(3, get_dgt_tt(SccpOut91)),
|
|
Sccp43 = make_sccp_sri_sm_to(4301234567),
|
|
SccpOut43 = mangle_tt_sri_sm:mangle_tt_sri_sm(from_msc, path, ?SCCP_MSGT_UDT, Sccp91),
|
|
?assertEqual(3, get_dgt_tt(SccpOut43)),
|
|
Sccp49 = make_sccp_sri_sm_to(4901234567),
|
|
SccpOut49 = mangle_tt_sri_sm:mangle_tt_sri_sm(from_msc, path, ?SCCP_MSGT_UDT, Sccp49),
|
|
?assertEqual(get_dgt_tt(Sccp49), get_dgt_tt(SccpOut49)).
|
|
|
|
|
|
% setup and teardown
|
|
|
|
setup() ->
|
|
application:set_env(mgw_nat, mangle_tt_sri_sm_pfx, [ 91, 43 ]).
|
|
|
|
teardown(_) ->
|
|
application:unset_env(mgw_nat, mangle_tt_sri_sm_pfx).
|
|
|
|
mangle_tt_sri_test_() ->
|
|
{setup,
|
|
fun setup/0,
|
|
fun teardown/1,
|
|
[
|
|
?_test(tcap_comps()),
|
|
?_test(tcap_ops()),
|
|
?_test(sri_sm()),
|
|
?_test(isup_pfx_match()),
|
|
?_test(gt_pfx_match()),
|
|
?_test(gt_pfx_list_match()),
|
|
?_test(tt_mangle())
|
|
]
|
|
}.
|