diff options
author | Kenneth Lundin <[email protected]> | 2010-02-19 14:01:57 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2010-02-19 14:01:57 +0000 |
commit | 18bd1239bee04427340a44f57f993ea92c264e41 (patch) | |
tree | dbb3031dcd2e446eb457ff7ac5229949517d7557 /lib/asn1/test/test_x691.erl | |
parent | 729565dc3f8bcf8829508136498aef6a542840f4 (diff) | |
download | otp-18bd1239bee04427340a44f57f993ea92c264e41.tar.gz otp-18bd1239bee04427340a44f57f993ea92c264e41.tar.bz2 otp-18bd1239bee04427340a44f57f993ea92c264e41.zip |
OTP-8463 Support for EXTENSIBILITY IMPLIED and SET/SEQ OF NamedType is
added.
Diffstat (limited to 'lib/asn1/test/test_x691.erl')
-rw-r--r-- | lib/asn1/test/test_x691.erl | 227 |
1 files changed, 227 insertions, 0 deletions
diff --git a/lib/asn1/test/test_x691.erl b/lib/asn1/test/test_x691.erl new file mode 100644 index 0000000000..5bf3a4a077 --- /dev/null +++ b/lib/asn1/test/test_x691.erl @@ -0,0 +1,227 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2008-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% +%% +%% +-module(test_x691). + +-export([compile/3]). +-export([cases/2]). + +-include("test_server.hrl"). + + +compile(Config,Rules,Option) -> + + ?line DataDir = ?config(data_dir,Config), + ?line OutDir = ?config(priv_dir,Config), + ?line true = code:add_patha(?config(priv_dir,Config)), + ?line ok = asn1ct:compile(DataDir ++ "P-RecordA1", + [Rules, {outdir,OutDir}]++Option), + ?line ok = asn1ct:compile(DataDir ++ "P-RecordA2", + [Rules, {outdir,OutDir}]++Option), + ?line ok = asn1ct:compile(DataDir ++ "P-RecordA3", + [Rules, {outdir,OutDir}]++Option). + + +cases(Erule,Variant) -> + MsgA1 = a1(), + ?line {ok,B1} = asn1_wrapper:encode('P-RecordA1','PersonnelRecord',MsgA1), + ?line {ok,MsgA1} = asn1_wrapper:decode('P-RecordA1','PersonnelRecord',B1), + io:format("compare_format(~p,B1) ->~p~nencval(a1,~p,binary) ->~p~n", + [Erule, + compare_format(Erule,B1), + Variant, + encval(a1,Variant,binary)]), + ?line true = (compare_format(Erule,B1) == encval(a1,Variant,binary)), + + MsgA2 = a2(), + ?line {ok,B2} = asn1_wrapper:encode('P-RecordA2','PersonnelRecord',MsgA2), + ?line {ok,MsgA2} = asn1_wrapper:decode('P-RecordA2','PersonnelRecord',B2), + io:format("compare_format(~p,B2) ->~p~nencval(a2,~p,binary) ->~p~n", + [Erule, + compare_format(Erule,B2), + Variant, + encval(a2,Variant,binary)]), + ?line true = (compare_format(Erule,B2) == encval(a2,Variant,binary)), + + MsgA3 = a3(), + ?line {ok,B3} = asn1_wrapper:encode('P-RecordA3','PersonnelRecord',MsgA3), + ?line {ok,MsgA3} = asn1_wrapper:decode('P-RecordA3','PersonnelRecord',B3), + io:format("compare_format(~p,B3) ->~p~nencval(a3,~p,binary) ->~p~n", + [Erule, + compare_format(Erule,B3), + Variant, + encval(a3,Variant,binary)]), + ?line true = (compare_format(Erule,B3) == encval(a3,Variant,binary)). + +compare_format(Erule,Val) when is_list(Val) -> + compare_format(Erule,list_to_binary(Val)); +%% compare_format(per,Val) -> +%% binary_to_list(Val); +compare_format(_,Val) -> + Val. + +a1() -> + {'PersonnelRecord', + {'Name',"John", "P", "Smith"}, + "Director", + 51, + "19710917", + {'Name', "Mary", "T", "Smith"}, + [{'ChildInformation', + {'Name', "Ralph", "T", "Smith"}, + "19571111"}, + {'ChildInformation', + {'Name', "Susan", "B", "Jones"}, + "19590717"}]}. + +a2() -> + a1(). + +a3() -> + {'PersonnelRecord', + {'Name',"John", "P", "Smith"}, + "Director", + 51, + "19710917", + {'Name', "Mary", "T", "Smith"}, + [{'ChildInformation', + {'Name', "Ralph", "T", "Smith"}, + "19571111", + asn1_NOVALUE}, + {'ChildInformation', + {'Name', "Susan", "B", "Jones"}, + "19590717", + female}]}. + +encval(An,Variant,Encoding) when Encoding == hex; Encoding == binary -> + Msg = encval(An,Variant), + encoding(Encoding,Msg). + +encval(a1,aligned) -> + "80044A6F 686E0150 05536D69 74680133 08446972 6563746F 72083139 37313039 3137044D 61727901 5405536D 69746802 0552616C 70680154 05536D69 74680831 39353731 31313105 53757361 6E014205 4A6F6E65 73083139 35393037 3137"; +encval(a1,unaligned) -> + "824ADFA3 700D005A 7B74F4D0 02661113 4F2CB8FA 6FE410C5 CB762C1C B16E0937 0F2F2035 0169EDD3 D340102D 2C3B3868 01A80B4F 6E9E9A02 18B96ADD 8B162C41 69F5E787 700C2059 5BF765E6 10C5CB57 2C1BB16E"; +encval(a2,aligned) -> + "864A6F68 6E501053 6D697468 01330844 69726563 746F7219 7109170C 4D617279 5410536D 69746802 1052616C 70685410 536D6974 68195711 11105375 73616E42 104A6F6E 65731959 0717"; +encval(a2,unaligned) -> + "865D51D2 888A5125 F1809984 44D3CB2E 3E9BF90C B8848B86 7396E8A8 8A5125F1 81089B93 D71AA229 4497C632 AE222222 985CE521 885D54C1 70CAC838 B8"; +encval(a3,aligned) -> + "40C04A6F 686E5008 536D6974 68000033 08446972 6563746F 72001971 0917034D 61727954 08536D69 74680100 52616C70 68540853 6D697468 00195711 11820053 7573616E 42084A6F 6E657300 19590717 010140"; +encval(a3,unaligned) -> + "40CBAA3A 5108A512 5F180330 889A7965 C7D37F20 CB8848B8 19CE5BA2 A114A24B E3011372 7AE35422 94497C61 95711118 22985CE5 21842EAA 60B832B2 0E2E0202 80". + +encoding(binary,Msg) -> + list_to_binary(bin(Msg)); +encoding(hex,Msg) -> + hex(Msg). + +bin(Msg) -> + HexList = hex(Msg), + Fun = fun([H1,H2|Rest],F) -> [(H1 bsl 4) + H2|F(Rest,F)];([],_) -> [] end, + Fun(HexList,Fun). + +hex(Msg) -> + [to_hex(X)||X <- Msg,X /= $ ]. + +to_hex(I) when I >= $0, I =< $9 -> + I-48; +to_hex(C) when C >= $A,C =< $F -> + C - 55. + +%% ex('EUTRA','BCCH-DL-SCH-Message',1) -> +%% {'BCCH-DL-SCH-Message', +%% {c1, +%% {systemInformation1, +%% {'SystemInformationBlockType1', +%% {'SystemInformationBlockType1_cellAccessRelatedInformation', +%% [{'SystemInformationBlockType1_cellAccessRelatedInformation_SOF', +%% {'PLMN-Identity'}, +%% true}, +%% {'SystemInformationBlockType1_cellAccessRelatedInformation_SOF', +%% {'PLMN-Identity'}, +%% false}, +%% {'SystemInformationBlockType1_cellAccessRelatedInformation_SOF', +%% {'PLMN-Identity'}, +%% true}], +%% {'TrackingAreaCode'}, +%% {'CellIdentity'}, +%% false, +%% true, +%% true, +%% true}, +%% {'SystemInformationBlockType1_cellSelectionInfo', +%% -50}, +%% 24, +%% [{'SystemInformationBlockType1_schedulinInformation_SOF', +%% {'SystemInformationBlockType1_schedulinInformation_SOF_si-MessageType'}, +%% ms320, +%% {'SystemInformationBlockType1_schedulinInformation_SOF_sib-MappingInfo'} +%% }], +%% 0 +%% } +%% } +%% } +%% }. + +%% eutra1(msg) -> +%% {'BCCH-BCH-Message',{'MasterInformationBlock',[0,1,0,1],[1,0,1,0],{'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}}; +%% eutra1(result) -> +%% <<90,80,0>>. + +%% eutra2(msg) -> +%% {'BCCH-DL-SCH-Message', +%% {c1, +%% {systemInformation1, +%% {'SystemInformationBlockType1', +%% {'SystemInformationBlockType1_cellAccessRelatedInformation', +%% [{'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true}, +%% {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},false}, +%% {'SystemInformationBlockType1_cellAccessRelatedInformation_plmn-IdentityList_SEQOF',{'PLMN-Identity'},true}], +%% {'TrackingAreaCode'}, +%% {'CellIdentity'}, +%% false, +%% true, +%% true, +%% true +%% }, +%% {'SystemInformationBlockType1_cellSelectionInfo',-50}, +%% 24, +%% [{'SystemInformationBlockType1_schedulinInformation_SEQOF', +%% {'SystemInformationBlockType1_schedulinInformation_SEQOF_si-MessageType'}, +%% ms320, +%% {'SystemInformationBlockType1_schedulinInformation_SEQOF_sib-MappingInfo'}}], +%% 0 +%% } +%% } +%% } +%% }; +%% eutra2(result) -> +%% %% 55 5C A5 E0 +%% <<85,92,165,224>>. + + + +%% compare([H|T1],[H|T2],Acc) -> +%% compare(T1,T2,[H|Acc]); +%% compare([],[],_Acc) -> +%% ok; +%% compare(L1,L2,Acc) -> +%% {miss_match,L1,L2,lists:reverse(Acc)}. + + |