%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2001-2016. All Rights Reserved. %% %% Licensed under the Apache License, Version 2.0 (the "License"); %% you may not use this file except in compliance with the License. %% You may obtain a copy of the License at %% %% http://www.apache.org/licenses/LICENSE-2.0 %% %% Unless required by applicable law or agreed to in writing, software %% distributed under the License is distributed on an "AS IS" BASIS, %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. %% See the License for the specific language governing permissions and %% limitations under the License. %% %% %CopyrightEnd% %% %% -module(testCompactBitString). -export([compact_bit_string/1, bit_string_unnamed/1,otp_4869/1, ticket_7734/1]). compact_bit_string(Rules) -> %%========================================================== %% Bs1 ::= BIT STRING %%========================================================== roundtrip('Bs1', 0, {0,<<>>}), roundtrip('Bs1', 4, {5,<<2#00100000>>}), roundtrip('Bs1', 15, {4,<<2#11110000>>}), roundtrip('Bs1', 255, {0,<<2#11111111>>}), roundtrip('Bs1', 256, {7,<<16#00,16#80>>}), roundtrip('Bs1', 257, {7,<<16#80,16#80>>}), roundtrip('Bs1', 444, {7,<<16#3D,16#80>>}), roundtrip('Bs1', 12345678901234567890, {0,<<75,80,248,215,49,149,42,213>>}), roundtrip('Bs1', [1,1,1,1,1,1,1,1], {0,<<255>>}), roundtrip('Bs1', [0,1,0,0,1,0], {2,<<16#48>>}), roundtrip('Bs1', [1,0,0,0,0,0,0,0,0], {7,<<16#80,0>>}), roundtrip('Bs1', [0,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1], {5,<<75,226,96>>}), case Rules of ber -> {ok,{4,<<73,32>>}} = 'PrimStrings':decode('Bs1', <<35,8,3,2,0,73,3,2,4,32>>), {ok,{7,<<234,156,0>>}} = 'PrimStrings':decode('Bs1', <<35,9,3,2,0,234,3,3,7,156,0>>), {ok,{4,<<73,32>>}} = 'PrimStrings':decode('Bs1', <<35,128,3,2,0,73,3,2,4,32,0,0>>), {ok,{7,<<234,156,0>>}} = 'PrimStrings':decode('Bs1', <<35,128,3,2,0,234,3,3,7,156,0,0,0>>); _ -> ok end, %% Test OTP-4200 roundtrip('Bs1', {0,<<0,0,1,1>>}), %%========================================================== %% Bs2 ::= BIT STRING {su(0), mo(1), tu(2), we(3), th(4), fr(5), sa(6) } (SIZE (7)) %%========================================================== roundtrip('Bs2', [mo,tu,fr]), roundtrip('Bs2', [0,1,1,0,0,1,0], [mo,tu,fr]), %%========================================================== %% Bs3 ::= BIT STRING {su(0), mo(1), tu(2), we(3), th(4), fr(5), sa(6) } (SIZE (1..7)) %%========================================================== roundtrip('Bs3', [mo,tu,fr]), roundtrip('Bs3', [0,1,1,0,0,1,0], [mo,tu,fr]), %%========================================================== %% BsPri ::= [PRIVATE 61] BIT STRING %%========================================================== roundtrip('BsPri', 45, {2,<<180>>}), roundtrip('BsPri', 211, {0,<<203>>}), case Rules of ber -> {ok,{5,<<75,226,96>>}} = 'PrimStrings':decode('BsPri', <<223,61,4,5,75,226,96>>), {ok,{5,<<75,226,96>>}} = 'PrimStrings':decode('BsPri', <<255,61,128,3,4,5,75,226,96,0,0>>), {ok,{5,<<75,226,96>>}} = 'PrimStrings':decode('BsPri', <<255,61,9,3,2,0,75,3,3,5,226,96>>), {ok,{5,<<75,226,96>>}} = 'PrimStrings':decode('BsPri', <<255,61,128,3,2,0,75,3,3,5,226,96,0,0>>), ok; _ -> ok end, %%========================================================== %% BsExpPri ::= [PRIVATE 61] EXPLICIT BIT STRING %%========================================================== roundtrip('BsExpPri', 45, {2,<<180>>}), roundtrip('BsExpPri', 211, {0,<<203>>}), case Rules of ber -> {ok,{5,<<75,226,96>>}} = 'PrimStrings':decode('BsExpPri', <<255,61,6,3,4,5,75,226,96>>); _ -> ok end, ok. ticket_7734(_) -> BS = {0,list_to_binary(lists:duplicate(128, 0))}, roundtrip('BS1024', BS). bit_string_unnamed(_Rules) -> roundtrip('TransportLayerAddress', [0,1,1,0], {4,<<96>>}). otp_4869(per) -> Val1 = {'IP',[0],{0,<<62,235,90,50,0,0,0,0,0,0,0,0,0,0,0,0>>},asn1_NOVALUE}, Val2 = {'IP',[0],[0,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,0,1,1,0, 1,0,0,0,1,1,0,0,1,0] ++ lists:duplicate(128 - 32, 0),asn1_NOVALUE}, {ok,Encoded} = 'Constraints':encode('IP', Val1), {ok,Encoded} = 'Constraints':encode('IP', Val2), ok; otp_4869(_) -> ok. roundtrip(Type, Val) -> roundtrip_1('PrimStrings', Type, Val, Val). roundtrip(Type, Val1, Val2) -> roundtrip_1('PrimStrings', Type, Val1, Val2). roundtrip_1(Mod, Type, In, Out) -> {ok,Encoded} = Mod:encode(Type, In), {ok,Out} = Mod:decode(Type, Encoded), %% Test that compact BIT STRINGs can be encoded. {ok,Encoded} = Mod:encode(Type, Out), ok.