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  import java.nio.ByteBuffer;
20  
21  import org.apache.asn1.ber.AbstractDecoderTestCase;
22  import org.apache.asn1.ber.BERDecoderState;
23  
24  
25  /***
26   * Performs simple primitive tlv tests.
27   *
28   * @author <a href="mailto:dev@directory.apache.org">
29   * Apache Directory Project</a>
30   * @version $Rev: 157644 $
31   */
32  public class SimplePrimitiveTLVTests extends AbstractDecoderTestCase
33  {
34  
35      /***
36       * @param arg0
37       */
38      public SimplePrimitiveTLVTests( String arg0 )
39      {
40          super( arg0 ) ;
41      }
42      
43      
44      public void testSingleSimpleTLV() throws Exception
45      {
46          // decode tag
47          Tuple tlv = decode( "01000001" ) ;
48          assertEquals( 1, tlv.id ) ;
49          assertEquals( 0, tlvList.size() ) ;
50          assertEquals( true, tlv.isPrimitive ) ;
51          assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
52          assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
53          
54          // decode length 
55          tlv = decode( "00000001" ) ;
56          assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
57          assertEquals( 1, tlv.length ) ;
58          
59          // decode value
60          tlv = decode( "01010101" ) ;
61          assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
62          assertEquals( 1, tlvList.size() ) ;
63          assertNotNull( tlv.valueChunk ) ;
64          assertEquals( 0x0055, 0x00ff & tlv.valueChunk.get( 0 ) ) ;
65      }
66  
67  
68      public void testMultipleSimpleTLV() throws Exception
69      {
70          // decode tag
71          Tuple tlv = decode( "01000001" ) ;
72          assertEquals( 1, tlv.id ) ;
73          assertEquals( 0, tlvList.size() ) ;
74          assertEquals( true, tlv.isPrimitive ) ;
75          assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
76          assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
77          
78          // decode length 
79          tlv = decode( "00000001" ) ;
80          assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
81          assertEquals( 1, tlv.length ) ;
82          
83          // decode value
84          tlv = decode( "01010101" ) ;
85          assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
86          assertEquals( 1, tlvList.size() ) ;
87          assertNotNull( tlv.valueChunk ) ;
88          assertEquals( 0x0055, 0x00ff & tlv.valueChunk.get( 0 ) ) ;
89  
90      
91          // decode tag
92          tlv = decode( "01000001" ) ;
93          assertEquals( 1, tlv.id ) ;
94          assertEquals( 1, tlvList.size() ) ;
95          assertEquals( true, tlv.isPrimitive ) ;
96          assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
97          assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
98          
99          // decode length 
100         tlv = decode( "00000001" ) ;
101         assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
102         assertEquals( 1, tlv.length ) ;
103         
104         // decode value
105         tlv = decode( "01010101" ) ;
106         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
107         assertEquals( 2, tlvList.size() ) ;
108         assertNotNull( tlv.valueChunk ) ;
109         assertEquals( 0x0055, 0x00ff & tlv.valueChunk.get( 0 ) ) ;
110 
111     
112         // decode tag
113         tlv = decode( "01000001" ) ;
114         assertEquals( 1, tlv.id ) ;
115         assertEquals( 2, tlvList.size() ) ;
116         assertEquals( true, tlv.isPrimitive ) ;
117         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
118         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
119         
120         // decode length 
121         tlv = decode( "00000001" ) ;
122         assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
123         assertEquals( 1, tlv.length ) ;
124         
125         // decode value
126         tlv = decode( "01010101" ) ;
127         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
128         assertEquals( 3, tlvList.size() ) ;
129         assertNotNull( tlv.valueChunk ) ;
130         assertEquals( 0x0055, 0x00ff & tlv.valueChunk.get( 0 ) ) ;
131     }
132 
133 
134     public void testSingleSimpleLongTLV() throws Exception
135     {
136         // decode tag
137         Tuple tlv = decode( "01000001" ) ;
138         assertEquals( 1, tlv.id ) ;
139         assertEquals( 0, tlvList.size() ) ;
140         assertEquals( true, tlv.isPrimitive ) ;
141         assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
142         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
143         
144         // decode length 
145         tlv = decode( "10000001" ) ;
146         assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
147         assertEquals( 0, tlv.length ) ;
148         
149         tlv = decode( "00000111" ) ;
150         assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
151         assertEquals( 7, tlv.length ) ;
152         
153         // decode value
154         tlv = decode( "01010101" + "01010101" + "01010101" + "01010101"
155                 + "01010101" + "01010101" + "01010101" ) ;
156         assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
157         assertEquals( 1, tlvList.size() ) ;
158         assertNotNull( tlv.valueChunk ) ;
159         assertEquals( 7, tlv.valueChunk.capacity() ) ;
160         
161         ByteBuffer value = tlv.valueChunk.duplicate() ;
162         for ( int ii = 0 ; ii < 7; ii++ )
163         {    
164             assertEquals( 0x0055, 0x00ff & value.get( ii ) ) ;
165         }
166     }
167 }