Harald Welte | b41fd17 | 2011-03-10 10:28:36 +0100 | [diff] [blame] | 1 | -module(isup_codec_tests). |
| 2 | -author('Harald Welte <laforge@gnumonks.org>'). |
| 3 | |
| 4 | -include_lib("eunit/include/eunit.hrl"). |
| 5 | |
| 6 | -include("isup.hrl"). |
Harald Welte | 231ae0b | 2012-04-01 20:13:23 +0200 | [diff] [blame^] | 7 | -include("xua.hrl"). |
Harald Welte | 43d134c | 2011-03-11 17:00:16 +0100 | [diff] [blame] | 8 | -include("m2ua.hrl"). |
| 9 | -include("mtp3.hrl"). |
Harald Welte | b41fd17 | 2011-03-10 10:28:36 +0100 | [diff] [blame] | 10 | |
| 11 | |
Harald Welte | 43d134c | 2011-03-11 17:00:16 +0100 | [diff] [blame] | 12 | % individual message encode/decode tests |
| 13 | |
Harald Welte | b41fd17 | 2011-03-10 10:28:36 +0100 | [diff] [blame] | 14 | -define(ISUP_GRS_BIN, <<1,0,23,1,1,14>>). |
| 15 | -define(ISUP_GRS_DEC, #isup_msg{msg_type = 23,cic = 1, parameters = [{22,{1,<<14>>}}]}). |
| 16 | |
| 17 | grs_dec_test() -> |
| 18 | ?assertEqual(?ISUP_GRS_DEC, isup_codec:parse_isup_msg(?ISUP_GRS_BIN)). |
| 19 | grs_enc_test() -> |
| 20 | ?assertEqual(?ISUP_GRS_BIN, isup_codec:encode_isup_msg(?ISUP_GRS_DEC)). |
| 21 | |
Harald Welte | fe27ae5 | 2011-03-10 10:33:59 +0100 | [diff] [blame] | 22 | -define(ISUP_IAM_BIN, <<9,0,1,16,72,0,10,3,2,10,8,131,16,41,153,36,0,128,15,10,8,3,19,148,3, |
| 23 | 66,48,147,32,242,21,54,25,8,0,0,21,255,255,255,255,255,255,255,255, |
| 24 | 255,255,29,69,56,203,32,0>>). |
| 25 | |
| 26 | -define(ISUP_IAM_DEC, {isup_msg,1,9,[{conn_ind_nature,16},{fw_call_ind,18432},{calling_cat,10},{transm_medium_req,3},{4,{party_number,3,0,undefined,1,undefined,undefined,[9,2,9,9,4,2,0,0,0,8,15]}},{10,{party_number,3,undefined,0,1,0,3,[4,9,3,0,2,4,0,3,3,9,0,2]}},{242,{21,<<54,25,8,0,0,21,255,255,255,255,255,255,255,255,255,255,29,69,56,203,32>>}}]}). |
| 27 | |
| 28 | iam_dec_test() -> |
| 29 | ?assertEqual(?ISUP_IAM_DEC, isup_codec:parse_isup_msg(?ISUP_IAM_BIN)). |
| 30 | iam_enc_test() -> |
| 31 | ?assertEqual(?ISUP_IAM_BIN, isup_codec:encode_isup_msg(?ISUP_IAM_DEC)). |
Harald Welte | 43d134c | 2011-03-11 17:00:16 +0100 | [diff] [blame] | 32 | |
| 33 | |
| 34 | % parser test for real-world ISUP data |
| 35 | pcap_parse_test() -> |
| 36 | Args = [{rewrite_fn, fun pcap_cb/5}], |
| 37 | File = "../priv/isup.pcap", |
| 38 | case file:read_file_info(File) of |
| 39 | {ok, _Info} -> |
Harald Welte | eba9e25 | 2011-03-11 18:21:53 +0100 | [diff] [blame] | 40 | {ok, NrPkts} = osmo_ss7_pcap:pcap_apply("../priv/isup.pcap", "", Args), |
| 41 | ?debugFmt("Parsed ~p PCAP packets~n", [NrPkts]); |
Harald Welte | 43d134c | 2011-03-11 17:00:16 +0100 | [diff] [blame] | 42 | {error, _Reason} -> |
| 43 | ?debugFmt("Skipping PCAP based tests as no ~p could be found~n", |
| 44 | [File]) |
| 45 | end. |
| 46 | |
| 47 | pcap_cb(sctp, _From, _Path, 2, DataBin) -> |
Harald Welte | 231ae0b | 2012-04-01 20:13:23 +0200 | [diff] [blame^] | 48 | M2ua = m2ua_codec:parse_m2ua_msg(DataBin), |
Harald Welte | 43d134c | 2011-03-11 17:00:16 +0100 | [diff] [blame] | 49 | handle_m2ua(M2ua). |
| 50 | |
Harald Welte | 231ae0b | 2012-04-01 20:13:23 +0200 | [diff] [blame^] | 51 | handle_m2ua(#xua_msg{msg_class = ?M2UA_MSGC_MAUP, |
| 52 | msg_type = ?M2UA_MAUP_MSGT_DATA, |
| 53 | payload = Params}) -> |
Harald Welte | 43d134c | 2011-03-11 17:00:16 +0100 | [diff] [blame] | 54 | {_Len, M2uaPayload} = proplists:get_value(16#300, Params), |
| 55 | Mtp3 = mtp3_codec:parse_mtp3_msg(M2uaPayload), |
| 56 | handle_mtp3(Mtp3); |
| 57 | handle_m2ua(#m2ua_msg{}) -> |
| 58 | ok. |
| 59 | |
| 60 | handle_mtp3(#mtp3_msg{service_ind = ?MTP3_SERV_ISUP, |
| 61 | payload = Payload}) -> |
| 62 | #isup_msg{} = IsupDec = isup_codec:parse_isup_msg(Payload), |
| 63 | IsupEnc = isup_codec:encode_isup_msg(IsupDec), |
| 64 | ?assertEqual(Payload, IsupEnc); |
| 65 | handle_mtp3(#mtp3_msg{}) -> |
| 66 | ok. |