blob: 2fd421f69ad17862b8889c17ce67644c9c3164cc [file] [log] [blame]
Harald Welteb41fd172011-03-10 10:28:36 +01001-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 Welte231ae0b2012-04-01 20:13:23 +02007-include("xua.hrl").
Harald Welte43d134c2011-03-11 17:00:16 +01008-include("m2ua.hrl").
9-include("mtp3.hrl").
Harald Welteb41fd172011-03-10 10:28:36 +010010
11
Harald Welte43d134c2011-03-11 17:00:16 +010012% individual message encode/decode tests
13
Harald Welteb41fd172011-03-10 10:28:36 +010014-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
17grs_dec_test() ->
18 ?assertEqual(?ISUP_GRS_DEC, isup_codec:parse_isup_msg(?ISUP_GRS_BIN)).
19grs_enc_test() ->
20 ?assertEqual(?ISUP_GRS_BIN, isup_codec:encode_isup_msg(?ISUP_GRS_DEC)).
21
Harald Weltefe27ae52011-03-10 10:33:59 +010022-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
28iam_dec_test() ->
29 ?assertEqual(?ISUP_IAM_DEC, isup_codec:parse_isup_msg(?ISUP_IAM_BIN)).
30iam_enc_test() ->
31 ?assertEqual(?ISUP_IAM_BIN, isup_codec:encode_isup_msg(?ISUP_IAM_DEC)).
Harald Welte43d134c2011-03-11 17:00:16 +010032
33
34% parser test for real-world ISUP data
35pcap_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 Welteeba9e252011-03-11 18:21:53 +010040 {ok, NrPkts} = osmo_ss7_pcap:pcap_apply("../priv/isup.pcap", "", Args),
41 ?debugFmt("Parsed ~p PCAP packets~n", [NrPkts]);
Harald Welte43d134c2011-03-11 17:00:16 +010042 {error, _Reason} ->
43 ?debugFmt("Skipping PCAP based tests as no ~p could be found~n",
44 [File])
45 end.
46
47pcap_cb(sctp, _From, _Path, 2, DataBin) ->
Harald Welte231ae0b2012-04-01 20:13:23 +020048 M2ua = m2ua_codec:parse_m2ua_msg(DataBin),
Harald Welte43d134c2011-03-11 17:00:16 +010049 handle_m2ua(M2ua).
50
Harald Welte231ae0b2012-04-01 20:13:23 +020051handle_m2ua(#xua_msg{msg_class = ?M2UA_MSGC_MAUP,
52 msg_type = ?M2UA_MAUP_MSGT_DATA,
53 payload = Params}) ->
Harald Welte43d134c2011-03-11 17:00:16 +010054 {_Len, M2uaPayload} = proplists:get_value(16#300, Params),
55 Mtp3 = mtp3_codec:parse_mtp3_msg(M2uaPayload),
56 handle_mtp3(Mtp3);
57handle_m2ua(#m2ua_msg{}) ->
58 ok.
59
60handle_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);
65handle_mtp3(#mtp3_msg{}) ->
66 ok.