From 43d134c1f9f164459d97f4c90e5f4dcf0dbb6d5e Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Fri, 11 Mar 2011 17:00:16 +0100 Subject: [PATCH] ISUP: Add test that parses, re-encodes and compares ISUP messages This works by putting a PCAP file to ./priv/isup.pcap --- priv/.empty | 0 test/isup_codec_tests.erl | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 priv/.empty diff --git a/priv/.empty b/priv/.empty new file mode 100644 index 0000000..e69de29 diff --git a/test/isup_codec_tests.erl b/test/isup_codec_tests.erl index 9e69bf8..b1efea5 100644 --- a/test/isup_codec_tests.erl +++ b/test/isup_codec_tests.erl @@ -4,8 +4,12 @@ -include_lib("eunit/include/eunit.hrl"). -include("isup.hrl"). +-include("m2ua.hrl"). +-include("mtp3.hrl"). +% individual message encode/decode tests + -define(ISUP_GRS_BIN, <<1,0,23,1,1,14>>). -define(ISUP_GRS_DEC, #isup_msg{msg_type = 23,cic = 1, parameters = [{22,{1,<<14>>}}]}). @@ -24,3 +28,37 @@ iam_dec_test() -> ?assertEqual(?ISUP_IAM_DEC, isup_codec:parse_isup_msg(?ISUP_IAM_BIN)). iam_enc_test() -> ?assertEqual(?ISUP_IAM_BIN, isup_codec:encode_isup_msg(?ISUP_IAM_DEC)). + + +% parser test for real-world ISUP data +pcap_parse_test() -> + Args = [{rewrite_fn, fun pcap_cb/5}], + File = "../priv/isup.pcap", + case file:read_file_info(File) of + {ok, _Info} -> + osmo_ss7_pcap:pcap_apply("../priv/isup.pcap", "", Args); + {error, _Reason} -> + ?debugFmt("Skipping PCAP based tests as no ~p could be found~n", + [File]) + end. + +pcap_cb(sctp, _From, _Path, 2, DataBin) -> + {ok, M2ua} = m2ua_codec:parse_m2ua_msg(DataBin), + handle_m2ua(M2ua). + +handle_m2ua(#m2ua_msg{msg_class = ?M2UA_MSGC_MAUP, + msg_type = ?M2UA_MAUP_MSGT_DATA, + parameters = Params}) -> + {_Len, M2uaPayload} = proplists:get_value(16#300, Params), + Mtp3 = mtp3_codec:parse_mtp3_msg(M2uaPayload), + handle_mtp3(Mtp3); +handle_m2ua(#m2ua_msg{}) -> + ok. + +handle_mtp3(#mtp3_msg{service_ind = ?MTP3_SERV_ISUP, + payload = Payload}) -> + #isup_msg{} = IsupDec = isup_codec:parse_isup_msg(Payload), + IsupEnc = isup_codec:encode_isup_msg(IsupDec), + ?assertEqual(Payload, IsupEnc); +handle_mtp3(#mtp3_msg{}) -> + ok.