diff options
author | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2009-11-20 14:54:40 +0000 |
commit | 84adefa331c4159d432d22840663c38f155cd4c1 (patch) | |
tree | bff9a9c66adda4df2106dfd0e5c053ab182a12bd /lib/megaco/test/megaco_binary_term_id_test.erl | |
download | otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.gz otp-84adefa331c4159d432d22840663c38f155cd4c1.tar.bz2 otp-84adefa331c4159d432d22840663c38f155cd4c1.zip |
The R13B03 release.OTP_R13B03
Diffstat (limited to 'lib/megaco/test/megaco_binary_term_id_test.erl')
-rw-r--r-- | lib/megaco/test/megaco_binary_term_id_test.erl | 1012 |
1 files changed, 1012 insertions, 0 deletions
diff --git a/lib/megaco/test/megaco_binary_term_id_test.erl b/lib/megaco/test/megaco_binary_term_id_test.erl new file mode 100644 index 0000000000..da4e69c617 --- /dev/null +++ b/lib/megaco/test/megaco_binary_term_id_test.erl @@ -0,0 +1,1012 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2001-2009. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + +%% +%%---------------------------------------------------------------------- +%% Purpose: +%%---------------------------------------------------------------------- + +-module(megaco_binary_term_id_test). + +%%---------------------------------------------------------------------- +%% Include files +%%---------------------------------------------------------------------- +-include_lib("megaco/include/megaco.hrl"). +-include_lib("megaco/src/engine/megaco_message_internal.hrl"). + + +%%---------------------------------------------------------------------- +%% External exports +%%---------------------------------------------------------------------- +-export([t/0]). + +%% Test suite exports +-export([all/1, encode_first/1, decode_first/1, + init_per_testcase/2, fin_per_testcase/2]). + + +%%---------------------------------------------------------------------- +%% Internal exports +%%---------------------------------------------------------------------- +-export([te01/1,te02/1,te03/1,te04/1,te05/1, + te06/1,te07/1,te08/1,te09/1,te10/1, + te11/1,te12/1,te13/1,te14/1,te15/1, + te16/1,te17/1,te18/1,te19/1]). +-export([td01/1,td02/1,td03/1,td04/1,td05/1,td06/1]). + + +%% --------------------------------------------------------------------- + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Top test case + +all(suite) -> + [ + encode_first, + decode_first + ]. + +encode_first(suite) -> + encode_first_cases(). + +decode_first(suite) -> + decode_first_cases(). + + +%% Test server callbacks +init_per_testcase(Case, Config) -> + megaco_test_lib:init_per_testcase(Case, Config). + +fin_per_testcase(Case, Config) -> + megaco_test_lib:fin_per_testcase(Case, Config). + + +%%====================================================================== +%% External functions +%%====================================================================== + +t() -> + display([do(Case) || Case <- cases()]), + ok. + + +cases() -> encode_first_cases() ++ decode_first_cases(). + +encode_first_cases() -> [te01,te02,te03,te04,te05, + te06,te07,te08,te09,te10, + te11,te12,te13,te14,te15, + te16,te17,te18,te19]. +decode_first_cases() -> [td01,td02,td03,td04,td05,td06]. + +do(Case) -> + case doc(Case) of + {'EXIT',_} -> + {Case,error}; + Description -> + io:format("test case ~p~n",[Case]), + case suite(Case) of + {'EXIT',Reason} -> + Res = check_result(Case,Description,ok,{error,Reason}), + {Case,Res}; + {Expected,Result} -> + Res = check_result(Case,Description,Expected,Result), + {Case,Res} + end + end. + +doc(Case) -> (catch apply(?MODULE,Case,[doc])). +suite(Case) -> (catch apply(?MODULE,Case,[])). + +display(R) -> + [display(Case,Result) || {Case,Result} <- R]. + +display(C,error) -> + io:format("Test case ~p failed~n",[C]); +display(C,warning) -> + io:format("Test case ~p conspicuous~n",[C]); +display(C,ok) -> + io:format("Test case ~p succeeded~n",[C]). + +check(D,ok,{ok,T1,T2,T3}) -> + Result = case check_ok_result(T1,T3) of + ok -> + ok; + {error,Reason} -> + io:format(" => inconsistent result" + "~n Start and end record differ" + "~n ~s" + "~n ~s" + "~n ~w" + "~n", + [D,Reason,T2]), + warning + end, + Result; +check(D,error,{ok,T1,T2,T3}) -> + io:format(" => failed" + "~n ~s" + "~n ~p" + "~n ~p" + "~n ~p" + "~n", + [D,T1,T2,T3]), + error; +check(_D,error,{error,_Reason}) -> + ok; +check(D,ok,{error,Reason}) -> + io:format(" => failed" + "~n ~s" + "~n Failed for reason" + "~n ~p" + "~n", + [D,Reason]), + error. + +check_result(_C,D,ok,{ok,T1,T2,T3}) -> + Result = case check_ok_result(T1,T3) of + ok -> + io:format(" => succeeded" + "~n ~s" + "~n ~p" + "~n ~w" + "~n ~p", + [D,T1,T2,T3]), + ok; + {error,Reason} -> + io:format(" => inconsistent result" + "~n Start and end record differ" + "~n ~s" + "~n ~s" + "~n ~w", + [D,Reason,T2]), + warning + end, + io:format("~n~n--------------------~n",[]), + Result; +check_result(_C,D,error,{ok,T1,T2,T3}) -> + io:format(" => failed" + "~n ~s" + "~n ~p" + "~n ~p" + "~n ~p" + "~n~n--------------------~n", + [D,T1,T2,T3]), + error; +check_result(_C,D,error,{error,Reason}) -> + io:format(" => succeeded" + "~n ~s" + "~n Operation failed (expectedly) for reason" + "~n ~p" + "~n~n--------------------~n", + [D,Reason]), + ok; +check_result(_C,D,ok,{error,Reason}) -> + io:format(" => failed" + "~n ~s" + "~n Failed for reason" + "~n ~p" + "~n~n--------------------~n", + [D,Reason]), + error. + +check_ok_result(R,R) when is_record(R,megaco_term_id) -> + ok; % Same record type and same record content +check_ok_result(S,E) when is_record(S,megaco_term_id) andalso + is_record(E,megaco_term_id) -> + Reason = check_megaco_term_id_record(S,E), + {error,Reason}; % Same record type but different record content +check_ok_result(R,R) when is_record(R,'TerminationID') -> + ok; +check_ok_result(S,E) when is_record(S,'TerminationID') andalso + is_record(E,'TerminationID') -> + Reason = check_TerminationID_record(S,E), + {error,Reason}; % Same record type but different record content +check_ok_result(_S,_E) -> + {error,"NOT THE SAME RECORD TYPES"}. % OOPS, Not even the same record type + +check_megaco_term_id_record(#megaco_term_id{contains_wildcards = Cw1, + id = Id1}, + #megaco_term_id{contains_wildcards = Cw2, + id = Id2}) -> + Result = case check_megaco_term_id_cw(Cw1,Cw2) of + ok -> + check_megaco_term_id_id(Id1,Id2); + {error,R1} -> + R2 = check_megaco_term_id_id(Id1,Id2), + io_lib:format("~s~s",[R1,R2]) + end, + lists:flatten(Result). + +check_megaco_term_id_cw(Cw,Cw) -> + ok; +check_megaco_term_id_cw(Cw1,Cw2) -> + R = io_lib:format("~n The 'contains_wildcard' property of the start" + "~n megaco_term_id record " + "~n has value ~w " + "~n but the end record " + "~n has value ~w", + [Cw1,Cw2]), + {error,R}. + +check_megaco_term_id_id(Id,Id) -> + ok; +check_megaco_term_id_id(Id1,Id2) -> + R = io_lib:format("~n The 'id' property of the start" + "~n megaco_term_id record " + "~n has value ~w " + "~n but the end record " + "~n has value ~w", + [Id1,Id2]), + {error,R}. + + +check_TerminationID_record(#'TerminationID'{wildcard = W1, id = Id1}, + #'TerminationID'{wildcard = W2, id = Id2}) -> + Result = case check_TerminationID_w(W1,W2) of + ok -> + check_TerminationID_id(Id1,Id2); + {error,R1} -> + R2 = check_TerminationID_id(Id1,Id2), + io_lib:format("~s~s",[R1,R2]) + end, + lists:flatten(Result). + +check_TerminationID_w(W,W) -> + ok; +check_TerminationID_w(W1,W2) -> + R = io_lib:format("~n The 'wildcard' property of the start" + "~n 'TerminationID' record " + "~n has value ~w " + "~n but the end record " + "~n has value ~w", + [W1,W2]), + {error,R}. + +check_TerminationID_id(Id,Id) -> + ok; +check_TerminationID_id(Id1,Id2) -> + R = io_lib:format("~n The 'id' property of the start" + "~n 'TerminationID' record " + "~n has value ~w " + "~n but the end record " + "~n has value ~w", + [Id1,Id2]), + {error,R}. + + +%% -------------------------------------------------------- +%% Start test cases +%% -------------------------------------------------------- + +%% basic_enc_dec01 +te01(doc) -> + "Basic encoding & then decoding test [1,1]\n (asn -> binary -> asn)"; + +te01(suite) -> + []; + +te01(Config) when is_list(Config) -> + {Exp,Res} = te01(), + ok = check(te01(doc),Exp,Res). + + +te01() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid01()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec02 +te02(doc) -> + "Basic encoding & then decoding test [1,2]"; + +te02(suite) -> + []; + +te02(Config) when is_list(Config) -> + {Exp,Res} = te02(), + ok = check(te02(doc),Exp,Res). + +te02() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid02()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec03 +te03(doc) -> + "Basic encoding & then decoding test [1,3]"; + +te03(suite) -> + []; + +te03(Config) when is_list(Config) -> + {Exp,Res} = te03(), + ok = check(te03(doc),Exp,Res). + +te03() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid03()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec04 +te04(doc) -> + "Basic encoding & then decoding test [1,4]\n (asn -> binary -> asn)"; + +te04(suite) -> + []; + +te04(Config) when is_list(Config) -> + {Exp,Res} = te04(), + ok = check(te04(doc),Exp,Res). + +te04() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid04()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec05 +te05(doc) -> + "Basic encoding & then decoding test [1,5]\n (asn -> binary -> asn)"; + +te05(suite) -> + []; + +te05(Config) when is_list(Config) -> + {Exp,Res} = te05(), + ok = check(te05(doc),Exp,Res). + +te05() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid05()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% no_wildcard_spec_but_fond_some_enc_dec +te06(doc) -> + "Specified NO wildcards, but found some just the same [1,6]\n (asn -> binary -> asn)"; + +te06(suite) -> + []; + +te06(Config) when is_list(Config) -> + {Exp,Res} = te06(), + ok = check(te06(doc),Exp,Res). + +te06() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid06()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% invalid_char_enc_dec +te07(doc) -> + "Invalid character found (2) [1,7]\n (asn -> binary -> asn)"; + +te07(suite) -> + []; + +te07(Config) when is_list(Config) -> + {Exp,Res} = te07(), + ok = check(te07(doc),Exp,Res). + +te07() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid07()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% erroneous_first_level_length_enc_dec01 +te08(doc) -> + "Erroneous length of first level (a character after wildcard) [1,8]\n (asn -> binary -> asn)"; + +te08(suite) -> + []; + +te08(Config) when is_list(Config) -> + {Exp,Res} = te08(), + ok = check(te08(doc),Exp,Res). + +te08() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid08()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% erroneous_first_level_length_enc_dec02 +te09(doc) -> + "Erroneous length of first level (a character after last valid) [1,9]\n (asn -> binary -> asn)"; + +te09(suite) -> + []; + +te09(Config) when is_list(Config) -> + {Exp,Res} = te09(), + ok = check(te09(doc),Exp,Res). + +te09() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid09()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard01 +te10(doc) -> + "Basic encode & decode with one recursive wildcard [1,10]\n (asn -> binary -> asn)\n (NOTE THAT THIS SHOULD LATER BE A LEVEL WILDCARD)"; + +te10(suite) -> + []; + +te10(Config) when is_list(Config) -> + {Exp,Res} = te10(), + ok = check(te10(doc),Exp,Res). + +te10() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid10()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard02 +te11(doc) -> + "Basic encode & decode with one recursive wildcard [1,11]\n (asn -> binary -> asn)"; + +te11(suite) -> + []; + +te11(Config) when is_list(Config) -> + {Exp,Res} = te11(), + ok = check(te11(doc),Exp,Res). + +te11() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid11()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard03 +te12(doc) -> + "Basic encode & decode with one recursive wildcard [1,12]\n (asn -> binary -> asn)"; + +te12(suite) -> + []; + +te12(Config) when is_list(Config) -> + {Exp,Res} = te12(), + ok = check(te12(doc),Exp,Res). + +te12() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid12()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard04 +te13(doc) -> + "Basic encode & decode with one recursive wildcard [1,13]\n (asn -> binary -> asn)"; + +te13(suite) -> + []; + +te13(Config) when is_list(Config) -> + {Exp,Res} = te13(), + ok = check(te13(doc),Exp,Res). + +te13() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid13()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard05 +te14(doc) -> + "Basic encode & decode with one recursive wildcard [2,13]\n (asn -> binary -> asn)"; + +te14(suite) -> + []; + +te14(Config) when is_list(Config) -> + {Exp,Res} = te14(), + ok = check(te14(doc),Exp,Res). + +te14() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config2(),mtid13()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_wildcard_1level +te15(doc) -> + "Basic encode & decode with one wildcard in the first level\nand then one empty level [1,15]\n (asn -> binary -> asn)"; + +te15(suite) -> + []; + +te15(Config) when is_list(Config) -> + {Exp,Res} = te15(), + ok = check(te15(doc),Exp,Res). + +te15() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config1(),mtid15()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard06 +te16(doc) -> + "Basic encode & decode with one recursive wildcard [2,15]\n (asn -> binary -> asn)"; + +te16(suite) -> + []; + +te16(Config) when is_list(Config) -> + {Exp,Res} = te16(), + ok = check(te16(doc),Exp,Res). + +te16() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config2(),mtid15()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard07 +te17(doc) -> + "Basic encode & decode with one recursive wildcard [2,11]\n (asn -> binary -> asn)"; + +te17(suite) -> + []; + +te17(Config) when is_list(Config) -> + {Exp,Res} = te17(), + ok = check(te17(doc),Exp,Res). + +te17() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config2(),mtid11()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard08 +te18(doc) -> + "Basic encode & decode with one recursive wildcard [4,16]\n (asn -> binary -> asn)"; + +te18(suite) -> + []; + +te18(Config) when is_list(Config) -> + {Exp,Res} = te18(), + ok = check(te18(doc),Exp,Res). + +te18() -> + put(encode_debug,dbg), + put(decode_debug,dbg), + Res = encode_decode(config4(),mtid16()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_enc_dec_with_one_rec_wildcard09 +te19(doc) -> + "Basic encode & decode with one recursive wildcard [4,17]\n (asn -> binary -> asn)"; + +te19(suite) -> + []; + +te19(Config) when is_list(Config) -> + {Exp,Res} = te19(), + ok = check(te19(doc),Exp,Res). + +te19() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = encode_decode(config4(),mtid17()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% root_term_dec_enc +td01(doc) -> + "Root termination decoding & then encoding test [1,1]\n (binary -> asn -> binary)"; + +td01(suite) -> + []; + +td01(Config) when is_list(Config) -> + {Exp,Res} = td01(), + ok = check(td01(doc),Exp,Res). + +td01() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = decode_encode(config1(),atid1()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% One byte to much (should be two bytes but is three) +%% basic_dec_enc01 +td02(doc) -> + "Basic decoding & then encoding test [1,2]\n (binary -> asn -> binary)"; + +td02(suite) -> + []; + +td02(Config) when is_list(Config) -> + {Exp,Res} = td02(), + ok = check(td02(doc),Exp,Res). + +td02() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = decode_encode(config1(),atid2()), + erase(encode_debug), + erase(decode_debug), + {error,Res}. + + +%% -------------------------------------------------------- + +%% basic_dec_enc02 +td03(doc) -> + "Basic decoding & then encoding test [2,2]\n (binary -> asn -> binary)"; + +td03(suite) -> + []; + +td03(Config) when is_list(Config) -> + {Exp,Res} = td03(), + ok = check(td03(doc),Exp,Res). + +td03() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = decode_encode(config2(),atid2()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_dec_enc03 +td04(doc) -> + "Basic decoding & then encoding test [2,3]\n (binary -> asn -> binary)"; + +td04(suite) -> + []; + +td04(Config) when is_list(Config) -> + {Exp,Res} = td04(), + ok = check(td04(doc),Exp,Res). + +td04() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = decode_encode(config2(),atid3()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_dec_enc04 +td05(doc) -> + "Basic decoding & then encoding test [2,4]\n (binary -> asn -> binary)"; + +td05(suite) -> + []; + +td05(Config) when is_list(Config) -> + {Exp,Res} = td05(), + ok = check(td05(doc),Exp,Res). + +td05() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = decode_encode(config2(),atid4()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- + +%% basic_dec_enc05 +td06(doc) -> + "Basic decoding & then encoding test [3,5]\n (binary -> asn -> binary)"; + +td06(suite) -> + []; + +td06(Config) when is_list(Config) -> + {Exp,Res} = td06(), + ok = check(td06(doc),Exp,Res). + +td06() -> + %% put(encode_debug,dbg), + %% put(decode_debug,dbg), + Res = decode_encode(config3(),atid5()), + erase(encode_debug), + erase(decode_debug), + {ok,Res}. + + +%% -------------------------------------------------------- +%% -------------------------------------------------------- + +encode_decode(C,T) -> + case encode(C,T) of + {ok,T1} -> + case decode(C,T1) of + {ok,T2} -> + {ok,T,T1,T2}; + {error,R2} -> + {error,{decode_error,T,T1,R2}}; + {exit,E2} -> + {error,{decode_exit,T,T1,E2}} + end; + {error,R1} -> + {error,{encode_error,T,R1}}; + {exit,E1} -> + {error,{encode_exit,T,E1}} + end. + +decode_encode(C,T) -> + case decode(C,T) of + {ok,T1} -> + case encode(C,T1) of + {ok,T2} -> + {ok,T,T1,T2}; + {error,R2} -> + {error,{encode_error,T,T1,R2}}; + {exit,E2} -> + {error,{encode_exit,T,T1,E2}} + end; + {error,R1} -> + {error,{decode_error,T,R1}}; + {exit,E1} -> + {error,{decode_exit,T,E1}} + end. + +%% ------------------ + +config1() -> [3,8,5]. +config2() -> [3,5,4,8,4]. +config3() -> [3,5,4,16,4]. +config4() -> [8,8,8]. % Default config + +mtid01() -> + #megaco_term_id{contains_wildcards = false, + id = [[$1,$0,$1], + [$1,$1,$0,$1,$0,$0,$0,$1], + [$1,$1,$0,$1,$1]]}. +mtid02() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$$],[$1,$1,$0,$1,$$],[$1,$1,$*]]}. +mtid03() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$1],[$1,$0,$1,$$],[$1,$1,$*]]}. +mtid04() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$$],[$1,$1,$0,$1,$$],[$1,$1,$1,$0,$0]]}. +mtid05() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$1],[$1,$1,$0,$1,$$],[$1,$1,$1,$0,$0]]}. +mtid06() -> + #megaco_term_id{contains_wildcards = false, + id = [[$1,$0,$$],[$1,$1,$0,$1,$$],[$1,$1,$*]]}. +mtid07() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$*],[$1,2,$0,$1,$$],[$1,$1,$1,$0,$0]]}. +mtid08() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$*,$1],[$1,$1,$0,$1,$$],[$1,$1,$1,$0,$0]]}. +mtid09() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$0,$1],[$1,$1,$0,$1,$$],[$1,$1,$1,$0,$0]]}. +mtid10() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$1],[$1,$0,$1,$$],[$$]]}. +mtid11() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$1],[$1,$0,$1,$$]]}. +mtid12() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$1],[$1,$0,$1,$0,$1,$1,$$]]}. +mtid13() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$*]]}. +%% Empty last level +%% mtid14() -> +%% #megaco_term_id{contains_wildcards = true, +%% id = [[$1,$0,$*],[$1,$0,$0,$$],[]]}. + +%% Empty second level and missing last level +mtid15() -> + #megaco_term_id{contains_wildcards = true, + id = [[$1,$0,$*],[]]}. +%% Megaco all wildcard termination id +mtid16() -> + #megaco_term_id{contains_wildcards = true, + id = [[?megaco_all]]}. +%% Megaco choose wildcard termination id +mtid17() -> + #megaco_term_id{contains_wildcards = true, + id = [[?megaco_choose]]}. + +aroot() -> + #'TerminationID'{wildcard = [], + id = [16#FF, 16#FF, 16#FF, 16#FF, + 16#FF, 16#FF, 16#FF, 16#FF]}. +atid1() -> aroot(). +atid2() -> + #'TerminationID'{wildcard = [], + id = [2#00000001, 02#00011110, 2#0]}. +atid3() -> + #'TerminationID'{wildcard = [[2#00010111], [2#00000111]], + id = [2#0, 2#00011110, 2#0]}. +atid4() -> + #'TerminationID'{wildcard = [[2#01001111]], + id = [2#0000001, 2#0, 2#0]}. +%% +atid5() -> + #'TerminationID'{wildcard = [[2#01001111]], + id = [2#00000001, 2#00110011, + 2#00000000, 2#00000000]}. + +%%-- + + +%% ------------------ + +encode(C,T) -> + encode(get(encode_debug),C,T). + +encode(L,C,T) -> + put(dsev,L), + Res = encode1(C,T), + erase(dsev), + Res. + +encode1(C,T) -> + case (catch megaco_binary_term_id:encode(C,T)) of + {'EXIT',Reason} -> + {exit,Reason}; + Else -> + Else + end. + +decode(C,T) -> + decode(get(decode_debug),C,T). + +decode(L,C,T) -> + put(dsev,L), + Res = decode1(C,T), + erase(dsev), + Res. + +decode1(C,T) -> + case (catch megaco_binary_term_id:decode(C,T)) of + {'EXIT',Reason} -> + {exit,Reason}; + Else -> + Else + end. + + + + |