1   /*
2    *   Copyright 2004 The Apache Software Foundation
3    *
4    *   Licensed under the Apache License, Version 2.0 (the "License");
5    *   you may not use this file except in compliance with the License.
6    *   You may obtain a copy of the License at
7    *
8    *       http://www.apache.org/licenses/LICENSE-2.0
9    *
10   *   Unless required by applicable law or agreed to in writing, software
11   *   distributed under the License is distributed on an "AS IS" BASIS,
12   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *   See the License for the specific language governing permissions and
14   *   limitations under the License.
15   *
16   */
17  package org.apache.asn1.ber ;
18  
19  
20  import org.apache.asn1.ber.AbstractDecoderTestCase;
21  import org.apache.asn1.ber.BERDecoderState;
22  
23  
24  /***
25   * Here we test simple 1 byte tag and length values to test the decoder's 
26   * ability to handle these most simple tlvs.
27   *
28   * @author <a href="mailto:dev@directory.apache.org">
29   * Apache Directory Project</a>
30   * @version $Rev: 157644 $
31   */
32  public class MultiByteTagTests extends AbstractDecoderTestCase
33  {
34      /*** precalculated left shift of 1 by 14 places */
35      private static final int BIT_13 = 1 << 14 ;
36      /*** precalculated left shift of 1 by 16 places */
37      private static final int BIT_15 = 1 << 16 ;
38      /*** precalculated left shift of 1 by 21 places */
39      private static final int BIT_20 = 1 << 21 ;
40      /*** precalculated left shift of 1 by 24 places */
41      private static final int BIT_23 = 1 << 24 ;
42      /*** precalculated left shift of 1 by 28 places */
43      private static final int BIT_27 = 1 << 28 ;
44      
45  
46      /***
47       * @param arg0
48       */
49      public MultiByteTagTests( String arg0 )
50      {
51          super( arg0 ) ;
52      }
53      
54      
55      public void testId31() throws Exception
56      {
57          Tuple tlv = decode( "01011111" ) ;
58          assertEquals( 0, tlv.id ) ;
59          assertEquals( 0, tlvList.size() ) ;
60          assertEquals( true, tlv.isPrimitive ) ;
61          assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
62          assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
63  
64          tlv = decode( "00011111" ) ;
65          assertEquals( 31, tlv.id ) ;
66          assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
67      }
68  
69  
70      public void testId100() throws Exception
71      {
72          Tuple tlv = decode( "01011111" ) ;
73          assertEquals( 0, tlv.id ) ;
74          assertEquals( 0, tlvList.size() ) ;
75          assertEquals( true, tlv.isPrimitive ) ;
76          assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
77          assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
78  
79          tlv = decode( "01100100" ) ;
80          assertEquals( 100, tlv.id ) ;
81          assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
82      }
83  
84  
85      public void testId127() throws Exception
86      {
87          Tuple tlv = decode( "01011111" ) ;
88          assertEquals( 0, tlv.id ) ;
89          assertEquals( 0, tlvList.size() ) ;
90          assertEquals( true, tlv.isPrimitive ) ;
91          assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
92          assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
93  
94          tlv = decode( "01111111" ) ;
95          assertEquals( 127, tlv.id ) ;
96          assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
97      }
98  
99  
100     public void testId128() throws Exception
101     {
102         Tuple tlv = decode( "01011111" ) ;
103         assertEquals( 0, tlv.id ) ;
104         assertEquals( 0, tlvList.size() ) ;
105         assertEquals( true, tlv.isPrimitive ) ;
106         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
107         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
108 
109         tlv = decode( "10000000" ) ;
110         assertEquals( 0, tlv.id ) ;
111         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
112 
113         tlv = decode( "00000001" ) ;
114         assertEquals( 1, tlv.id ) ;
115         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
116     }
117 
118 
119     public void testId129() throws Exception
120     {
121         Tuple tlv = decode( "01011111" ) ;
122         assertEquals( 0, tlv.id ) ;
123         assertEquals( 0, tlvList.size() ) ;
124         assertEquals( true, tlv.isPrimitive ) ;
125         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
126         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
127 
128         tlv = decode( "10000001" ) ;
129         assertEquals( 0, tlv.id ) ;
130         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
131 
132         tlv = decode( "00000001" ) ;
133         assertEquals( 129, tlv.id ) ;
134         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
135     }
136 
137 
138 
139 
140     public void testIdShift14() throws Exception
141     {
142         Tuple tlv = decode( "01011111" ) ;
143         assertEquals( 0, tlv.id ) ;
144         assertEquals( 0, tlvList.size() ) ;
145         assertEquals( true, tlv.isPrimitive ) ;
146         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
147         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
148 
149         tlv = decode( "10000001" ) ;
150         assertEquals( 0, tlv.id ) ;
151         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
152 
153         tlv = decode( "10000000" ) ;
154         assertEquals( 0, tlv.id ) ;
155         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
156 
157         tlv = decode( "00000000" ) ;
158         assertEquals( BIT_13, tlv.id ) ;
159         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
160     }
161 
162 
163     public void testIdShift14Minus1() throws Exception
164     {
165         Tuple tlv = decode( "01011111" ) ;
166         assertEquals( 0, tlv.id ) ;
167         assertEquals( 0, tlvList.size() ) ;
168         assertEquals( true, tlv.isPrimitive ) ;
169         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
170         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
171 
172         tlv = decode( "11111111" ) ;
173         assertEquals( 0, tlv.id ) ;
174         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
175 
176         tlv = decode( "01111111" ) ;
177         assertEquals( BIT_13 - 1, tlv.id ) ;
178         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
179     }
180 
181 
182     public void testIdShift14Plus1() throws Exception
183     {
184         Tuple tlv = decode( "01011111" ) ;
185         assertEquals( 0, tlv.id ) ;
186         assertEquals( 0, tlvList.size() ) ;
187         assertEquals( true, tlv.isPrimitive ) ;
188         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
189         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
190 
191         tlv = decode( "10000001" ) ;
192         assertEquals( 0, tlv.id ) ;
193         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
194 
195         tlv = decode( "10000000" ) ;
196         assertEquals( 0, tlv.id ) ;
197         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
198 
199         tlv = decode( "00000001" ) ;
200         assertEquals( BIT_13 + 1, tlv.id ) ;
201         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
202     }
203 
204     
205     public void testIdShift21Minus1() throws Exception
206     {
207         Tuple tlv = decode( "01011111" ) ;
208         assertEquals( 0, tlv.id ) ;
209         assertEquals( 0, tlvList.size() ) ;
210         assertEquals( true, tlv.isPrimitive ) ;
211         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
212         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
213 
214         tlv = decode( "11111111" ) ;
215         assertEquals( 0, tlv.id ) ;
216         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
217 
218         tlv = decode( "11111111" ) ;
219         assertEquals( 0, tlv.id ) ;
220         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
221 
222         tlv = decode( "01111111" ) ;
223         assertEquals( BIT_20 - 1, tlv.id ) ;
224         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
225     }
226 }