%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2004-2012. 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_undecoded_rest). -export([test/2]). -include_lib("test_server/include/test_server.hrl"). %% testing OTP-5104 test(Opts, Config) -> {ok,Msg} = asn1ct:value('P-Record', 'PersonnelRecord', [{i,?config(case_dir, Config)}]), Bytes0 = encode(Opts, 'PersonnelRecord', Msg), Bytes1 = iolist_to_binary([Bytes0, <<55,55,55>>]), case proplists:get_bool(undec_rest, Opts) of true -> {Msg,R} = decode(Opts, 'PersonnelRecord', Bytes1), case R of <<55,55,55>> -> ok; BStr when is_bitstring(BStr) -> PadLen = (8 - (bit_size(BStr) rem 8)) rem 8, <<0,55,55,55>> = <<0:PadLen, BStr/bitstring>> end; false -> Msg = decode(Opts, 'PersonnelRecord', Bytes1) end, ok. encode(Opts, T, V) -> M = 'P-Record', case proplists:get_bool(no_ok_wrapper, Opts) of false -> {ok,Enc} = M:encode(T, V), Enc; true -> Enc = M:encode(T, V), true = is_binary(Enc), Enc end. decode(Opts, T, E) -> M = 'P-Record', case {proplists:get_bool(no_ok_wrapper, Opts),M:decode(T, E)} of {false,{ok,Val}} -> Val; {false,{ok,Val,Rest}} -> {Val,Rest}; {true,Result} -> Result end.