summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-03-11 17:00:16 +0100
committerHarald Welte <laforge@gnumonks.org>2011-03-11 17:00:16 +0100
commit43d134c1f9f164459d97f4c90e5f4dcf0dbb6d5e (patch)
tree2acc400c923315c938e36fe6002e9261bf1cdeb1 /test
parent781d98e5472bcadbe22387233df5b6f7788fef36 (diff)
ISUP: Add test that parses, re-encodes and compares ISUP messages
This works by putting a PCAP file to ./priv/isup.pcap
Diffstat (limited to 'test')
-rw-r--r--test/isup_codec_tests.erl38
1 files changed, 38 insertions, 0 deletions
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.