You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2004/03/14 23:02:20 UTC
svn commit: rev 9470 - in incubator/directory/snickers/branches/refactoring: . ber ber/src/java/org/apache/snickers ber/src/java/org/apache/snickers/asn ber/src/java/org/apache/snickers/ber ber/src/test/org/apache/snickers ber/src/test/org/apache/snickers/asn ber/src/test/org/apache/snickers/ber ber/xdocs ber/xdocs/empty codec-stateful codec-stateful/src/java/org/apache/commons/codec/stateful
Author: akarasulu
Date: Sun Mar 14 14:02:18 2004
New Revision: 9470
Added:
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TagDecoder.java (contents, props changed)
Modified:
incubator/directory/snickers/branches/refactoring/ber/berlib.properties (props changed)
incubator/directory/snickers/branches/refactoring/ber/project.properties (props changed)
incubator/directory/snickers/branches/refactoring/ber/project.xml (props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/SnickersDecoder.java (props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNDecoder.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNFactory.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BERDecoderUtils.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BasicHandler.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BitString.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/Primitive.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLV.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVHandler.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVParsingUtility.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/AbstractDecoderTestCase.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoder.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallback.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallbackAdapter.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderMonitor.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderState.java (props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERUtils.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/DefaultMutableTupleNode.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/IntStack.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/MutableTupleNode.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/Tuple.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleNode.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeAnalyzer.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TypeClass.java (props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/SnickersDecoderTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/asn/TestBitString.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/AbstractDecoderTestCaseTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderCallbackAdapterTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderStateTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERUtilsTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ConstructedTLVTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/DefaultMutableTupleNodeTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/EncodeDecodeTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/IntStackTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/LdapMessageTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteLengthTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ObjectVersePrimitiveTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SimplePrimitiveTLVTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteLengthTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteTagTests.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTreeDecoderTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TypeClassTest.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/todo.txt (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/xdocs/design.xml (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/xdocs/empty/index.xml (contents, props changed)
incubator/directory/snickers/branches/refactoring/ber/xdocs/empty/navigation.xml (props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/project.properties (props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/project.xml (props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/CallbackHistory.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderCallback.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitor.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitorAdapter.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/StatefulDecoder.java (contents, props changed)
incubator/directory/snickers/branches/refactoring/project.xml (contents, props changed)
Log:
set some svn properties for eol and keywords
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNDecoder.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNDecoder.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNDecoder.java Sun Mar 14 14:02:18 2004
@@ -1,118 +1,118 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-
-package org.apache.snickers.asn;
-
-/**
- * @author Wes McKean
- *
- * Basic interface for decoding TLVs. The bytes
- * are read in as ints, due to the casting limitation of
- * bytes (-1=0xFF), and then passed to the decoder
- * for decoding.
- */
-public interface ASNDecoder {
-
- /**
- * Decode a boolean from an array of bytes into a Java
- * Boolean object
- *
- * @param value The boolean encoded as an array of ints(bytes)
- * @return a Boolean (decoded)
- */
- Boolean decodeBoolean( int[] value );
-
- /**
- * Decodes an Integer from an array of ints (bytes)
- *
- * @param value The integer, encoded in an array of ints(bytes)
- * @return an Integer (decoded)
- */
- Integer decodeInteger( int[] value );
-
- /**
- * Decodes a <code>BitString</code> from the an array of
- * ints (bytes) into which it has been encoded.
- *
- * @param value the int (byte) encoded <code>BitString</code>
- * @return The decoded <code>BitString</code>
- */
- BitString decodeBitString( int[] value );
-
- /**
- * Decodes a <code>OctetString</code> from the an array of
- * ints (bytes) into which it has been encoded.
- *
- * @param value the int (byte) encoded <code>OctetString</code>
- * @return The decoded <code>OctetString</code>
- */
- String decodeOctetString( int[] value );
-
- /**
- * Decodes a <code>null</code> value. Based on the way our
- * parser is developing, it is unlikely that this will
- * ever be used. So it is being included as a place
- * holder.
- *
- * @param value the encoded null value (N/A)
- */
- void decodeNull( int[] value );
-
- /**
- * Decodes an object identifier from the array of bytes
- * into a String value.
- *
- * @param value the byte encoded object identifier
- * @return a String representation of the byte identifier
- */
- String decodeObjectIdentifier( int[] value );
-
- Integer decodeSequence( int[] value );
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+
+package org.apache.snickers.asn;
+
+/**
+ * @author Wes McKean
+ *
+ * Basic interface for decoding TLVs. The bytes
+ * are read in as ints, due to the casting limitation of
+ * bytes (-1=0xFF), and then passed to the decoder
+ * for decoding.
+ */
+public interface ASNDecoder {
+
+ /**
+ * Decode a boolean from an array of bytes into a Java
+ * Boolean object
+ *
+ * @param value The boolean encoded as an array of ints(bytes)
+ * @return a Boolean (decoded)
+ */
+ Boolean decodeBoolean( int[] value );
+
+ /**
+ * Decodes an Integer from an array of ints (bytes)
+ *
+ * @param value The integer, encoded in an array of ints(bytes)
+ * @return an Integer (decoded)
+ */
+ Integer decodeInteger( int[] value );
+
+ /**
+ * Decodes a <code>BitString</code> from the an array of
+ * ints (bytes) into which it has been encoded.
+ *
+ * @param value the int (byte) encoded <code>BitString</code>
+ * @return The decoded <code>BitString</code>
+ */
+ BitString decodeBitString( int[] value );
+
+ /**
+ * Decodes a <code>OctetString</code> from the an array of
+ * ints (bytes) into which it has been encoded.
+ *
+ * @param value the int (byte) encoded <code>OctetString</code>
+ * @return The decoded <code>OctetString</code>
+ */
+ String decodeOctetString( int[] value );
+
+ /**
+ * Decodes a <code>null</code> value. Based on the way our
+ * parser is developing, it is unlikely that this will
+ * ever be used. So it is being included as a place
+ * holder.
+ *
+ * @param value the encoded null value (N/A)
+ */
+ void decodeNull( int[] value );
+
+ /**
+ * Decodes an object identifier from the array of bytes
+ * into a String value.
+ *
+ * @param value the byte encoded object identifier
+ * @return a String representation of the byte identifier
+ */
+ String decodeObjectIdentifier( int[] value );
+
+ Integer decodeSequence( int[] value );
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNFactory.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNFactory.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/ASNFactory.java Sun Mar 14 14:02:18 2004
@@ -1,90 +1,90 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-package org.apache.snickers.asn;
-
-
-/**
- * This factory is responsible for retreiving the proper
- * encoder or decoder per request. This has been put into
- * a factory in case we want singleton instances of some
- * codecs, and per instance use of others.
- *
- * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
- * @author $Author$
- * @version $Rev$
- */
-public class ASNFactory {
-
- /** Singleton instance of our BERDecoder */
- private static final BERDecoderUtils berDecoder = new BERDecoderUtils();
-
- /**
- * Basic constructor for ASNFactory
- */
- public ASNFactory() {
- super();
- }
-
- /**
- * Retrieve a decoder based on the encoding requested. We put
- * this here so that we can have singleton instances of some
- * decoders, and others can return a new object every time.
- *
- * @param encoding The encoding, current BER is only supported
- * @return the decoder requested, or <code>null<code> if the
- * requested encoding is not supported.
- */
- public static ASNDecoder getDecoder( String encoding ) {
- if( encoding.equals("BER") )
- return berDecoder;
-
- return null;
- }
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.snickers.asn;
+
+
+/**
+ * This factory is responsible for retreiving the proper
+ * encoder or decoder per request. This has been put into
+ * a factory in case we want singleton instances of some
+ * codecs, and per instance use of others.
+ *
+ * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
+ * @author $Author$
+ * @version $Rev$
+ */
+public class ASNFactory {
+
+ /** Singleton instance of our BERDecoder */
+ private static final BERDecoderUtils berDecoder = new BERDecoderUtils();
+
+ /**
+ * Basic constructor for ASNFactory
+ */
+ public ASNFactory() {
+ super();
+ }
+
+ /**
+ * Retrieve a decoder based on the encoding requested. We put
+ * this here so that we can have singleton instances of some
+ * decoders, and others can return a new object every time.
+ *
+ * @param encoding The encoding, current BER is only supported
+ * @return the decoder requested, or <code>null<code> if the
+ * requested encoding is not supported.
+ */
+ public static ASNDecoder getDecoder( String encoding ) {
+ if( encoding.equals("BER") )
+ return berDecoder;
+
+ return null;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BERDecoderUtils.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BERDecoderUtils.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BERDecoderUtils.java Sun Mar 14 14:02:18 2004
@@ -1,155 +1,155 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.asn;
-
-
-
-/**
- * Implements the basic BER decoder used by the ASN
- * compiler package. The decoder is primarily responsible
- * for converting streams of bytes into ASN.1 primatives.
- *
- * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
- * @author $Author$
- * @version $Rev$
- */
-public class BERDecoderUtils implements ASNDecoder {
-
- /**
- * The basic decoder constructor
- */
- public BERDecoderUtils() {
- super();
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeBoolean(int[])
- */
- public Boolean decodeBoolean( int[] value ) {
- Boolean result = null;
-
- if( value[0] > (byte)0 )
- result = new Boolean(true);
- else
- result = new Boolean( false );
-
- return result;
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeInteger(int[])
- */
- public Integer decodeInteger( int[] value ) {
- int result = 0;
-
- for( int i = 0; i < value.length; i++ ) {
- result = ( result << 8 ) | (int)value[i];
- }
-
- return new Integer( result );
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeBitString(int[])
- */
- public BitString decodeBitString( int[] value ) {
- BitString result = new BitString( value, value.length );
- return result;
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeOctetString(int[])
- */
- public String decodeOctetString( int[] value ) {
- byte[] bytes = new byte[value.length];
-
- for( int i = 0; i < value.length; i++ )
- bytes[i] = (byte)value[i];
-
- return new String( bytes );
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeNull(int[])
- */
- public void decodeNull(int[] value) {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeObjectIdentifier(int[])
- */
- public String decodeObjectIdentifier(int[] value) {
- StringBuffer sb = new StringBuffer();
- int length = value.length;
- int index = 0;
- int aByte;
-
- // The first byte is special, so we have to handle it outside our
- // our loop where we process it below. Special thanks to the folks
- // at Cryptix, on SourceForge for helping me understand how to do
- // this.
-
- if( length > 1 ) {
- // Isolate t first byte
- aByte = value[index++] & 0xFF;
- int firstValue = 0;
-
- if( aByte >= 40 && aByte < 80 ) {
- firstValue = 1;
- }
- else if( aByte >= 80 ) {
- firstValue = 2;
- }
-
- int secondValue = aByte - ( firstValue * 40 );
- sb.append( firstValue );
- sb.append( '.' );
- sb.append( secondValue );
- }
-
- // Now process the rest of the OID ints. Each individual
- // integer is part of the value, and we keep processing it
- // while the more bit is set.
- int subId = 0;
- boolean more;
-
- for( int i = index; i < length; i++ ) {
- more = ((value[i] & 0x80) != 0 );
- aByte = value[i] & 0x7F;
- subId = (subId << 7) | aByte;
-
- if( !more ) {
- sb.append('.');
- sb.append( subId );
- subId = 0;
- }
- }
-
- String result = sb.toString();
- return (result);
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.asn.ASNDecoder#decodeSequence(int[])
- */
- public Integer decodeSequence(int[] value) {
- // TODO Auto-generated method stub
- return null;
- }
-
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.asn;
+
+
+
+/**
+ * Implements the basic BER decoder used by the ASN
+ * compiler package. The decoder is primarily responsible
+ * for converting streams of bytes into ASN.1 primatives.
+ *
+ * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
+ * @author $Author$
+ * @version $Rev$
+ */
+public class BERDecoderUtils implements ASNDecoder {
+
+ /**
+ * The basic decoder constructor
+ */
+ public BERDecoderUtils() {
+ super();
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeBoolean(int[])
+ */
+ public Boolean decodeBoolean( int[] value ) {
+ Boolean result = null;
+
+ if( value[0] > (byte)0 )
+ result = new Boolean(true);
+ else
+ result = new Boolean( false );
+
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeInteger(int[])
+ */
+ public Integer decodeInteger( int[] value ) {
+ int result = 0;
+
+ for( int i = 0; i < value.length; i++ ) {
+ result = ( result << 8 ) | (int)value[i];
+ }
+
+ return new Integer( result );
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeBitString(int[])
+ */
+ public BitString decodeBitString( int[] value ) {
+ BitString result = new BitString( value, value.length );
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeOctetString(int[])
+ */
+ public String decodeOctetString( int[] value ) {
+ byte[] bytes = new byte[value.length];
+
+ for( int i = 0; i < value.length; i++ )
+ bytes[i] = (byte)value[i];
+
+ return new String( bytes );
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeNull(int[])
+ */
+ public void decodeNull(int[] value) {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeObjectIdentifier(int[])
+ */
+ public String decodeObjectIdentifier(int[] value) {
+ StringBuffer sb = new StringBuffer();
+ int length = value.length;
+ int index = 0;
+ int aByte;
+
+ // The first byte is special, so we have to handle it outside our
+ // our loop where we process it below. Special thanks to the folks
+ // at Cryptix, on SourceForge for helping me understand how to do
+ // this.
+
+ if( length > 1 ) {
+ // Isolate t first byte
+ aByte = value[index++] & 0xFF;
+ int firstValue = 0;
+
+ if( aByte >= 40 && aByte < 80 ) {
+ firstValue = 1;
+ }
+ else if( aByte >= 80 ) {
+ firstValue = 2;
+ }
+
+ int secondValue = aByte - ( firstValue * 40 );
+ sb.append( firstValue );
+ sb.append( '.' );
+ sb.append( secondValue );
+ }
+
+ // Now process the rest of the OID ints. Each individual
+ // integer is part of the value, and we keep processing it
+ // while the more bit is set.
+ int subId = 0;
+ boolean more;
+
+ for( int i = index; i < length; i++ ) {
+ more = ((value[i] & 0x80) != 0 );
+ aByte = value[i] & 0x7F;
+ subId = (subId << 7) | aByte;
+
+ if( !more ) {
+ sb.append('.');
+ sb.append( subId );
+ subId = 0;
+ }
+ }
+
+ String result = sb.toString();
+ return (result);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.asn.ASNDecoder#decodeSequence(int[])
+ */
+ public Integer decodeSequence(int[] value) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BasicHandler.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BasicHandler.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BasicHandler.java Sun Mar 14 14:02:18 2004
@@ -1,125 +1,125 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-
-package org.apache.snickers.asn;
-
-import org.apache.commons.codec.DecoderException;
-import org.apache.snickers.ber.TypeClass;
-
-/**
- * Basic TLV Handler. Really doesn't do anything, but does
- * provide the basic methods for decoding primatives
- *
- * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
- * @author $Author$
- * @version $Rev$
- */
-public class BasicHandler implements TLVHandler {
-
- /** The decoder to be used by this handler */
- protected ASNDecoder decoder = null;
-
- /**
- * The simplest constructor for a BasicHander.
- *
- * @param encoding the encoding used by our codec.
- */
- public BasicHandler( String encoding ) {
- super();
- decoder = ASNFactory.getDecoder( encoding );
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TLVHandler#beginTag(org.apache.snickers.ber.TypeClass, int, boolean)
- */
- public void beginTag(TypeClass typeClass, int id, boolean isPrimative)
- throws DecoderException {
- /*
- * do nothing
- */
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TLVHandler#endTag(org.apache.snickers.ber.TypeClass, int)
- */
- public void endTag(TypeClass typeClass, int id) throws DecoderException {
- /*
- * do nothing
- */
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TLVHandler#length(org.apache.snickers.ber.TypeClass, int, int)
- */
- public void length(TypeClass typeClass, int id, int length) throws DecoderException {
- /*
- * do nothing
- */
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TLVHandler#data(org.apache.snickers.ber.TypeClass, int, byte[])
- */
- public void data(TypeClass typeClass, int id, byte[] data) throws DecoderException {
- /*
- * do nothing
- */
- }
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TLVHandler#received(org.apache.snickers.ber.TypeClass, int, org.apache.snickers.ber.TLV)
- */
- public void received(TypeClass typeClass, int id, TLV tlv) throws DecoderException {
- /*
- * do nothing
- */
- }
-
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+
+package org.apache.snickers.asn;
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.snickers.ber.TypeClass;
+
+/**
+ * Basic TLV Handler. Really doesn't do anything, but does
+ * provide the basic methods for decoding primatives
+ *
+ * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
+ * @author $Author$
+ * @version $Rev$
+ */
+public class BasicHandler implements TLVHandler {
+
+ /** The decoder to be used by this handler */
+ protected ASNDecoder decoder = null;
+
+ /**
+ * The simplest constructor for a BasicHander.
+ *
+ * @param encoding the encoding used by our codec.
+ */
+ public BasicHandler( String encoding ) {
+ super();
+ decoder = ASNFactory.getDecoder( encoding );
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TLVHandler#beginTag(org.apache.snickers.ber.TypeClass, int, boolean)
+ */
+ public void beginTag(TypeClass typeClass, int id, boolean isPrimative)
+ throws DecoderException {
+ /*
+ * do nothing
+ */
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TLVHandler#endTag(org.apache.snickers.ber.TypeClass, int)
+ */
+ public void endTag(TypeClass typeClass, int id) throws DecoderException {
+ /*
+ * do nothing
+ */
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TLVHandler#length(org.apache.snickers.ber.TypeClass, int, int)
+ */
+ public void length(TypeClass typeClass, int id, int length) throws DecoderException {
+ /*
+ * do nothing
+ */
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TLVHandler#data(org.apache.snickers.ber.TypeClass, int, byte[])
+ */
+ public void data(TypeClass typeClass, int id, byte[] data) throws DecoderException {
+ /*
+ * do nothing
+ */
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TLVHandler#received(org.apache.snickers.ber.TypeClass, int, org.apache.snickers.ber.TLV)
+ */
+ public void received(TypeClass typeClass, int id, TLV tlv) throws DecoderException {
+ /*
+ * do nothing
+ */
+ }
+
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BitString.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BitString.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/BitString.java Sun Mar 14 14:02:18 2004
@@ -1,189 +1,189 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-
-package org.apache.snickers.asn ;
-
-
-import java.util.BitSet ;
-
-
-/**
- * @author Wes McKean
- *
- * Encapsulates the basic functionality of a bit string
- */
-public class BitString extends BitSet {
-
- private static final int[] bitflags = {
- (1 << 0 ),
- (1 << 1 ),
- (1 << 2 ),
- (1 << 3 ),
- (1 << 4 ),
- (1 << 5 ),
- (1 << 6 ),
- (1 << 7 ),
- (1 << 8 ),
- (1 << 9 ),
- (1 << 10 ),
- (1 << 11 ),
- (1 << 12 ),
- (1 << 13 ),
- (1 << 14 ),
- (1 << 15 ),
- (1 << 16 ),
- (1 << 17 ),
- (1 << 18 ),
- (1 << 19 ),
- (1 << 20 ),
- (1 << 21 ),
- (1 << 22 ),
- (1 << 23 ),
- (1 << 24 ),
- (1 << 25 ),
- (1 << 26 ),
- (1 << 27 ),
- (1 << 28 ),
- (1 << 29 ),
- (1 << 30 ),
- (1 << 31 )
- };
-
- /**
- * The basic constructor for a BitString
- */
- public BitString( int[] bits, int numbits ) {
- super(numbits);
-
- int index = 0;
-
- for( int i = 0; i < bits.length && index < numbits; i++ ) {
- for( int j = 0; j < 32 && index < numbits; j++ ) {
- this.set(index++, ((bits[i] & bitflags[j]) != 0) );
- }
- }
- }
-
- /**
- * Constuct a BitString from an existing BitSet. Since
- * BitString inherits BitSet, this will also work for
- * BitStrings as well.
- *
- * @param bitSet the bit set containing our data
- */
- public BitString( BitSet bitSet ) {
- super( bitSet.length() );
-
- for( int i = 0; i < bitSet.length(); i++ ) {
- this.set(i, bitSet.get(i));
- }
- }
-
- /**
- * Performs a binary and on the passed in BitString
- *
- * @param value the BitString to and against this one
- * @return a new BitString of the combined values. Please
- * note that the result will have the length of
- * the largest BitString.
- */
- public BitString and( BitString value ) {
- BitSet bt = (BitSet)this.clone();
- bt.and( value );
- return new BitString( bt );
- }
-
- /**
- * Performs a binary or on the passed in BitString
- *
- * @param value the BitString to or against this one
- * @return a new BitString of the combined values. Please
- * note that the result will have the length of
- * the largest BitString.
- */
- public BitString or( BitString value ) {
- BitSet bt = (BitSet)this.clone();
- bt.or( value );
- return new BitString( bt );
- }
-
- /**
- * Performs a binary xor on the passed in BitString
- *
- * @param value the BitString to xor against this one
- * @return a new BitString of the combined values. Please
- * note that the result will have the length of
- * the largest BitString.
- */
- public BitString xor( BitString value ) {
- BitSet bt = (BitSet)this.clone();
- bt.xor( value );
- return new BitString( bt );
- }
-
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- public String toString() {
- StringBuffer sb = new StringBuffer();
-
- for( int i = length()-1; i >= 0; i-- ) {
- if( super.get(i) ) {
- sb.append("1");
- }
- else {
- sb.append("0");
- }
- }
-
- return sb.toString();
- }
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+
+package org.apache.snickers.asn ;
+
+
+import java.util.BitSet ;
+
+
+/**
+ * @author Wes McKean
+ *
+ * Encapsulates the basic functionality of a bit string
+ */
+public class BitString extends BitSet {
+
+ private static final int[] bitflags = {
+ (1 << 0 ),
+ (1 << 1 ),
+ (1 << 2 ),
+ (1 << 3 ),
+ (1 << 4 ),
+ (1 << 5 ),
+ (1 << 6 ),
+ (1 << 7 ),
+ (1 << 8 ),
+ (1 << 9 ),
+ (1 << 10 ),
+ (1 << 11 ),
+ (1 << 12 ),
+ (1 << 13 ),
+ (1 << 14 ),
+ (1 << 15 ),
+ (1 << 16 ),
+ (1 << 17 ),
+ (1 << 18 ),
+ (1 << 19 ),
+ (1 << 20 ),
+ (1 << 21 ),
+ (1 << 22 ),
+ (1 << 23 ),
+ (1 << 24 ),
+ (1 << 25 ),
+ (1 << 26 ),
+ (1 << 27 ),
+ (1 << 28 ),
+ (1 << 29 ),
+ (1 << 30 ),
+ (1 << 31 )
+ };
+
+ /**
+ * The basic constructor for a BitString
+ */
+ public BitString( int[] bits, int numbits ) {
+ super(numbits);
+
+ int index = 0;
+
+ for( int i = 0; i < bits.length && index < numbits; i++ ) {
+ for( int j = 0; j < 32 && index < numbits; j++ ) {
+ this.set(index++, ((bits[i] & bitflags[j]) != 0) );
+ }
+ }
+ }
+
+ /**
+ * Constuct a BitString from an existing BitSet. Since
+ * BitString inherits BitSet, this will also work for
+ * BitStrings as well.
+ *
+ * @param bitSet the bit set containing our data
+ */
+ public BitString( BitSet bitSet ) {
+ super( bitSet.length() );
+
+ for( int i = 0; i < bitSet.length(); i++ ) {
+ this.set(i, bitSet.get(i));
+ }
+ }
+
+ /**
+ * Performs a binary and on the passed in BitString
+ *
+ * @param value the BitString to and against this one
+ * @return a new BitString of the combined values. Please
+ * note that the result will have the length of
+ * the largest BitString.
+ */
+ public BitString and( BitString value ) {
+ BitSet bt = (BitSet)this.clone();
+ bt.and( value );
+ return new BitString( bt );
+ }
+
+ /**
+ * Performs a binary or on the passed in BitString
+ *
+ * @param value the BitString to or against this one
+ * @return a new BitString of the combined values. Please
+ * note that the result will have the length of
+ * the largest BitString.
+ */
+ public BitString or( BitString value ) {
+ BitSet bt = (BitSet)this.clone();
+ bt.or( value );
+ return new BitString( bt );
+ }
+
+ /**
+ * Performs a binary xor on the passed in BitString
+ *
+ * @param value the BitString to xor against this one
+ * @return a new BitString of the combined values. Please
+ * note that the result will have the length of
+ * the largest BitString.
+ */
+ public BitString xor( BitString value ) {
+ BitSet bt = (BitSet)this.clone();
+ bt.xor( value );
+ return new BitString( bt );
+ }
+
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+
+ for( int i = length()-1; i >= 0; i-- ) {
+ if( super.get(i) ) {
+ sb.append("1");
+ }
+ else {
+ sb.append("0");
+ }
+ }
+
+ return sb.toString();
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/Primitive.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/Primitive.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/Primitive.java Sun Mar 14 14:02:18 2004
@@ -1,68 +1,68 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-
-package org.apache.snickers.asn;
-
-/**
- * Tag values for primitives
- *
- * @author Wes McKean
- * @author $Author$
- * @version $Rev$
- */
-public interface Primitive {
- public final int BOOLEAN = 1;
- public final int INTEGER = 2;
- public final int BITSTRING = 3;
- public final int OCTETSTRING = 4;
- public final int NULL = 5;
- public final int OBJECTIDENTIFIER = 6;
- public final int ENUMERATION = 10;
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+
+package org.apache.snickers.asn;
+
+/**
+ * Tag values for primitives
+ *
+ * @author Wes McKean
+ * @author $Author: akarasulu $
+ * @version $Rev$
+ */
+public interface Primitive {
+ public final int BOOLEAN = 1;
+ public final int INTEGER = 2;
+ public final int BITSTRING = 3;
+ public final int OCTETSTRING = 4;
+ public final int NULL = 5;
+ public final int OBJECTIDENTIFIER = 6;
+ public final int ENUMERATION = 10;
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLV.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLV.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLV.java Sun Mar 14 14:02:18 2004
@@ -1,269 +1,269 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-package org.apache.snickers.asn;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import org.apache.commons.codec.binary.Binary;
-import org.apache.snickers.ber.BERUtils;
-import org.apache.snickers.ber.TypeClass;
-
-/**
- * Basic TLV structure consisting of:
- *
- * Tag
- * Length
- * Value
- *
- * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
- * @author $Author$
- * @version $Rev$
- */
-public class TLV {
-
- /** The tag for encoded attribute */
- private int tag;
-
- /** The length of the value portion of our encoded attribute */
- private int length;
-
- /** The value of this encoded attribute */
- byte[] value = null;
-
- /**
- * The TLV children of this TLV. This occurs when the V portion
- * of a TLV is constructed, that is, the V portion is made up of
- * more TLVs.
- */
- ArrayList children = null;
-
- /**
- * Empty constructor
- */
- public TLV() {
- super();
-
- tag = 0;
- length = 0;
- }
-
- /**
- * Constructor for a TLV with specified values
- *
- * @param tag the tag for this TLV
- * @param length the length of the value
- * @param value the bytes representing the encoded value
- */
- public TLV( int tag, int length, byte[] value ) {
- this.tag = tag;
- this.length = length;
- this.value = new byte[ value.length ];
- System.arraycopy(value, 0, this.value, 0, value.length );
- }
-
- /**
- * Constructor for a TLV with specified values
- *
- * @param tag the tag for this TLV
- * @param length the length of the value
- * @param value the bytes representing the encoded value
- * @param children a collection of TLVs comprising the children
- * of this TLV.
- */
- public TLV( int tag, int length, byte[] value, Collection children ) {
- this.tag = tag;
- this.length = length;
- this.value = new byte[ value.length ];
- System.arraycopy(value, 0, this.value, 0, value.length );
-
- this.children = new ArrayList();
- this.children.addAll( children );
- }
-
- /**
- * Retrieves the tag value for this TLV
- *
- * @return the tag, an int value for this TLV
- */
- public int getTag() {
- return tag;
- }
-
- /**
- * Set the tag value associated with a TLV
- *
- * @param tag the new tag, an int, for this TLV
- */
- public void setTag( int tag ) {
- this.tag = tag;
- }
-
- /**
- * Return the length of the V portion of this TLV
- *
- * @return an integer representing the length
- */
- public int getLength() {
- return length;
- }
-
- /**
- * Set the length portion of this TLV
- *
- * @param length an integer representation of the length
- */
- public void setLength( int length ) {
- this.length = length;
- }
-
- /**
- * Return the value portion of this TLV
- *
- * @return a byte array of the encoded value
- */
- public byte[] getValue() {
- return value;
- }
-
- /**
- * Set the encoded value of this TLV
- *
- * @param value the byte array of the encoded value
- */
- public void setValue( byte[] value ) {
- this.value = new byte[ value.length ];
- System.arraycopy(value, 0, this.value, 0, value.length );
- }
-
- /**
- * Return the child TLVs of this TLV
- *
- * @return a collection of TLVs
- */
- public Collection getChildren() {
- return children;
- }
-
- /**
- * Sets the children associated with this TLV
- *
- * @param children the child TLVs to associate with this TLV
- */
- public void setChildren(Collection children) {
- this.children = new ArrayList();
- this.children.addAll( children );
- }
-
- /**
- * Return the <code>TypeClass</code> associated with this TLV
- *
- * @return the type class
- */
- public TypeClass getTypeClass() {
- return BERUtils.getTypeClass( (byte) tag );
- }
-
- /**
- * Return the unique ID of this TLV as specified in the ASN.1
- * grammar. Not all TLVs will have valid ids. Some TLVs are
- * just expected!
- *
- * @return the id of this encoded value, or 0 if it doesn't have one
- */
- public int getId() {
- return ( tag & (Binary.BIT_4 | Binary.BIT_3 | Binary.BIT_2 |
- Binary.BIT_1 | Binary.BIT_0 ) );
- }
-
- /**
- * Returns a boolean indicating that the value portion of
- * this TLV is a primative. If not, then it is constructed
- * of more TLVs.
- *
- * @return true if the value is a primative, else false.
- */
- public boolean isPrimative() {
- return BERUtils.isPrimitive( tag );
- }
-
- /**
- * Get the number of child TLVs
- *
- * @return the count of children
- */
- public int getChildCount() {
-
- int result = 0;
-
- if( children != null ) {
- result = children.size();
- }
-
- return result;
- }
-
- /**
- * Retrieves a specific child TLV or null
- * if the index is not valid.
- *
- * @param i the index of the child
- * @return the TLV child object
- */
- public TLV getChild( int i ) {
- TLV result = null;
-
- if( children != null ) {
- result = (TLV)children.get(i);
- }
-
- return result;
- }
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.snickers.asn;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.codec.binary.Binary;
+import org.apache.snickers.ber.BERUtils;
+import org.apache.snickers.ber.TypeClass;
+
+/**
+ * Basic TLV structure consisting of:
+ *
+ * Tag
+ * Length
+ * Value
+ *
+ * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
+ * @author $Author: akarasulu $
+ * @version $Rev$
+ */
+public class TLV {
+
+ /** The tag for encoded attribute */
+ private int tag;
+
+ /** The length of the value portion of our encoded attribute */
+ private int length;
+
+ /** The value of this encoded attribute */
+ byte[] value = null;
+
+ /**
+ * The TLV children of this TLV. This occurs when the V portion
+ * of a TLV is constructed, that is, the V portion is made up of
+ * more TLVs.
+ */
+ ArrayList children = null;
+
+ /**
+ * Empty constructor
+ */
+ public TLV() {
+ super();
+
+ tag = 0;
+ length = 0;
+ }
+
+ /**
+ * Constructor for a TLV with specified values
+ *
+ * @param tag the tag for this TLV
+ * @param length the length of the value
+ * @param value the bytes representing the encoded value
+ */
+ public TLV( int tag, int length, byte[] value ) {
+ this.tag = tag;
+ this.length = length;
+ this.value = new byte[ value.length ];
+ System.arraycopy(value, 0, this.value, 0, value.length );
+ }
+
+ /**
+ * Constructor for a TLV with specified values
+ *
+ * @param tag the tag for this TLV
+ * @param length the length of the value
+ * @param value the bytes representing the encoded value
+ * @param children a collection of TLVs comprising the children
+ * of this TLV.
+ */
+ public TLV( int tag, int length, byte[] value, Collection children ) {
+ this.tag = tag;
+ this.length = length;
+ this.value = new byte[ value.length ];
+ System.arraycopy(value, 0, this.value, 0, value.length );
+
+ this.children = new ArrayList();
+ this.children.addAll( children );
+ }
+
+ /**
+ * Retrieves the tag value for this TLV
+ *
+ * @return the tag, an int value for this TLV
+ */
+ public int getTag() {
+ return tag;
+ }
+
+ /**
+ * Set the tag value associated with a TLV
+ *
+ * @param tag the new tag, an int, for this TLV
+ */
+ public void setTag( int tag ) {
+ this.tag = tag;
+ }
+
+ /**
+ * Return the length of the V portion of this TLV
+ *
+ * @return an integer representing the length
+ */
+ public int getLength() {
+ return length;
+ }
+
+ /**
+ * Set the length portion of this TLV
+ *
+ * @param length an integer representation of the length
+ */
+ public void setLength( int length ) {
+ this.length = length;
+ }
+
+ /**
+ * Return the value portion of this TLV
+ *
+ * @return a byte array of the encoded value
+ */
+ public byte[] getValue() {
+ return value;
+ }
+
+ /**
+ * Set the encoded value of this TLV
+ *
+ * @param value the byte array of the encoded value
+ */
+ public void setValue( byte[] value ) {
+ this.value = new byte[ value.length ];
+ System.arraycopy(value, 0, this.value, 0, value.length );
+ }
+
+ /**
+ * Return the child TLVs of this TLV
+ *
+ * @return a collection of TLVs
+ */
+ public Collection getChildren() {
+ return children;
+ }
+
+ /**
+ * Sets the children associated with this TLV
+ *
+ * @param children the child TLVs to associate with this TLV
+ */
+ public void setChildren(Collection children) {
+ this.children = new ArrayList();
+ this.children.addAll( children );
+ }
+
+ /**
+ * Return the <code>TypeClass</code> associated with this TLV
+ *
+ * @return the type class
+ */
+ public TypeClass getTypeClass() {
+ return BERUtils.getTypeClass( (byte) tag );
+ }
+
+ /**
+ * Return the unique ID of this TLV as specified in the ASN.1
+ * grammar. Not all TLVs will have valid ids. Some TLVs are
+ * just expected!
+ *
+ * @return the id of this encoded value, or 0 if it doesn't have one
+ */
+ public int getId() {
+ return ( tag & (Binary.BIT_4 | Binary.BIT_3 | Binary.BIT_2 |
+ Binary.BIT_1 | Binary.BIT_0 ) );
+ }
+
+ /**
+ * Returns a boolean indicating that the value portion of
+ * this TLV is a primative. If not, then it is constructed
+ * of more TLVs.
+ *
+ * @return true if the value is a primative, else false.
+ */
+ public boolean isPrimative() {
+ return BERUtils.isPrimitive( tag );
+ }
+
+ /**
+ * Get the number of child TLVs
+ *
+ * @return the count of children
+ */
+ public int getChildCount() {
+
+ int result = 0;
+
+ if( children != null ) {
+ result = children.size();
+ }
+
+ return result;
+ }
+
+ /**
+ * Retrieves a specific child TLV or null
+ * if the index is not valid.
+ *
+ * @param i the index of the child
+ * @return the TLV child object
+ */
+ public TLV getChild( int i ) {
+ TLV result = null;
+
+ if( children != null ) {
+ result = (TLV)children.get(i);
+ }
+
+ return result;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVHandler.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVHandler.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVHandler.java Sun Mar 14 14:02:18 2004
@@ -1,139 +1,139 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-package org.apache.snickers.asn;
-
-
-import org.apache.commons.codec.DecoderException;
-import org.apache.snickers.ber.TypeClass;
-
-
-/**
- * Basic interface for handling TLVs from the TLVParser. The order of event
- * firing will normally (always) consist of:
- *
- * beginTag, length, data, received, endTag
- *
- * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
- * @author $Author$
- * @version $Rev$
- */
-public interface TLVHandler
-{
- /**
- * Fired by the TLVParser to indicate that a new TLV is being decoded
- *
- * @param typeClass a type class object representing one of the four ASN.1
- * type classes
- * @param id The encoded structure id. Not all encoded values will have an
- * associated id
- * @param isPrimative a boolean indicating that this value is a primitive
- * @throws DecoderException if an error occurs during handling
- */
- public void beginTag( TypeClass typeClass, int id, boolean isPrimative )
- throws DecoderException;
-
- /**
- * Fired by the TLVParser to indicate that the processing of the current TLV
- * has been completed
- *
- * @param typeClass a type class object representing one of the four ASN.1
- * type classes
- * @param id The encoded structure id. Not all encoded values will have
- * an associated id
- * @throws DecoderException if an error occurs during handling
- */
- public void endTag( TypeClass typeClass, int id ) throws DecoderException;
-
- /**
- * Fired by the TLVParser to indicate the length of the V portion of the
- * TLV structure. Per the ASN.1 spec, there are three seperate encoding
- * forms: short, long, indefinite. Please note that the length will be
- * zero if the form is indefinite.
- *
- * @param typeClass a type class object representing one of the four ASN.1
- * type classes
- * @param id The encoded structure id. Not all encoded values will have
- * an associated id
- * @param length the length of the V portion of the TLV structure
- * @throws DecoderException if an error occurs during handling
- */
- public void length( TypeClass typeClass, int id, int length )
- throws DecoderException;
-
- /**
- * Fired by the TLVParser when data is received. The data may be all of
- * the required length, or it may be coming over in chunks. In other words,
- * this event may be fired multiple times.
- *
- * @param typeClass a type class object representing one of the four ASN.1
- * type classes
- * @param id The encoded structure id. Not all encoded values will have an
- * associated id
- * @param data the byte data associated with the value
- * @throws DecoderException if an error occurs during handling
- */
- public void data( TypeClass typeClass, int id, byte[] data )
- throws DecoderException;
-
- /**
- * Fired by the TLVParser once the entire TLV packet has been received.
- * This method may need to be removed if we think it is going to be too
- * much of a memory hog.
- *
- * @param typeClass a type class object representing one of the four
- * ASN.1 type classes
- * @param id The encoded structure id. Not all encoded values will have
- * an associated id
- * @param tlv the TLV object which has just finished being parsed.
- * @throws DecoderException if an error occurs during handling
- */
- public void received( TypeClass typeClass, int id, TLV tlv )
- throws DecoderException;
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.snickers.asn;
+
+
+import org.apache.commons.codec.DecoderException;
+import org.apache.snickers.ber.TypeClass;
+
+
+/**
+ * Basic interface for handling TLVs from the TLVParser. The order of event
+ * firing will normally (always) consist of:
+ *
+ * beginTag, length, data, received, endTag
+ *
+ * @author <a href="mailto:wesmckean@apache.org">Wes McKean</a>
+ * @author $Author: akarasulu $
+ * @version $Rev$
+ */
+public interface TLVHandler
+{
+ /**
+ * Fired by the TLVParser to indicate that a new TLV is being decoded
+ *
+ * @param typeClass a type class object representing one of the four ASN.1
+ * type classes
+ * @param id The encoded structure id. Not all encoded values will have an
+ * associated id
+ * @param isPrimative a boolean indicating that this value is a primitive
+ * @throws DecoderException if an error occurs during handling
+ */
+ public void beginTag( TypeClass typeClass, int id, boolean isPrimative )
+ throws DecoderException;
+
+ /**
+ * Fired by the TLVParser to indicate that the processing of the current TLV
+ * has been completed
+ *
+ * @param typeClass a type class object representing one of the four ASN.1
+ * type classes
+ * @param id The encoded structure id. Not all encoded values will have
+ * an associated id
+ * @throws DecoderException if an error occurs during handling
+ */
+ public void endTag( TypeClass typeClass, int id ) throws DecoderException;
+
+ /**
+ * Fired by the TLVParser to indicate the length of the V portion of the
+ * TLV structure. Per the ASN.1 spec, there are three seperate encoding
+ * forms: short, long, indefinite. Please note that the length will be
+ * zero if the form is indefinite.
+ *
+ * @param typeClass a type class object representing one of the four ASN.1
+ * type classes
+ * @param id The encoded structure id. Not all encoded values will have
+ * an associated id
+ * @param length the length of the V portion of the TLV structure
+ * @throws DecoderException if an error occurs during handling
+ */
+ public void length( TypeClass typeClass, int id, int length )
+ throws DecoderException;
+
+ /**
+ * Fired by the TLVParser when data is received. The data may be all of
+ * the required length, or it may be coming over in chunks. In other words,
+ * this event may be fired multiple times.
+ *
+ * @param typeClass a type class object representing one of the four ASN.1
+ * type classes
+ * @param id The encoded structure id. Not all encoded values will have an
+ * associated id
+ * @param data the byte data associated with the value
+ * @throws DecoderException if an error occurs during handling
+ */
+ public void data( TypeClass typeClass, int id, byte[] data )
+ throws DecoderException;
+
+ /**
+ * Fired by the TLVParser once the entire TLV packet has been received.
+ * This method may need to be removed if we think it is going to be too
+ * much of a memory hog.
+ *
+ * @param typeClass a type class object representing one of the four
+ * ASN.1 type classes
+ * @param id The encoded structure id. Not all encoded values will have
+ * an associated id
+ * @param tlv the TLV object which has just finished being parsed.
+ * @throws DecoderException if an error occurs during handling
+ */
+ public void received( TypeClass typeClass, int id, TLV tlv )
+ throws DecoderException;
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVParsingUtility.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVParsingUtility.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/asn/TLVParsingUtility.java Sun Mar 14 14:02:18 2004
@@ -1,232 +1,232 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-package org.apache.snickers.asn;
-
-import java.io.InputStream;
-import java.io.IOException;
-import java.io.FileInputStream;
-
-import org.apache.commons.codec.binary.*;
-import org.apache.snickers.ber.*;
-
-/**
- * @author Wes McKean
- *
- * A simply utility class to parse the ASN.1 TLVs out of a
- * stream and display some useful information.
- */
-public class TLVParsingUtility {
-
- private InputStream m_is = null;
-
- /**
- * Basic constructor
- */
- public TLVParsingUtility( InputStream is ) {
- super();
- m_is = is;
- }
-
- public void execute() {
-
- boolean finished = false;
-
- while( decodeTLV(0) != -1 );
- }
-
- private int decodeTLV( int indent ) {
-
- int count = 0;
- StringBuffer sb = new StringBuffer();
-
- for( int j = 0; j < indent; j++ ) {
- sb.append(" ");
- }
-
- String strIndent = sb.toString();
- int valueLen = 0;
-
- try {
- // Read the tag first
- int tag = m_is.read();
-
- if( tag == -1 ) return tag;
-
- count++;
-
- int id = tag & (Binary.BIT_4 | Binary.BIT_3 | Binary.BIT_2 | Binary.BIT_1 | Binary.BIT_0 );
- boolean primative = BERUtils.isPrimitive(tag);
- TypeClass tc = BERUtils.getTypeClass((byte)tag);
-
- System.out.println( strIndent + ">>>>>>>>>>>>>> TLV <<<<<<<<<<<<<" );
- System.out.println( strIndent + "Tag: " + toBits(tag) );
- System.out.println( strIndent + " class: " + tc );
- System.out.println( strIndent + " id: " + id );
- System.out.println( strIndent + " p/c: " + ( primative ? "primative" : "constructed" ) );
-
- int length = m_is.read();
- count++;
-
- System.out.println( strIndent + " length: " + toBits( length ) );
-
- // Try to determine the length value
- if( ( length & Binary.BIT_7 ) == 0 ) {
- valueLen = length & ~Binary.BIT_7;
- System.out.println( strIndent + " SHORT FORM=" + (valueLen));
- }
- else {
- // BIT 8 is set to one, and we therefore have
- // a long form or an indefinite form
- int lenlen = (length & ~Binary.BIT_7);
-
- if( lenlen == 0 ) {
- System.out.println( strIndent + " INDEFINITE FORM=" + (lenlen));
- }
- else {
- valueLen = 0;
-
- for( int i = 0; i < lenlen; i++ ) {
- int b = m_is.read();
- count++;
- valueLen = (( valueLen << 8 ) | b );
- }
-
- System.out.println( strIndent + " LONG FORM=" + (valueLen));
- }
- }
-
- System.out.println( strIndent+ " value: " );
-
- if( primative ) {
- if( tc.equals( TypeClass.PRIVATE )) {
- while ( valueLen > 0 ) {
- int t = decodeTLV( indent + 5 );
- count += t;
- valueLen -= t;
- }
- }
- else {
- decodePrimative( id, valueLen, strIndent );
- count += valueLen;
- }
- }
- else {
- while ( valueLen > 0 ) {
- int t = decodeTLV( indent + 5 );
- count += t;
- valueLen -= t;
- }
- }
-
- System.out.println( strIndent + ">>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<" );
-
- return count;
- }
- catch( IOException e ) {
- e.printStackTrace();
- }
-
- return -1;
- }
-
- private void decodePrimative( int id, int len, String strIndent ) throws IOException {
- byte[] b = new byte[len];
- m_is.read(b, 0, len );
- int value = 0;
-
- switch( id ) {
- case Primitive.BOOLEAN:
- boolean bVal = ( ((int)b[0] ) > 0 ) ? true : false;
- System.out.println( strIndent + " BOOLEAN = " + true );
- break;
- case Primitive.INTEGER:
-
- for( int i = 0; i < len; i++ ) {
- value = (value << 8) | (int)b[i];
- }
- System.out.println( strIndent + " INTEGER = " + value );
- break;
- case Primitive.OCTETSTRING:
- String svalue = new String(b);
- System.out.println( strIndent + " String = " + svalue );
- break;
- case Primitive.ENUMERATION:
- for( int i = 0; i < len; i++ ) {
- value = (value << 8) | (int)b[i];
- }
- System.out.println( strIndent + " ENUMERATION = " + value );
- break;
- default:
- System.out.println( strIndent + " CONTEXT SPECIFIC = " + new String(b) );
- }
- }
-
- private String toBits( int octet ) {
- String result = "";
-
- for( int i = 0; i < 8; i++ ) {
- if( (( 1 << i ) & octet) != 0 ) {
- result = "1" + result;
- }
- else
- result = "0" + result;
- }
-
- return result;
- }
-
- public static void main(String[] args) throws Exception {
- FileInputStream fis = new FileInputStream( args[0] );
- TLVParsingUtility p = new TLVParsingUtility( fis );
- p.execute();
-
- fis.close();
- }
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+package org.apache.snickers.asn;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.FileInputStream;
+
+import org.apache.commons.codec.binary.*;
+import org.apache.snickers.ber.*;
+
+/**
+ * @author Wes McKean
+ *
+ * A simply utility class to parse the ASN.1 TLVs out of a
+ * stream and display some useful information.
+ */
+public class TLVParsingUtility {
+
+ private InputStream m_is = null;
+
+ /**
+ * Basic constructor
+ */
+ public TLVParsingUtility( InputStream is ) {
+ super();
+ m_is = is;
+ }
+
+ public void execute() {
+
+ boolean finished = false;
+
+ while( decodeTLV(0) != -1 );
+ }
+
+ private int decodeTLV( int indent ) {
+
+ int count = 0;
+ StringBuffer sb = new StringBuffer();
+
+ for( int j = 0; j < indent; j++ ) {
+ sb.append(" ");
+ }
+
+ String strIndent = sb.toString();
+ int valueLen = 0;
+
+ try {
+ // Read the tag first
+ int tag = m_is.read();
+
+ if( tag == -1 ) return tag;
+
+ count++;
+
+ int id = tag & (Binary.BIT_4 | Binary.BIT_3 | Binary.BIT_2 | Binary.BIT_1 | Binary.BIT_0 );
+ boolean primative = BERUtils.isPrimitive(tag);
+ TypeClass tc = BERUtils.getTypeClass((byte)tag);
+
+ System.out.println( strIndent + ">>>>>>>>>>>>>> TLV <<<<<<<<<<<<<" );
+ System.out.println( strIndent + "Tag: " + toBits(tag) );
+ System.out.println( strIndent + " class: " + tc );
+ System.out.println( strIndent + " id: " + id );
+ System.out.println( strIndent + " p/c: " + ( primative ? "primative" : "constructed" ) );
+
+ int length = m_is.read();
+ count++;
+
+ System.out.println( strIndent + " length: " + toBits( length ) );
+
+ // Try to determine the length value
+ if( ( length & Binary.BIT_7 ) == 0 ) {
+ valueLen = length & ~Binary.BIT_7;
+ System.out.println( strIndent + " SHORT FORM=" + (valueLen));
+ }
+ else {
+ // BIT 8 is set to one, and we therefore have
+ // a long form or an indefinite form
+ int lenlen = (length & ~Binary.BIT_7);
+
+ if( lenlen == 0 ) {
+ System.out.println( strIndent + " INDEFINITE FORM=" + (lenlen));
+ }
+ else {
+ valueLen = 0;
+
+ for( int i = 0; i < lenlen; i++ ) {
+ int b = m_is.read();
+ count++;
+ valueLen = (( valueLen << 8 ) | b );
+ }
+
+ System.out.println( strIndent + " LONG FORM=" + (valueLen));
+ }
+ }
+
+ System.out.println( strIndent+ " value: " );
+
+ if( primative ) {
+ if( tc.equals( TypeClass.PRIVATE )) {
+ while ( valueLen > 0 ) {
+ int t = decodeTLV( indent + 5 );
+ count += t;
+ valueLen -= t;
+ }
+ }
+ else {
+ decodePrimative( id, valueLen, strIndent );
+ count += valueLen;
+ }
+ }
+ else {
+ while ( valueLen > 0 ) {
+ int t = decodeTLV( indent + 5 );
+ count += t;
+ valueLen -= t;
+ }
+ }
+
+ System.out.println( strIndent + ">>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<" );
+
+ return count;
+ }
+ catch( IOException e ) {
+ e.printStackTrace();
+ }
+
+ return -1;
+ }
+
+ private void decodePrimative( int id, int len, String strIndent ) throws IOException {
+ byte[] b = new byte[len];
+ m_is.read(b, 0, len );
+ int value = 0;
+
+ switch( id ) {
+ case Primitive.BOOLEAN:
+ boolean bVal = ( ((int)b[0] ) > 0 ) ? true : false;
+ System.out.println( strIndent + " BOOLEAN = " + true );
+ break;
+ case Primitive.INTEGER:
+
+ for( int i = 0; i < len; i++ ) {
+ value = (value << 8) | (int)b[i];
+ }
+ System.out.println( strIndent + " INTEGER = " + value );
+ break;
+ case Primitive.OCTETSTRING:
+ String svalue = new String(b);
+ System.out.println( strIndent + " String = " + svalue );
+ break;
+ case Primitive.ENUMERATION:
+ for( int i = 0; i < len; i++ ) {
+ value = (value << 8) | (int)b[i];
+ }
+ System.out.println( strIndent + " ENUMERATION = " + value );
+ break;
+ default:
+ System.out.println( strIndent + " CONTEXT SPECIFIC = " + new String(b) );
+ }
+ }
+
+ private String toBits( int octet ) {
+ String result = "";
+
+ for( int i = 0; i < 8; i++ ) {
+ if( (( 1 << i ) & octet) != 0 ) {
+ result = "1" + result;
+ }
+ else
+ result = "0" + result;
+ }
+
+ return result;
+ }
+
+ public static void main(String[] args) throws Exception {
+ FileInputStream fis = new FileInputStream( args[0] );
+ TLVParsingUtility p = new TLVParsingUtility( fis );
+ p.execute();
+
+ fis.close();
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/AbstractDecoderTestCase.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/AbstractDecoderTestCase.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/AbstractDecoderTestCase.java Sun Mar 14 14:02:18 2004
@@ -1,388 +1,388 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.Stack ;
-import java.nio.ByteBuffer ;
-import java.util.ArrayList ;
-
-import org.apache.commons.codec.binary.Binary ;
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-import org.apache.commons.codec.stateful.DecoderCallback ;
-import org.apache.commons.codec.stateful.StatefulDecoder ;
-
-import org.apache.commons.lang.exception.ExceptionUtils ;
-
-import org.apache.ldap.common.message.Message ;
-import org.apache.ldap.common.message.MessageEncoder ;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests the BER decoder.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public abstract class AbstractDecoderTestCase extends TestCase
- implements BERDecoderCallback, DecoderMonitor
-{
- /** list of encountered TLV's as we recieve completed decode callbacks */
- protected ArrayList tlvList = new ArrayList() ;
- /** the decoder that is constructed every time */
- protected BERDecoder decoder = null ;
-
-
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp() ;
- decoder = new BERDecoder() ;
- decoder.setCallback( this ) ;
- decoder.setDecoderMonitor( this ) ;
- }
-
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown() ;
- tlvList.clear() ;
- decoder = null ;
- }
-
-
- /**
- * Constructor for BERDecoderTest.
- * @param arg0
- */
- public AbstractDecoderTestCase( String arg0 )
- {
- super( arg0 ) ;
- }
-
-
- /**
- * Fragments an array of bytes into multiple arrays 'attempting' to keep
- * them the same size however the last fragment will be an array
- * bites.length%size which may or may not be of the requested fragment size.
- * However it will never be greater. Use this method to break appart TLV
- * byte arrays to feed them into the decoder for testing.
- *
- * @param bites the bites to fragment
- * @param size the maximum size of a fragment
- * @return the array of byte[] fragments
- */
- public byte[][] fragment( byte[] bites, int size )
- {
- byte[][] fragments = null ;
-
- if ( size <= 0 )
- {
- throw new IllegalArgumentException(
- "fragment size should be 1 or more but was " + size ) ;
- }
-
- int wholeFrags = bites.length/size ;
- int partialFragSize = bites.length % size ;
-
- /*
- * Allocate what we need depending on the size of our remainder
- */
- if ( partialFragSize == 0 )
- {
- fragments = new byte[wholeFrags][] ;
- }
- else
- {
- fragments = new byte[wholeFrags+1][] ;
- fragments[wholeFrags] = new byte[partialFragSize] ;
- }
-
- for ( int ii = 0; ii < wholeFrags; ii++ )
- {
- fragments[ii] = new byte[size] ;
- System.arraycopy( bites, ii * size, fragments[ii], 0, size ) ;
- }
-
- if ( partialFragSize != 0 )
- {
- int srcPos = wholeFrags * size ;
- byte[] src = fragments[wholeFrags] ;
- System.arraycopy( bites, srcPos, src, 0, partialFragSize ) ;
- }
-
- return fragments ;
- }
-
-
- /**
- * BER decodes a string of 0's and 1's.
- *
- * @param bitString a string of ascii 0's and 1's
- * @return a copy of the decoded tuple or the partially decoded current tlv
- * @throws DecoderException if there are errors while decoding.
- */
- public Tuple decode( String bitString ) throws DecoderException
- {
- byte [] bites = Binary.fromAscii( bitString.getBytes() ) ;
- ByteBuffer buf = ByteBuffer.wrap( bites ) ;
- int lastSize = tlvList.size() ;
- decoder.decode( buf ) ;
-
- if ( tlvList.isEmpty() || tlvList.size() == lastSize )
- {
- return decoder.getCurrentTuple() ;
- }
-
- return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
- }
-
-
- /**
- * BER decodes a single byte.
- *
- * @param bite a single byte to decode
- * @return a copy of the decoded tuple or the partially decoded current tlv
- * @throws DecoderException if there are errors while decoding.
- */
- public Tuple decode( byte bite ) throws DecoderException
- {
- byte [] bites = { bite } ;
- ByteBuffer buf = ByteBuffer.wrap( bites ) ;
- int lastSize = tlvList.size() ;
- decoder.decode( buf ) ;
-
- if ( tlvList.isEmpty() || tlvList.size() == lastSize )
- {
- return decoder.getCurrentTuple() ;
- }
-
- return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
- }
-
-
- /**
- * BER decodes a byte array.
- *
- * @param bites a byte array to decode
- * @return a copy of the decoded tuple or the partially decoded current tlv
- * @throws DecoderException if there are errors while decoding.
- */
- public Tuple decode( byte[] bites ) throws DecoderException
- {
- ByteBuffer buf = ByteBuffer.wrap( bites ) ;
- int lastSize = tlvList.size() ;
- decoder.decode( buf ) ;
-
- if ( tlvList.isEmpty() || tlvList.size() == lastSize )
- {
- return decoder.getCurrentTuple() ;
- }
-
- return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
- }
-
-
- /**
- * First BER encodes then BER decodes a Tuple.
- *
- * @param tlv a tuple to encode then decode
- * @return a copy of the decoded tuple or the partially decoded current tlv
- * @throws DecoderException if there are errors while decoding
- */
- public Tuple decode( Tuple tlv ) throws DecoderException
- {
- ByteBuffer buf = ByteBuffer.wrap( tlv.encode() ) ;
- int lastSize = tlvList.size() ;
- decoder.decode( buf ) ;
-
- if ( tlvList.isEmpty() || tlvList.size() == lastSize )
- {
- Stack stack = decoder.getTupleStack() ;
-
- if ( stack.isEmpty() )
- {
- return decoder.getCurrentTuple() ;
- }
- else
- {
- return ( Tuple ) stack.peek() ;
- }
- }
-
- return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
- }
-
-
- /**
- * First BER encodes then BER decodes a train of Tuples.
- *
- * @param tlvs a tuple array to encode then decode
- * @return a copy of the decoded tuple or the partially decoded current tlv
- * @throws DecoderException if there are errors while decoding
- */
- public Tuple decode( Tuple[] tlvs ) throws DecoderException
- {
- int lastSize = tlvList.size() ;
-
- for ( int ii = 0; ii < tlvs.length; ii++ )
- {
- decode( tlvs[ii] ) ;
- }
-
- if ( tlvList.isEmpty() || tlvList.size() == lastSize )
- {
- return decoder.getCurrentTuple() ;
- }
-
- return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
- }
-
-
- /**
- * Encodes a message using the message framework and the default BERLib
- * provider which is snacc for now. Later we shall remove this dependency.
- * It then decodes encoded output generated.
- *
- * @param msg the BER encoded message
- * @return the last tuple generated by decoding the encoded message
- * @throws DecoderException if there are any failures
- */
- public Tuple decode( Message msg ) throws DecoderException
- {
- MessageEncoder encoder = new MessageEncoder() ;
- decode( encoder.encode( msg ) ) ;
-
- return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.BERDecoderCallback#tagDecoded(
- * org.apache.snickers.ber.Tuple)
- */
- public void tagDecoded( Tuple tlv )
- {
- assertTrue( decoder.getCurrentTuple().equals( tlv ) ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.BERDecoderCallback#lengthDecoded(
- * org.apache.snickers.ber.Tuple)
- */
- public void lengthDecoded( Tuple tlv )
- {
- assertTrue( decoder.getCurrentTuple().equals( tlv ) ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
- */
- public void decodeOccurred( StatefulDecoder decoder, Object decoded )
- {
- Tuple t = ( Tuple ) decoded ;
- tlvList.add( t.clone() ) ;
- assertEquals( BERDecoderState.VALUE, this.decoder.getState() ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackOccured(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderCallback, java.lang.Object)
- */
- public void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
- Object decoded )
- {
- assertEquals( this, cb ) ;
- assertEquals( this.decoder, decoder ) ;
- Tuple t = ( Tuple ) decoded ;
- assertNotNull( t ) ;
- if ( t.isPrimitive )
- {
- assertTrue( this.decoder.getCurrentTuple().equals( decoded ) ) ;
- }
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackSet(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderCallback,
- * org.apache.commons.codec.stateful.DecoderCallback)
- */
- public void callbackSet( StatefulDecoder decoder, DecoderCallback oldcb,
- DecoderCallback newcb )
- {
- assertEquals( this, newcb ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#error(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void error( StatefulDecoder decoder, Exception exception )
- {
- fail( ExceptionUtils.getFullStackTrace( exception ) ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#fatalError(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void fatalError( StatefulDecoder decoder, Exception exception )
- {
- fail( ExceptionUtils.getFullStackTrace( exception ) ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#monitorSet(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderMonitor)
- */
- public void monitorSet( StatefulDecoder decoder, DecoderMonitor oldmon )
- {
- assertEquals( this, oldmon ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#warning(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void warning( StatefulDecoder decoder, Exception exception )
- {
- fail( ExceptionUtils.getFullStackTrace( exception ) ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.Stack ;
+import java.nio.ByteBuffer ;
+import java.util.ArrayList ;
+
+import org.apache.commons.codec.binary.Binary ;
+import org.apache.commons.codec.DecoderException ;
+import org.apache.commons.codec.stateful.DecoderMonitor ;
+import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+
+import org.apache.commons.lang.exception.ExceptionUtils ;
+
+import org.apache.ldap.common.message.Message ;
+import org.apache.ldap.common.message.MessageEncoder ;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the BER decoder.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public abstract class AbstractDecoderTestCase extends TestCase
+ implements BERDecoderCallback, DecoderMonitor
+{
+ /** list of encountered TLV's as we recieve completed decode callbacks */
+ protected ArrayList tlvList = new ArrayList() ;
+ /** the decoder that is constructed every time */
+ protected BERDecoder decoder = null ;
+
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp() ;
+ decoder = new BERDecoder() ;
+ decoder.setCallback( this ) ;
+ decoder.setDecoderMonitor( this ) ;
+ }
+
+
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown() ;
+ tlvList.clear() ;
+ decoder = null ;
+ }
+
+
+ /**
+ * Constructor for BERDecoderTest.
+ * @param arg0
+ */
+ public AbstractDecoderTestCase( String arg0 )
+ {
+ super( arg0 ) ;
+ }
+
+
+ /**
+ * Fragments an array of bytes into multiple arrays 'attempting' to keep
+ * them the same size however the last fragment will be an array
+ * bites.length%size which may or may not be of the requested fragment size.
+ * However it will never be greater. Use this method to break appart TLV
+ * byte arrays to feed them into the decoder for testing.
+ *
+ * @param bites the bites to fragment
+ * @param size the maximum size of a fragment
+ * @return the array of byte[] fragments
+ */
+ public byte[][] fragment( byte[] bites, int size )
+ {
+ byte[][] fragments = null ;
+
+ if ( size <= 0 )
+ {
+ throw new IllegalArgumentException(
+ "fragment size should be 1 or more but was " + size ) ;
+ }
+
+ int wholeFrags = bites.length/size ;
+ int partialFragSize = bites.length % size ;
+
+ /*
+ * Allocate what we need depending on the size of our remainder
+ */
+ if ( partialFragSize == 0 )
+ {
+ fragments = new byte[wholeFrags][] ;
+ }
+ else
+ {
+ fragments = new byte[wholeFrags+1][] ;
+ fragments[wholeFrags] = new byte[partialFragSize] ;
+ }
+
+ for ( int ii = 0; ii < wholeFrags; ii++ )
+ {
+ fragments[ii] = new byte[size] ;
+ System.arraycopy( bites, ii * size, fragments[ii], 0, size ) ;
+ }
+
+ if ( partialFragSize != 0 )
+ {
+ int srcPos = wholeFrags * size ;
+ byte[] src = fragments[wholeFrags] ;
+ System.arraycopy( bites, srcPos, src, 0, partialFragSize ) ;
+ }
+
+ return fragments ;
+ }
+
+
+ /**
+ * BER decodes a string of 0's and 1's.
+ *
+ * @param bitString a string of ascii 0's and 1's
+ * @return a copy of the decoded tuple or the partially decoded current tlv
+ * @throws DecoderException if there are errors while decoding.
+ */
+ public Tuple decode( String bitString ) throws DecoderException
+ {
+ byte [] bites = Binary.fromAscii( bitString.getBytes() ) ;
+ ByteBuffer buf = ByteBuffer.wrap( bites ) ;
+ int lastSize = tlvList.size() ;
+ decoder.decode( buf ) ;
+
+ if ( tlvList.isEmpty() || tlvList.size() == lastSize )
+ {
+ return decoder.getCurrentTuple() ;
+ }
+
+ return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
+ }
+
+
+ /**
+ * BER decodes a single byte.
+ *
+ * @param bite a single byte to decode
+ * @return a copy of the decoded tuple or the partially decoded current tlv
+ * @throws DecoderException if there are errors while decoding.
+ */
+ public Tuple decode( byte bite ) throws DecoderException
+ {
+ byte [] bites = { bite } ;
+ ByteBuffer buf = ByteBuffer.wrap( bites ) ;
+ int lastSize = tlvList.size() ;
+ decoder.decode( buf ) ;
+
+ if ( tlvList.isEmpty() || tlvList.size() == lastSize )
+ {
+ return decoder.getCurrentTuple() ;
+ }
+
+ return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
+ }
+
+
+ /**
+ * BER decodes a byte array.
+ *
+ * @param bites a byte array to decode
+ * @return a copy of the decoded tuple or the partially decoded current tlv
+ * @throws DecoderException if there are errors while decoding.
+ */
+ public Tuple decode( byte[] bites ) throws DecoderException
+ {
+ ByteBuffer buf = ByteBuffer.wrap( bites ) ;
+ int lastSize = tlvList.size() ;
+ decoder.decode( buf ) ;
+
+ if ( tlvList.isEmpty() || tlvList.size() == lastSize )
+ {
+ return decoder.getCurrentTuple() ;
+ }
+
+ return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
+ }
+
+
+ /**
+ * First BER encodes then BER decodes a Tuple.
+ *
+ * @param tlv a tuple to encode then decode
+ * @return a copy of the decoded tuple or the partially decoded current tlv
+ * @throws DecoderException if there are errors while decoding
+ */
+ public Tuple decode( Tuple tlv ) throws DecoderException
+ {
+ ByteBuffer buf = ByteBuffer.wrap( tlv.encode() ) ;
+ int lastSize = tlvList.size() ;
+ decoder.decode( buf ) ;
+
+ if ( tlvList.isEmpty() || tlvList.size() == lastSize )
+ {
+ Stack stack = decoder.getTupleStack() ;
+
+ if ( stack.isEmpty() )
+ {
+ return decoder.getCurrentTuple() ;
+ }
+ else
+ {
+ return ( Tuple ) stack.peek() ;
+ }
+ }
+
+ return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
+ }
+
+
+ /**
+ * First BER encodes then BER decodes a train of Tuples.
+ *
+ * @param tlvs a tuple array to encode then decode
+ * @return a copy of the decoded tuple or the partially decoded current tlv
+ * @throws DecoderException if there are errors while decoding
+ */
+ public Tuple decode( Tuple[] tlvs ) throws DecoderException
+ {
+ int lastSize = tlvList.size() ;
+
+ for ( int ii = 0; ii < tlvs.length; ii++ )
+ {
+ decode( tlvs[ii] ) ;
+ }
+
+ if ( tlvList.isEmpty() || tlvList.size() == lastSize )
+ {
+ return decoder.getCurrentTuple() ;
+ }
+
+ return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
+ }
+
+
+ /**
+ * Encodes a message using the message framework and the default BERLib
+ * provider which is snacc for now. Later we shall remove this dependency.
+ * It then decodes encoded output generated.
+ *
+ * @param msg the BER encoded message
+ * @return the last tuple generated by decoding the encoded message
+ * @throws DecoderException if there are any failures
+ */
+ public Tuple decode( Message msg ) throws DecoderException
+ {
+ MessageEncoder encoder = new MessageEncoder() ;
+ decode( encoder.encode( msg ) ) ;
+
+ return ( Tuple ) tlvList.get( tlvList.size() - 1 ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#tagDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void tagDecoded( Tuple tlv )
+ {
+ assertTrue( decoder.getCurrentTuple().equals( tlv ) ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#lengthDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void lengthDecoded( Tuple tlv )
+ {
+ assertTrue( decoder.getCurrentTuple().equals( tlv ) ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
+ */
+ public void decodeOccurred( StatefulDecoder decoder, Object decoded )
+ {
+ Tuple t = ( Tuple ) decoded ;
+ tlvList.add( t.clone() ) ;
+ assertEquals( BERDecoderState.VALUE, this.decoder.getState() ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackOccured(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderCallback, java.lang.Object)
+ */
+ public void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
+ Object decoded )
+ {
+ assertEquals( this, cb ) ;
+ assertEquals( this.decoder, decoder ) ;
+ Tuple t = ( Tuple ) decoded ;
+ assertNotNull( t ) ;
+ if ( t.isPrimitive )
+ {
+ assertTrue( this.decoder.getCurrentTuple().equals( decoded ) ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackSet(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderCallback,
+ * org.apache.commons.codec.stateful.DecoderCallback)
+ */
+ public void callbackSet( StatefulDecoder decoder, DecoderCallback oldcb,
+ DecoderCallback newcb )
+ {
+ assertEquals( this, newcb ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#error(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void error( StatefulDecoder decoder, Exception exception )
+ {
+ fail( ExceptionUtils.getFullStackTrace( exception ) ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#fatalError(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void fatalError( StatefulDecoder decoder, Exception exception )
+ {
+ fail( ExceptionUtils.getFullStackTrace( exception ) ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#monitorSet(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderMonitor)
+ */
+ public void monitorSet( StatefulDecoder decoder, DecoderMonitor oldmon )
+ {
+ assertEquals( this, oldmon ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#warning(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void warning( StatefulDecoder decoder, Exception exception )
+ {
+ fail( ExceptionUtils.getFullStackTrace( exception ) ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoder.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoder.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoder.java Sun Mar 14 14:02:18 2004
@@ -1,629 +1,629 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.Stack ;
-
-import java.nio.ByteBuffer ;
-
-import org.apache.commons.codec.binary.Binary ;
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-import org.apache.commons.codec.stateful.DecoderCallback ;
-import org.apache.commons.codec.stateful.StatefulDecoder ;
-import org.apache.commons.codec.stateful.DecoderMonitorAdapter ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
-
-
-/**
- * Low level BER encoded bytes to Tag Value Length (TLV) tuple decoder.
- * This decoder is a low level event based parser which operates in a fashion
- * similar to the way SAX works except the elements of concern are the tag,
- * length, and value entities.
- * <p>
- * Instance variables and a Stack is used to track the state of the decoder
- * between decode calls. The stack maintains the nesting of TLV tuples. Rather
- * than creating new TLV tuple instances every time a single tuple is reused for
- * primitive types and new tlv tuples are cloned for constructed types. The
- * tuple fed to the callback must therefore be used very carefully - its values
- * must be copied to prevent their loss.
- * </p>
- * <p>
- * Note that all tuples are not created equal. Constructed TLVs nesting others
- * will have null value members. Only TLV tuples of primitive types or the
- * leaf TLV tuples of the TLV tuple tree will only contain non null values.
- * Therefore the nature of a TLV tuple should be investigated by callbacks
- * before attempting to interpret their values.
- * </p>
- *
- * @see Tuple for TLV tuple value size limitations
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class BERDecoder implements StatefulDecoder
-{
- public static final BERDecoderCallback DEFAULT_CALLBACK =
- new BERDecoderCallbackAdapter() ;
- public static final DecoderMonitor DEFAULT_MONITOR =
- new DecoderMonitorAdapter() ;
-
- /** this decoder's callback */
- private BERDecoderCallback cb = DEFAULT_CALLBACK ;
- /** the monitor used by this decoder */
- private DecoderMonitor monitor = DEFAULT_MONITOR ;
-
- /** the single TLV tuple used by this decoder */
- private final Tuple tlv = new Tuple() ;
-
- /** a byte buffer used to collect the arriving tag octets */
- private final ArrayByteList tagBuffer = new ArrayByteList( 10 ) ;
- /** a byte buffer used to collect the arriving legth octets */
- private final ArrayByteList lengthBuffer = new ArrayByteList( 10 ) ;
-
- /** stack of nested/constructed TLV tuples */
- private final Stack tlvStack = new Stack() ;
-
- /** the length of the length data */
- private int lengthOfLength = 0 ;
-
- /** the state of this decoder */
- private BERDecoderState state = BERDecoderState.getStartState() ;
-
-
- // ------------------------------------------------------------------------
- // StatefulDecoder Methods
- // ------------------------------------------------------------------------
-
-
- /**
- * Expects a ByteBuffer containing BER encoded data.
- *
- * @see org.apache.commons.codec.stateful.StatefulDecoder#decode(
- * java.lang.Object)
- * @throws ClassCastException if the encoded argument is not a ByteBuffer
- * @throws IllegalArgumentException if the buffer is null or empty
- */
- public void decode( Object encoded ) throws DecoderException
- {
- ByteBuffer buf = ( ByteBuffer ) encoded ;
-
- /* --------------------------------------------------------------------
- Handle any unusual input by informing the monitor.
- ------------------------------------------------------------------ */
-
- if ( buf == null && monitor != null )
- {
- String msg = "ignoring null argument to decode()" ;
- monitor.warning( this, new IllegalArgumentException( msg ) ) ;
- return ;
- }
-
- if ( buf.remaining() == 0 && monitor != null )
- {
- String msg = "ignoring empty buffer" ;
- monitor.warning( this, new IllegalArgumentException( msg ) ) ;
- return ;
- }
-
- /*
- * This loop is used instead of costly recursion. This requires each
- * of the statewise decode methods to process bytes from the buffer. If
- * they can process enough to switch state they do and return
- * immediately. This loop makes sure the next processing state is
- * handled if there is more data for that state.
- */
- while ( buf.hasRemaining() )
- {
- switch( state.getValue() )
- {
- case( BERDecoderState.TAG_VAL ):
- decodeTag( buf ) ;
- break ;
- case( BERDecoderState.LENGTH_VAL ):
- decodeLength( buf ) ;
- break ;
- case( BERDecoderState.VALUE_VAL ):
- decodeValue( buf ) ;
- break ;
- }
- }
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.StatefulDecoder#setCallback(
- * org.apache.commons.codec.stateful.DecoderCallback)
- */
- public void setCallback( DecoderCallback cb )
- {
- this.cb = ( BERDecoderCallback ) cb ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.StatefulDecoder#setDecoderMonitor(
- * org.apache.commons.codec.stateful.DecoderMonitor)
- */
- public void setDecoderMonitor( DecoderMonitor monitor )
- {
- this.monitor = monitor ;
- }
-
-
- // ------------------------------------------------------------------------
- // State Based Decode Methods
- // ------------------------------------------------------------------------
-
-
- /**
- * Extracts the TLV's tag portion from the buffer.
- *
- * @param buf the byte byffer containing BER encoded data
- */
- private void decodeTag( ByteBuffer buf ) throws DecoderException
- {
- for ( tlv.index = 0; buf.hasRemaining(); tlv.index++ )
- {
- byte octet = buf.get() ;
- tagBuffer.add( octet ) ;
-
- if ( tagBuffer.size() == 1 )
- {
- int id = BERUtils.SHORT_TAG_MASK & octet ;
- tlv.isPrimitive = BERUtils.isPrimitive( octet ) ;
- tlv.typeClass = BERUtils.getTypeClass( octet ) ;
-
- // continue to collect more octets if this is the long Tag form
- if ( id == BERUtils.SHORT_TAG_MASK )
- {
- continue ;
- }
-
- // its the short form so we get the id, switch state & return
- tlv.id = id ;
- fireTagDecoded() ;
- state = state.getNext( tlv.isPrimitive ) ;
-
- // we moved by one byte so we update stack indices by 1
- updateStack( 1 ) ;
- return ;
- }
-
- /*
- * From here on we're dealing with the long form of the tag. The
- * terminating octet for the long form uses a raised most
- * significant bit to flag the end of the train of octets for the
- * tag id.
- */
- if ( ( octet & Binary.BIT_7 ) == 0 )
- {
- tlv.id = BERUtils.getTagId( tagBuffer ) ;
- fireTagDecoded() ;
- state = state.getNext( tlv.isPrimitive ) ;
-
- // we moved by many bytes so we update stack accordingly
- updateStack( tagBuffer.size() ) ;
- return ;
- }
- }
- }
-
-
- /**
- * Extracts the length portion from the buffer.
- *
- * @param buf the byte byffer containing BER encoded data
- */
- private void decodeLength( ByteBuffer buf ) throws DecoderException
- {
- while ( buf.hasRemaining() )
- {
- tlv.index++ ;
- byte octet = buf.get() ;
- lengthBuffer.add( octet ) ;
-
- if ( lengthBuffer.size() == 1 )
- {
- lengthOfLength = octet & BERUtils.LONG_TAG_MASK ;
-
- // handle the short form of the length here
- if ( ( octet & Binary.BIT_7 ) == 0 )
- {
- lengthOfLength = 0 ;
- tlv.length = octet ;
- tlv.valueIndex = Tuple.UNDEFINED ;
-
- if ( tlv.isPrimitive )
- {
- tlv.value = new byte[tlv.length] ;
- fireLengthDecoded() ;
- state = BERDecoderState.VALUE ;
- // we moved by one byte so we update stack indices by 1
- updateStack( 1 ) ;
- }
- else
- {
- // We moved by one byte so we update stack indices by 1
- // need to do this here so we do not double update the
- // current tuple after pushing it onto the stack.
- updateStack( 1 ) ;
-
- tlvStack.push( tlv.clone() ) ;
- fireLengthDecoded() ;
- tlv.clear() ;
- state = BERDecoderState.TAG ;
- }
-
- handleIndefinateTerminator() ;
- return ;
- }
- // the indefinate form of the length
- else if ( lengthOfLength == 0 )
- {
- lengthOfLength = Tuple.INDEFINATE ;
- tlv.index = Tuple.INDEFINATE ;
- tlv.length = Tuple.INDEFINATE ;
- tlv.valueIndex = Tuple.UNDEFINED ;
- fireLengthDecoded() ;
- tlvStack.push( tlv.clone() ) ;
- tlv.clear() ;
- state = BERDecoderState.TAG ;
-
- // we moved by one byte so we update stack indices by 1
- updateStack( 1 ) ;
- return ;
- }
- }
-
- /*
- * if we have collected all the octets needed for computing the long
- * form length so we need to calculate the length push it and return
- */
- if ( lengthBuffer.size() == lengthOfLength + 1 )
- {
- lengthOfLength = 0 ;
- tlv.length = BERUtils.getLength( lengthBuffer ) ;
- tlv.valueIndex = Tuple.UNDEFINED ;
-
- if ( tlv.isPrimitive )
- {
- tlv.value = new byte[tlv.length] ;
- fireLengthDecoded() ;
- state = BERDecoderState.VALUE ;
- }
- else
- {
- tlvStack.push( tlv.clone() ) ;
- fireLengthDecoded() ;
- tlv.clear() ;
- state = BERDecoderState.TAG ;
- }
-
- /*
- * we moved by one byte + lengthOfLength so we update stack
- * indices by lengthOfLength + 1
- */
- updateStack( lengthOfLength + 1 ) ;
- return ;
- }
- }
- }
-
-
- /**
- * Extracts the value portion from the buffer for a primitive type.
- *
- * @param buf the byte byffer containing BER encoded data
- */
- private void decodeValue( ByteBuffer buf ) throws DecoderException
- {
- byte[] value = ( byte [] ) tlv.value ;
- int offset = Tuple.UNDEFINED ;
- int needToRead = Tuple.UNDEFINED ;
-
- if ( ! tlv.isPrimitive )
- {
- IllegalStateException e = new IllegalStateException(
- "should only be working with primitive tlv" ) ;
-
- if ( monitor == null )
- {
- throw e ;
- }
- else
- {
- monitor.fatalError( this, e ) ;
- }
-
- return ;
- }
-
- if ( ! buf.hasRemaining() )
- {
- return ;
- }
-
- /*
- * setup to start decoding the value
- */
- if ( tlv.valueIndex == Tuple.UNDEFINED )
- {
- needToRead = tlv.length ;
- offset = 0 ;
- }
- else
- {
- needToRead = tlv.length - tlv.valueIndex ;
- offset = tlv.valueIndex ;
- }
-
- /*
- * check if we have the remainder of the value to complete the
- * TLV within the current buffer - if so we read all of it
- */
- if ( buf.remaining() >= needToRead )
- {
- buf.get( value, offset, needToRead ) ;
- tlv.valueIndex = tlv.length ;
- tlv.index += needToRead ;
- fireDecodeOccurred( tlv ) ;
- updateStack( needToRead ) ;
- tlv.clear() ;
- state = BERDecoderState.TAG ;
- }
-
- /*
- * the buffer does not contain the rest of the value we need in order
- * to complete the current TLV - the value is fragmented so we read
- * what we can and update indices by that amount.
- */
- else
- {
- if ( tlv.valueIndex == Tuple.UNDEFINED )
- {
- tlv.valueIndex = 0 ;
- }
-
- int remaining = buf.remaining() ;
- buf.get( value, offset, remaining ) ;
- tlv.valueIndex += remaining ;
- updateStack( remaining ) ;
- }
- }
-
-
- // ------------------------------------------------------------------------
- // private utility methods
- // ------------------------------------------------------------------------
-
-
- /**
- * Fires a tag decoded event by making the appropriate calls to the
- * callback and the monitor. If the monitor is a BERDecoderMonitor with
- * extended reporting, then those methods are invoked.
- *
- * Also as a side-effect this method clears the tag buffer once it has
- * finished notifying the monitor and calling the callback.
- */
- private void fireTagDecoded()
- {
- if ( cb != null )
- {
- cb.tagDecoded( tlv ) ;
- }
-
- if ( monitor != null && monitor instanceof BERDecoderMonitor )
- {
- BERDecoderMonitor berMonitor = ( BERDecoderMonitor ) monitor ;
- berMonitor.tagDecoded( tlv, tagBuffer.toArray() ) ;
- }
-
- tagBuffer.clear() ;
- }
-
-
- /**
- * Fires a length decoded event by making the appropriate calls to the
- * callback and the monitor. If the monitor is a BERDecoderMonitor with
- * extended reporting, then those methods are invoked.
- *
- * Also as a side-effect this method clears the length buffer once it has
- * finished notifying the monitor and calling the callback.
- */
- private void fireLengthDecoded()
- {
- if ( cb != null )
- {
- cb.lengthDecoded( tlv ) ;
- }
-
- if ( monitor != null && monitor instanceof BERDecoderMonitor )
- {
- BERDecoderMonitor berMonitor = ( BERDecoderMonitor ) monitor ;
- berMonitor.lengthDecoded( tlv, lengthBuffer.toArray() ) ;
- }
-
- lengthBuffer.clear() ;
- }
-
-
- /**
- * Fires a complete TLV decoded event by making the appropriate calls to
- * the callback and the monitor.
- */
- private void fireDecodeOccurred( Tuple tlv )
- {
- if ( cb != null )
- {
- cb.decodeOccurred( this, tlv ) ;
- }
-
- if ( monitor != null )
- {
- monitor.callbackOccured( this, cb, tlv ) ;
- }
- }
-
-
- /**
- * Increments the indices of constructed TLV's within the TLV Stack.
- *
- * @param increment the amount to increment indices by.
- */
- private void updateStack( int increment )
- {
- for ( int ii = 0; ii < tlvStack.size(); ii++ )
- {
- Tuple t = ( Tuple ) tlvStack.get( ii ) ;
-
- t.index += increment ;
-
- if ( t.valueIndex == Tuple.UNDEFINED )
- {
- t.valueIndex = 0 ;
- }
-
- t.valueIndex += increment ;
- }
-
- if ( tlvStack.isEmpty() )
- {
- return ;
- }
-
- do
- {
- Tuple top = ( Tuple ) tlvStack.peek() ;
-
- if ( top.isIndefinate() )
- {
- break ;
- }
- if ( top.valueIndex >= top.length )
- {
- tlvStack.pop() ;
- fireDecodeOccurred( top ) ;
- }
- else
- {
- break ;
- }
- } while( tlvStack.size() > 0 ) ;
- }
-
-
- private void handleIndefinateTerminator()
- {
- /*
- * Check for a INDEFINATE length TLV when tlv is primitive with
- * zero length and a type class of UNIVERSAL which is reserved
- * for use by encoding rules.
- */
- if ( tlv.id == 0 && tlv.length == 0 &&
- tlv.typeClass == TypeClass.UNIVERSAL )
- {
- String msg = "expected indefinate length TLV on the stack" ;
-
- if ( tlvStack.isEmpty() )
- {
- IllegalStateException e = new IllegalStateException(
- msg + " but the stack is empty" ) ;
-
- if ( monitor != null )
- {
- monitor.fatalError( this, e ) ;
- }
-
- throw e ;
- }
-
- Tuple top = ( Tuple ) tlvStack.peek() ;
- if ( top.length != Tuple.INDEFINATE )
- {
- IllegalStateException e = new IllegalStateException(
- msg + " but TLV on top has a definate length" ) ;
-
- if ( monitor == null )
- {
- throw e ;
- }
- else
- {
- monitor.fatalError( this, e ) ;
- }
-
- return ;
- }
-
- tlvStack.pop() ;
- fireDecodeOccurred( top ) ;
- tlv.clear() ;
- state = BERDecoderState.TAG ;
- }
- }
-
-
- // ------------------------------------------------------------------------
- // Methods used for testing
- // ------------------------------------------------------------------------
-
-
- /**
- * Gets the current state of this BERDecoder. Used only for debugging and
- * testing.
- *
- * @return the state enum
- */
- BERDecoderState getState()
- {
- return state ;
- }
-
-
- /**
- * Gets a cloned copy of the current tuple. Used only for debugging and
- * testing.
- *
- * @return a clone of the current tlv
- */
- Tuple getCurrentTuple()
- {
- return ( Tuple ) tlv.clone() ;
- }
-
-
- /**
- * Gets a deep copy of the constructed tuple stack. Used only for debugging
- * and testing.
- *
- * @return a deep copy of the tuple stack
- */
- Stack getTupleStack()
- {
- Stack stack = new Stack() ;
-
- for ( int ii = 0; ii < tlvStack.size(); ii++ )
- {
- Tuple t = ( Tuple ) tlvStack.get( ii ) ;
- stack.add( t.clone() ) ;
- }
-
- return stack ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.Stack ;
+
+import java.nio.ByteBuffer ;
+
+import org.apache.commons.codec.binary.Binary ;
+import org.apache.commons.codec.DecoderException ;
+import org.apache.commons.codec.stateful.DecoderMonitor ;
+import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+import org.apache.commons.codec.stateful.DecoderMonitorAdapter ;
+import org.apache.commons.collections.primitives.ArrayByteList ;
+
+
+/**
+ * Low level BER encoded bytes to Tag Value Length (TLV) tuple decoder.
+ * This decoder is a low level event based parser which operates in a fashion
+ * similar to the way SAX works except the elements of concern are the tag,
+ * length, and value entities.
+ * <p>
+ * Instance variables and a Stack is used to track the state of the decoder
+ * between decode calls. The stack maintains the nesting of TLV tuples. Rather
+ * than creating new TLV tuple instances every time a single tuple is reused for
+ * primitive types and new tlv tuples are cloned for constructed types. The
+ * tuple fed to the callback must therefore be used very carefully - its values
+ * must be copied to prevent their loss.
+ * </p>
+ * <p>
+ * Note that all tuples are not created equal. Constructed TLVs nesting others
+ * will have null value members. Only TLV tuples of primitive types or the
+ * leaf TLV tuples of the TLV tuple tree will only contain non null values.
+ * Therefore the nature of a TLV tuple should be investigated by callbacks
+ * before attempting to interpret their values.
+ * </p>
+ *
+ * @see Tuple for TLV tuple value size limitations
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERDecoder implements StatefulDecoder
+{
+ public static final BERDecoderCallback DEFAULT_CALLBACK =
+ new BERDecoderCallbackAdapter() ;
+ public static final DecoderMonitor DEFAULT_MONITOR =
+ new DecoderMonitorAdapter() ;
+
+ /** this decoder's callback */
+ private BERDecoderCallback cb = DEFAULT_CALLBACK ;
+ /** the monitor used by this decoder */
+ private DecoderMonitor monitor = DEFAULT_MONITOR ;
+
+ /** the single TLV tuple used by this decoder */
+ private final Tuple tlv = new Tuple() ;
+
+ /** a byte buffer used to collect the arriving tag octets */
+ private final ArrayByteList tagBuffer = new ArrayByteList( 10 ) ;
+ /** a byte buffer used to collect the arriving legth octets */
+ private final ArrayByteList lengthBuffer = new ArrayByteList( 10 ) ;
+
+ /** stack of nested/constructed TLV tuples */
+ private final Stack tlvStack = new Stack() ;
+
+ /** the length of the length data */
+ private int lengthOfLength = 0 ;
+
+ /** the state of this decoder */
+ private BERDecoderState state = BERDecoderState.getStartState() ;
+
+
+ // ------------------------------------------------------------------------
+ // StatefulDecoder Methods
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Expects a ByteBuffer containing BER encoded data.
+ *
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#decode(
+ * java.lang.Object)
+ * @throws ClassCastException if the encoded argument is not a ByteBuffer
+ * @throws IllegalArgumentException if the buffer is null or empty
+ */
+ public void decode( Object encoded ) throws DecoderException
+ {
+ ByteBuffer buf = ( ByteBuffer ) encoded ;
+
+ /* --------------------------------------------------------------------
+ Handle any unusual input by informing the monitor.
+ ------------------------------------------------------------------ */
+
+ if ( buf == null && monitor != null )
+ {
+ String msg = "ignoring null argument to decode()" ;
+ monitor.warning( this, new IllegalArgumentException( msg ) ) ;
+ return ;
+ }
+
+ if ( buf.remaining() == 0 && monitor != null )
+ {
+ String msg = "ignoring empty buffer" ;
+ monitor.warning( this, new IllegalArgumentException( msg ) ) ;
+ return ;
+ }
+
+ /*
+ * This loop is used instead of costly recursion. This requires each
+ * of the statewise decode methods to process bytes from the buffer. If
+ * they can process enough to switch state they do and return
+ * immediately. This loop makes sure the next processing state is
+ * handled if there is more data for that state.
+ */
+ while ( buf.hasRemaining() )
+ {
+ switch( state.getValue() )
+ {
+ case( BERDecoderState.TAG_VAL ):
+ decodeTag( buf ) ;
+ break ;
+ case( BERDecoderState.LENGTH_VAL ):
+ decodeLength( buf ) ;
+ break ;
+ case( BERDecoderState.VALUE_VAL ):
+ decodeValue( buf ) ;
+ break ;
+ }
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#setCallback(
+ * org.apache.commons.codec.stateful.DecoderCallback)
+ */
+ public void setCallback( DecoderCallback cb )
+ {
+ this.cb = ( BERDecoderCallback ) cb ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#setDecoderMonitor(
+ * org.apache.commons.codec.stateful.DecoderMonitor)
+ */
+ public void setDecoderMonitor( DecoderMonitor monitor )
+ {
+ this.monitor = monitor ;
+ }
+
+
+ // ------------------------------------------------------------------------
+ // State Based Decode Methods
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Extracts the TLV's tag portion from the buffer.
+ *
+ * @param buf the byte byffer containing BER encoded data
+ */
+ private void decodeTag( ByteBuffer buf ) throws DecoderException
+ {
+ for ( tlv.index = 0; buf.hasRemaining(); tlv.index++ )
+ {
+ byte octet = buf.get() ;
+ tagBuffer.add( octet ) ;
+
+ if ( tagBuffer.size() == 1 )
+ {
+ int id = BERUtils.SHORT_TAG_MASK & octet ;
+ tlv.isPrimitive = BERUtils.isPrimitive( octet ) ;
+ tlv.typeClass = BERUtils.getTypeClass( octet ) ;
+
+ // continue to collect more octets if this is the long Tag form
+ if ( id == BERUtils.SHORT_TAG_MASK )
+ {
+ continue ;
+ }
+
+ // its the short form so we get the id, switch state & return
+ tlv.id = id ;
+ fireTagDecoded() ;
+ state = state.getNext( tlv.isPrimitive ) ;
+
+ // we moved by one byte so we update stack indices by 1
+ updateStack( 1 ) ;
+ return ;
+ }
+
+ /*
+ * From here on we're dealing with the long form of the tag. The
+ * terminating octet for the long form uses a raised most
+ * significant bit to flag the end of the train of octets for the
+ * tag id.
+ */
+ if ( ( octet & Binary.BIT_7 ) == 0 )
+ {
+ tlv.id = BERUtils.getTagId( tagBuffer ) ;
+ fireTagDecoded() ;
+ state = state.getNext( tlv.isPrimitive ) ;
+
+ // we moved by many bytes so we update stack accordingly
+ updateStack( tagBuffer.size() ) ;
+ return ;
+ }
+ }
+ }
+
+
+ /**
+ * Extracts the length portion from the buffer.
+ *
+ * @param buf the byte byffer containing BER encoded data
+ */
+ private void decodeLength( ByteBuffer buf ) throws DecoderException
+ {
+ while ( buf.hasRemaining() )
+ {
+ tlv.index++ ;
+ byte octet = buf.get() ;
+ lengthBuffer.add( octet ) ;
+
+ if ( lengthBuffer.size() == 1 )
+ {
+ lengthOfLength = octet & BERUtils.LONG_TAG_MASK ;
+
+ // handle the short form of the length here
+ if ( ( octet & Binary.BIT_7 ) == 0 )
+ {
+ lengthOfLength = 0 ;
+ tlv.length = octet ;
+ tlv.valueIndex = Tuple.UNDEFINED ;
+
+ if ( tlv.isPrimitive )
+ {
+ tlv.value = new byte[tlv.length] ;
+ fireLengthDecoded() ;
+ state = BERDecoderState.VALUE ;
+ // we moved by one byte so we update stack indices by 1
+ updateStack( 1 ) ;
+ }
+ else
+ {
+ // We moved by one byte so we update stack indices by 1
+ // need to do this here so we do not double update the
+ // current tuple after pushing it onto the stack.
+ updateStack( 1 ) ;
+
+ tlvStack.push( tlv.clone() ) ;
+ fireLengthDecoded() ;
+ tlv.clear() ;
+ state = BERDecoderState.TAG ;
+ }
+
+ handleIndefinateTerminator() ;
+ return ;
+ }
+ // the indefinate form of the length
+ else if ( lengthOfLength == 0 )
+ {
+ lengthOfLength = Tuple.INDEFINATE ;
+ tlv.index = Tuple.INDEFINATE ;
+ tlv.length = Tuple.INDEFINATE ;
+ tlv.valueIndex = Tuple.UNDEFINED ;
+ fireLengthDecoded() ;
+ tlvStack.push( tlv.clone() ) ;
+ tlv.clear() ;
+ state = BERDecoderState.TAG ;
+
+ // we moved by one byte so we update stack indices by 1
+ updateStack( 1 ) ;
+ return ;
+ }
+ }
+
+ /*
+ * if we have collected all the octets needed for computing the long
+ * form length so we need to calculate the length push it and return
+ */
+ if ( lengthBuffer.size() == lengthOfLength + 1 )
+ {
+ lengthOfLength = 0 ;
+ tlv.length = BERUtils.getLength( lengthBuffer ) ;
+ tlv.valueIndex = Tuple.UNDEFINED ;
+
+ if ( tlv.isPrimitive )
+ {
+ tlv.value = new byte[tlv.length] ;
+ fireLengthDecoded() ;
+ state = BERDecoderState.VALUE ;
+ }
+ else
+ {
+ tlvStack.push( tlv.clone() ) ;
+ fireLengthDecoded() ;
+ tlv.clear() ;
+ state = BERDecoderState.TAG ;
+ }
+
+ /*
+ * we moved by one byte + lengthOfLength so we update stack
+ * indices by lengthOfLength + 1
+ */
+ updateStack( lengthOfLength + 1 ) ;
+ return ;
+ }
+ }
+ }
+
+
+ /**
+ * Extracts the value portion from the buffer for a primitive type.
+ *
+ * @param buf the byte byffer containing BER encoded data
+ */
+ private void decodeValue( ByteBuffer buf ) throws DecoderException
+ {
+ byte[] value = ( byte [] ) tlv.value ;
+ int offset = Tuple.UNDEFINED ;
+ int needToRead = Tuple.UNDEFINED ;
+
+ if ( ! tlv.isPrimitive )
+ {
+ IllegalStateException e = new IllegalStateException(
+ "should only be working with primitive tlv" ) ;
+
+ if ( monitor == null )
+ {
+ throw e ;
+ }
+ else
+ {
+ monitor.fatalError( this, e ) ;
+ }
+
+ return ;
+ }
+
+ if ( ! buf.hasRemaining() )
+ {
+ return ;
+ }
+
+ /*
+ * setup to start decoding the value
+ */
+ if ( tlv.valueIndex == Tuple.UNDEFINED )
+ {
+ needToRead = tlv.length ;
+ offset = 0 ;
+ }
+ else
+ {
+ needToRead = tlv.length - tlv.valueIndex ;
+ offset = tlv.valueIndex ;
+ }
+
+ /*
+ * check if we have the remainder of the value to complete the
+ * TLV within the current buffer - if so we read all of it
+ */
+ if ( buf.remaining() >= needToRead )
+ {
+ buf.get( value, offset, needToRead ) ;
+ tlv.valueIndex = tlv.length ;
+ tlv.index += needToRead ;
+ fireDecodeOccurred( tlv ) ;
+ updateStack( needToRead ) ;
+ tlv.clear() ;
+ state = BERDecoderState.TAG ;
+ }
+
+ /*
+ * the buffer does not contain the rest of the value we need in order
+ * to complete the current TLV - the value is fragmented so we read
+ * what we can and update indices by that amount.
+ */
+ else
+ {
+ if ( tlv.valueIndex == Tuple.UNDEFINED )
+ {
+ tlv.valueIndex = 0 ;
+ }
+
+ int remaining = buf.remaining() ;
+ buf.get( value, offset, remaining ) ;
+ tlv.valueIndex += remaining ;
+ updateStack( remaining ) ;
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // private utility methods
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Fires a tag decoded event by making the appropriate calls to the
+ * callback and the monitor. If the monitor is a BERDecoderMonitor with
+ * extended reporting, then those methods are invoked.
+ *
+ * Also as a side-effect this method clears the tag buffer once it has
+ * finished notifying the monitor and calling the callback.
+ */
+ private void fireTagDecoded()
+ {
+ if ( cb != null )
+ {
+ cb.tagDecoded( tlv ) ;
+ }
+
+ if ( monitor != null && monitor instanceof BERDecoderMonitor )
+ {
+ BERDecoderMonitor berMonitor = ( BERDecoderMonitor ) monitor ;
+ berMonitor.tagDecoded( tlv, tagBuffer.toArray() ) ;
+ }
+
+ tagBuffer.clear() ;
+ }
+
+
+ /**
+ * Fires a length decoded event by making the appropriate calls to the
+ * callback and the monitor. If the monitor is a BERDecoderMonitor with
+ * extended reporting, then those methods are invoked.
+ *
+ * Also as a side-effect this method clears the length buffer once it has
+ * finished notifying the monitor and calling the callback.
+ */
+ private void fireLengthDecoded()
+ {
+ if ( cb != null )
+ {
+ cb.lengthDecoded( tlv ) ;
+ }
+
+ if ( monitor != null && monitor instanceof BERDecoderMonitor )
+ {
+ BERDecoderMonitor berMonitor = ( BERDecoderMonitor ) monitor ;
+ berMonitor.lengthDecoded( tlv, lengthBuffer.toArray() ) ;
+ }
+
+ lengthBuffer.clear() ;
+ }
+
+
+ /**
+ * Fires a complete TLV decoded event by making the appropriate calls to
+ * the callback and the monitor.
+ */
+ private void fireDecodeOccurred( Tuple tlv )
+ {
+ if ( cb != null )
+ {
+ cb.decodeOccurred( this, tlv ) ;
+ }
+
+ if ( monitor != null )
+ {
+ monitor.callbackOccured( this, cb, tlv ) ;
+ }
+ }
+
+
+ /**
+ * Increments the indices of constructed TLV's within the TLV Stack.
+ *
+ * @param increment the amount to increment indices by.
+ */
+ private void updateStack( int increment )
+ {
+ for ( int ii = 0; ii < tlvStack.size(); ii++ )
+ {
+ Tuple t = ( Tuple ) tlvStack.get( ii ) ;
+
+ t.index += increment ;
+
+ if ( t.valueIndex == Tuple.UNDEFINED )
+ {
+ t.valueIndex = 0 ;
+ }
+
+ t.valueIndex += increment ;
+ }
+
+ if ( tlvStack.isEmpty() )
+ {
+ return ;
+ }
+
+ do
+ {
+ Tuple top = ( Tuple ) tlvStack.peek() ;
+
+ if ( top.isIndefinate() )
+ {
+ break ;
+ }
+ if ( top.valueIndex >= top.length )
+ {
+ tlvStack.pop() ;
+ fireDecodeOccurred( top ) ;
+ }
+ else
+ {
+ break ;
+ }
+ } while( tlvStack.size() > 0 ) ;
+ }
+
+
+ private void handleIndefinateTerminator()
+ {
+ /*
+ * Check for a INDEFINATE length TLV when tlv is primitive with
+ * zero length and a type class of UNIVERSAL which is reserved
+ * for use by encoding rules.
+ */
+ if ( tlv.id == 0 && tlv.length == 0 &&
+ tlv.typeClass == TypeClass.UNIVERSAL )
+ {
+ String msg = "expected indefinate length TLV on the stack" ;
+
+ if ( tlvStack.isEmpty() )
+ {
+ IllegalStateException e = new IllegalStateException(
+ msg + " but the stack is empty" ) ;
+
+ if ( monitor != null )
+ {
+ monitor.fatalError( this, e ) ;
+ }
+
+ throw e ;
+ }
+
+ Tuple top = ( Tuple ) tlvStack.peek() ;
+ if ( top.length != Tuple.INDEFINATE )
+ {
+ IllegalStateException e = new IllegalStateException(
+ msg + " but TLV on top has a definate length" ) ;
+
+ if ( monitor == null )
+ {
+ throw e ;
+ }
+ else
+ {
+ monitor.fatalError( this, e ) ;
+ }
+
+ return ;
+ }
+
+ tlvStack.pop() ;
+ fireDecodeOccurred( top ) ;
+ tlv.clear() ;
+ state = BERDecoderState.TAG ;
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Methods used for testing
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Gets the current state of this BERDecoder. Used only for debugging and
+ * testing.
+ *
+ * @return the state enum
+ */
+ BERDecoderState getState()
+ {
+ return state ;
+ }
+
+
+ /**
+ * Gets a cloned copy of the current tuple. Used only for debugging and
+ * testing.
+ *
+ * @return a clone of the current tlv
+ */
+ Tuple getCurrentTuple()
+ {
+ return ( Tuple ) tlv.clone() ;
+ }
+
+
+ /**
+ * Gets a deep copy of the constructed tuple stack. Used only for debugging
+ * and testing.
+ *
+ * @return a deep copy of the tuple stack
+ */
+ Stack getTupleStack()
+ {
+ Stack stack = new Stack() ;
+
+ for ( int ii = 0; ii < tlvStack.size(); ii++ )
+ {
+ Tuple t = ( Tuple ) tlvStack.get( ii ) ;
+ stack.add( t.clone() ) ;
+ }
+
+ return stack ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallback.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallback.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallback.java Sun Mar 14 14:02:18 2004
@@ -1,58 +1,58 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.codec.stateful.DecoderCallback ;
-
-
-/**
- * A specialized decoder callback that handles specific BER events.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public interface BERDecoderCallback extends DecoderCallback
-{
- /**
- * A tag was decoded. The following tag properties of the TLV tuple are
- * valid at this point:
- * <ul>
- * <li>id</li>
- * <li>isPrimitive</li>
- * <li>typeClass</li>
- * </ul>
- *
- * @param tlv the TLV tuple
- */
- void tagDecoded( Tuple tlv ) ;
-
- /**
- * A tag was decoded. The following tag properties of the TLV tuple are
- * valid at this point:
- * <ul>
- * <li>id</li>
- * <li>isPrimitive</li>
- * <li>typeClass</li>
- * <li>length</li>
- * </ul>
- *
- * @param tlv the TLV tuple
- */
- void lengthDecoded( Tuple tlv ) ;
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.codec.stateful.DecoderCallback ;
+
+
+/**
+ * A specialized decoder callback that handles specific BER events.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface BERDecoderCallback extends DecoderCallback
+{
+ /**
+ * A tag was decoded. The following tag properties of the TLV tuple are
+ * valid at this point:
+ * <ul>
+ * <li>id</li>
+ * <li>isPrimitive</li>
+ * <li>typeClass</li>
+ * </ul>
+ *
+ * @param tlv the TLV tuple
+ */
+ void tagDecoded( Tuple tlv ) ;
+
+ /**
+ * A tag was decoded. The following tag properties of the TLV tuple are
+ * valid at this point:
+ * <ul>
+ * <li>id</li>
+ * <li>isPrimitive</li>
+ * <li>typeClass</li>
+ * <li>length</li>
+ * </ul>
+ *
+ * @param tlv the TLV tuple
+ */
+ void lengthDecoded( Tuple tlv ) ;
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallbackAdapter.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallbackAdapter.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderCallbackAdapter.java Sun Mar 14 14:02:18 2004
@@ -1,57 +1,57 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.codec.stateful.StatefulDecoder ;
-
-
-/**
- * A do nothing callback adapter.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class BERDecoderCallbackAdapter implements BERDecoderCallback
-{
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.BERDecoderCallback#tagDecoded(
- * org.apache.snickers.ber.Tuple)
- */
- public void tagDecoded( Tuple tlv )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.BERDecoderCallback#lengthDecoded(
- * org.apache.snickers.ber.Tuple)
- */
- public void lengthDecoded( Tuple tlv )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
- */
- public void decodeOccurred( StatefulDecoder decoder, Object decoded )
- {
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+
+
+/**
+ * A do nothing callback adapter.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERDecoderCallbackAdapter implements BERDecoderCallback
+{
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#tagDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void tagDecoded( Tuple tlv )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.BERDecoderCallback#lengthDecoded(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void lengthDecoded( Tuple tlv )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
+ */
+ public void decodeOccurred( StatefulDecoder decoder, Object decoded )
+ {
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderMonitor.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderMonitor.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERDecoderMonitor.java Sun Mar 14 14:02:18 2004
@@ -1,35 +1,35 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-
-
-/**
- * A monitor designed for extended BER decoder functionality with greater
- * detail to specific BER decoder events.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public interface BERDecoderMonitor extends DecoderMonitor
-{
- void tagDecoded( Tuple tlv, byte[] tagData ) ;
- void lengthDecoded( Tuple tlv, byte[] lengthData ) ;
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.codec.stateful.DecoderMonitor ;
+
+
+/**
+ * A monitor designed for extended BER decoder functionality with greater
+ * detail to specific BER decoder events.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface BERDecoderMonitor extends DecoderMonitor
+{
+ void tagDecoded( Tuple tlv, byte[] tagData ) ;
+ void lengthDecoded( Tuple tlv, byte[] lengthData ) ;
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERUtils.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERUtils.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/BERUtils.java Sun Mar 14 14:02:18 2004
@@ -1,242 +1,242 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.codec.binary.Binary ;
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
-
-
-/**
- * Basic Encoding Rule (BER) utility functions.
- *
- * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
- * @author $Author: akarasulu $
- * @version $Rev$
- */
-public final class BERUtils
-{
- /** mask for the tag value of a short tag value format in a single octet */
- public static final int SHORT_TAG_MASK = Binary.BIT_0 | Binary.BIT_1 |
- Binary.BIT_2 | Binary.BIT_3 | Binary.BIT_4 ;
- /** mask for the tag value of long tag value format in more than 1 octet */
- public static final int LONG_TAG_MASK = Binary.BIT_0 | Binary.BIT_1 |
- Binary.BIT_2 | Binary.BIT_3 | Binary.BIT_4 | Binary.BIT_5 |
- Binary.BIT_6 ;
-
-
- /**
- * Gets the ASN.1 type's class using a TLV tag.
- *
- * @param octet the first octet of the TLV
- * @return the TypeClass enumeration for the ASN.1 type's class
- */
- public final static TypeClass getTypeClass( byte octet )
- {
- return TypeClass.getTypeClass( octet ) ;
- }
-
-
- /**
- * Checks to see if the TLV is constructed.
- *
- * @param octet the first octet of the TLV
- * @return true if this TLV contains more TLVs, false if it's a simple type
- */
- public final static boolean isConstructed( byte octet )
- {
- return ( octet & Binary.BIT_5 ) == Binary.BIT_5 ;
- }
-
-
- /**
- * Checks to see if the TLV is constructed.
- *
- * @param octet the first octet of the TLV
- * @return true if this TLV contains more TLVs, false if it's a simple type
- */
- public final static boolean isConstructed( int octet )
- {
- return ( octet & Binary.BIT_5 ) == Binary.BIT_5 ;
- }
-
-
- /**
- * Checks to see if the TLV is a primitive.
- *
- * @param octet the first octet of the TLV
- * @return true if this TLV is a simple type, false if it contains TLVs
- */
- public final static boolean isPrimitive( byte octet )
- {
- return ( octet & Binary.BIT_5 ) == 0 ;
- }
-
-
- /**
- * Checks to see if the TLV is a primitive.
- *
- * @param octet the first octet of the TLV
- * @return true if this TLV is a simple type, false if it contains TLVs
- */
- public final static boolean isPrimitive( int octet )
- {
- return ( octet & Binary.BIT_5 ) == 0 ;
- }
-
-
- /**
- * Gets the tag id of a TLV from the tag octets.
- *
- * @param octets the set of octets needed to determine the tag value
- * (a.k.a identifier octets)
- * @return the tag id
- * @throws DecoderException if the id cannot be determined due to
- * type limitations of this method's return type.
- */
- public final static int getTagId( byte[] octets )
- throws DecoderException
- {
- if ( octets.length > 6 )
- {
- /*
- * If this exception is ever thrown which is highly unlikely, then
- * we need to switch to another data type to return because after
- * 5 bytes the int can no longer hold the number.
- */
- throw new DecoderException( "Tag number is too large." ) ;
- }
-
- int id = octets[0] & SHORT_TAG_MASK ;
-
- // if bits are not all 1's then return the value which is less than 31
- if ( id != SHORT_TAG_MASK && octets.length == 1 )
- {
- return id ;
- }
-
- // clear the id now
- id = 0 ;
-
- // calculate tag value w/ long tag format
- for( int ii = 1 ; ii < octets.length; ii++ )
- {
- int shift = ( ii - 1 ) * 7 ;
- if ( shift > 0 )
- {
- id |= ( octets[ii] & LONG_TAG_MASK ) << shift ;
- }
- else
- {
- id |= ( octets[ii] & LONG_TAG_MASK ) ;
- }
- }
-
- return id ;
- }
-
-
- /**
- * Gets the tag id of a TLV from the tag octets.
- *
- * @param octets the set of octets needed to determine the tag value
- * (a.k.a identifier octets)
- * @return the tag id
- * @throws DecoderException if the id cannot be determined due to
- * type limitations of this method's return type.
- */
- public final static int getTagId( ArrayByteList octets )
- throws DecoderException
- {
- if ( octets.size() > 6 )
- {
- /*
- * If this exception is ever thrown which is highly unlikely, then
- * we need to switch to another data type to return because after
- * 5 bytes the int can no longer hold the number.
- */
- throw new DecoderException( "Tag number is too large." ) ;
- }
-
- int id = octets.get( 0 ) & SHORT_TAG_MASK ;
-
- // if bits are not all 1's then return the value which is less than 31
- if ( id != SHORT_TAG_MASK && octets.size() == 1 )
- {
- return id ;
- }
-
- // clear the id now
- id = 0 ;
-
- // calculate tag value w/ long tag format
- for( int ii = 1 ; ii < octets.size(); ii++ )
- {
- int shift = ( ii - 1 ) * 7 ;
- if ( shift > 0 )
- {
- id |= ( octets.get( ii ) & LONG_TAG_MASK ) << shift ;
- }
- else
- {
- id |= ( octets.get( ii ) & LONG_TAG_MASK ) ;
- }
- }
-
- return id ;
- }
-
-
- /**
- * Decodes the length of a value for a tlv using the Length field bytes.
- *
- * @param octets the length field bytes in the TLV
- * @return the length of the TLV
- * @throws DecoderException if the precision cannot hold the number
- */
- public static int getLength( ArrayByteList octets ) throws DecoderException
- {
- if ( octets.size() >= 6 )
- {
- /*
- * If this exception is ever thrown which is highly unlikely, then
- * we need to switch to another data type to return because after
- * 5 bytes the int can no longer hold the number.
- */
- throw new DecoderException( "Length number is too large." ) ;
- }
-
- // if we are using the short form then just return the first octet
- if ( ( octets.get( 0 ) & Binary.BIT_7 ) == 0 )
- {
- return octets.get( 0 ) ;
- }
-
- // clear the id now
- int length = 0 ;
-
- // calculate tag value w/ long tag format
- for( int ii = 1 ; ii < octets.size(); ii++ )
- {
- int shift = ( ii - 1 ) * 8 ;
- length |= ( 0x00ff & ( int ) octets.get( ii ) ) << shift ;
- }
-
- return length ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.codec.binary.Binary ;
+import org.apache.commons.codec.DecoderException ;
+import org.apache.commons.collections.primitives.ArrayByteList ;
+
+
+/**
+ * Basic Encoding Rule (BER) utility functions.
+ *
+ * @author <a href="mailto:akarasulu@apache.org">Alex Karasulu</a>
+ * @author $Author: akarasulu $
+ * @version $Rev$
+ */
+public final class BERUtils
+{
+ /** mask for the tag value of a short tag value format in a single octet */
+ public static final int SHORT_TAG_MASK = Binary.BIT_0 | Binary.BIT_1 |
+ Binary.BIT_2 | Binary.BIT_3 | Binary.BIT_4 ;
+ /** mask for the tag value of long tag value format in more than 1 octet */
+ public static final int LONG_TAG_MASK = Binary.BIT_0 | Binary.BIT_1 |
+ Binary.BIT_2 | Binary.BIT_3 | Binary.BIT_4 | Binary.BIT_5 |
+ Binary.BIT_6 ;
+
+
+ /**
+ * Gets the ASN.1 type's class using a TLV tag.
+ *
+ * @param octet the first octet of the TLV
+ * @return the TypeClass enumeration for the ASN.1 type's class
+ */
+ public final static TypeClass getTypeClass( byte octet )
+ {
+ return TypeClass.getTypeClass( octet ) ;
+ }
+
+
+ /**
+ * Checks to see if the TLV is constructed.
+ *
+ * @param octet the first octet of the TLV
+ * @return true if this TLV contains more TLVs, false if it's a simple type
+ */
+ public final static boolean isConstructed( byte octet )
+ {
+ return ( octet & Binary.BIT_5 ) == Binary.BIT_5 ;
+ }
+
+
+ /**
+ * Checks to see if the TLV is constructed.
+ *
+ * @param octet the first octet of the TLV
+ * @return true if this TLV contains more TLVs, false if it's a simple type
+ */
+ public final static boolean isConstructed( int octet )
+ {
+ return ( octet & Binary.BIT_5 ) == Binary.BIT_5 ;
+ }
+
+
+ /**
+ * Checks to see if the TLV is a primitive.
+ *
+ * @param octet the first octet of the TLV
+ * @return true if this TLV is a simple type, false if it contains TLVs
+ */
+ public final static boolean isPrimitive( byte octet )
+ {
+ return ( octet & Binary.BIT_5 ) == 0 ;
+ }
+
+
+ /**
+ * Checks to see if the TLV is a primitive.
+ *
+ * @param octet the first octet of the TLV
+ * @return true if this TLV is a simple type, false if it contains TLVs
+ */
+ public final static boolean isPrimitive( int octet )
+ {
+ return ( octet & Binary.BIT_5 ) == 0 ;
+ }
+
+
+ /**
+ * Gets the tag id of a TLV from the tag octets.
+ *
+ * @param octets the set of octets needed to determine the tag value
+ * (a.k.a identifier octets)
+ * @return the tag id
+ * @throws DecoderException if the id cannot be determined due to
+ * type limitations of this method's return type.
+ */
+ public final static int getTagId( byte[] octets )
+ throws DecoderException
+ {
+ if ( octets.length > 6 )
+ {
+ /*
+ * If this exception is ever thrown which is highly unlikely, then
+ * we need to switch to another data type to return because after
+ * 5 bytes the int can no longer hold the number.
+ */
+ throw new DecoderException( "Tag number is too large." ) ;
+ }
+
+ int id = octets[0] & SHORT_TAG_MASK ;
+
+ // if bits are not all 1's then return the value which is less than 31
+ if ( id != SHORT_TAG_MASK && octets.length == 1 )
+ {
+ return id ;
+ }
+
+ // clear the id now
+ id = 0 ;
+
+ // calculate tag value w/ long tag format
+ for( int ii = 1 ; ii < octets.length; ii++ )
+ {
+ int shift = ( ii - 1 ) * 7 ;
+ if ( shift > 0 )
+ {
+ id |= ( octets[ii] & LONG_TAG_MASK ) << shift ;
+ }
+ else
+ {
+ id |= ( octets[ii] & LONG_TAG_MASK ) ;
+ }
+ }
+
+ return id ;
+ }
+
+
+ /**
+ * Gets the tag id of a TLV from the tag octets.
+ *
+ * @param octets the set of octets needed to determine the tag value
+ * (a.k.a identifier octets)
+ * @return the tag id
+ * @throws DecoderException if the id cannot be determined due to
+ * type limitations of this method's return type.
+ */
+ public final static int getTagId( ArrayByteList octets )
+ throws DecoderException
+ {
+ if ( octets.size() > 6 )
+ {
+ /*
+ * If this exception is ever thrown which is highly unlikely, then
+ * we need to switch to another data type to return because after
+ * 5 bytes the int can no longer hold the number.
+ */
+ throw new DecoderException( "Tag number is too large." ) ;
+ }
+
+ int id = octets.get( 0 ) & SHORT_TAG_MASK ;
+
+ // if bits are not all 1's then return the value which is less than 31
+ if ( id != SHORT_TAG_MASK && octets.size() == 1 )
+ {
+ return id ;
+ }
+
+ // clear the id now
+ id = 0 ;
+
+ // calculate tag value w/ long tag format
+ for( int ii = 1 ; ii < octets.size(); ii++ )
+ {
+ int shift = ( ii - 1 ) * 7 ;
+ if ( shift > 0 )
+ {
+ id |= ( octets.get( ii ) & LONG_TAG_MASK ) << shift ;
+ }
+ else
+ {
+ id |= ( octets.get( ii ) & LONG_TAG_MASK ) ;
+ }
+ }
+
+ return id ;
+ }
+
+
+ /**
+ * Decodes the length of a value for a tlv using the Length field bytes.
+ *
+ * @param octets the length field bytes in the TLV
+ * @return the length of the TLV
+ * @throws DecoderException if the precision cannot hold the number
+ */
+ public static int getLength( ArrayByteList octets ) throws DecoderException
+ {
+ if ( octets.size() >= 6 )
+ {
+ /*
+ * If this exception is ever thrown which is highly unlikely, then
+ * we need to switch to another data type to return because after
+ * 5 bytes the int can no longer hold the number.
+ */
+ throw new DecoderException( "Length number is too large." ) ;
+ }
+
+ // if we are using the short form then just return the first octet
+ if ( ( octets.get( 0 ) & Binary.BIT_7 ) == 0 )
+ {
+ return octets.get( 0 ) ;
+ }
+
+ // clear the id now
+ int length = 0 ;
+
+ // calculate tag value w/ long tag format
+ for( int ii = 1 ; ii < octets.size(); ii++ )
+ {
+ int shift = ( ii - 1 ) * 8 ;
+ length |= ( 0x00ff & ( int ) octets.get( ii ) ) << shift ;
+ }
+
+ return length ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/DefaultMutableTupleNode.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/DefaultMutableTupleNode.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/DefaultMutableTupleNode.java Sun Mar 14 14:02:18 2004
@@ -1,442 +1,442 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.nio.ByteBuffer ;
-
-import java.util.Iterator ;
-import java.util.ArrayList ;
-import java.util.Enumeration ;
-import java.util.Collections ;
-
-import javax.swing.tree.TreeNode ;
-import javax.swing.tree.MutableTreeNode ;
-
-import org.apache.commons.lang.StringUtils ;
-
-
-/**
- * The default mutable tuple node.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class DefaultMutableTupleNode
- implements MutableTupleNode, MutableTreeNode
-{
- private Tuple tuple ;
- private ArrayList children = new ArrayList() ;
- private DefaultMutableTupleNode parent ;
-
-
- /**
- * Creates a node without a parent and without a tuple.
- */
- public DefaultMutableTupleNode()
- {
- }
-
-
- /**
- * Creates a node without a parent.
- *
- * @param tuple the tuple to set for this node
- */
- public DefaultMutableTupleNode( Tuple tuple )
- {
- this.tuple = tuple ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.MutableTupleNode#insert(
- * org.apache.snickers.ber.MutableTupleNode, int)
- */
- public void insert( MutableTupleNode child, int index )
- {
- children.add( index, child ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.MutableTupleNode#remove(int)
- */
- public void remove( int index )
- {
- children.remove( index ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.MutableTupleNode#remove(
- * org.apache.snickers.ber.MutableTupleNode)
- */
- public void remove( MutableTupleNode node )
- {
- children.remove( node ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.MutableTupleNode#removeFromParent()
- */
- public void removeFromParent()
- {
- parent.remove( ( MutableTupleNode ) this ) ;
- parent = null ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.MutableTupleNode#setParent(
- * org.apache.snickers.ber.MutableTupleNode)
- */
- public void setParent( MutableTupleNode newParent )
- {
- if ( parent != null )
- {
- parent.remove( ( MutableTupleNode ) this ) ;
- }
-
- parent = ( DefaultMutableTupleNode ) newParent ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.MutableTupleNode#setTuple(
- * org.apache.snickers.ber.Tuple)
- */
- public void setTuple( Tuple t )
- {
- tuple = t ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#getParent()
- */
- public TupleNode getParentTupleNode()
- {
- return parent ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#children()
- */
- public Iterator getChildren()
- {
- return Collections.unmodifiableList( children ).iterator() ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#getChildAt()
- */
- public TupleNode getChildTupleNodeAt( int index )
- {
- return ( TupleNode ) children.get( index ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#getIndex(
- * org.apache.snickers.ber.TupleNode)
- */
- public int getIndex( TupleNode node )
- {
- return children.indexOf( node ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#getChildCount()
- */
- public int getChildCount()
- {
- return children.size() ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#size()
- */
- public int size()
- {
- if ( tuple.isPrimitive() )
- {
- return tuple.size() ;
- }
- else
- {
- int size = tuple.size() ;
-
- if ( tuple.isIndefinate() )
- {
- TupleNode child = null ;
- for ( int ii = 0; ii < children.size(); ii++ )
- {
- child = ( TupleNode ) children.get( ii ) ;
- size += child.size() ;
- }
-
- if ( child != null )
- {
- if ( ! child.getTuple().isIndefinateTerminator() )
- {
- size += 2 ;
- }
- }
- else
- {
- size += 2 ;
- }
- }
-
- return size ;
- }
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.snickers.ber.TupleNode#getTuple()
- */
- public Tuple getTuple()
- {
- return tuple ;
- }
-
-
- /**
- * Depth first generation of this tlv tuple node's encoded image.
- *
- * @see org.apache.snickers.ber.TupleNode#encode()
- */
- public void encode( ByteBuffer dest )
- {
- dest.put( tuple.encode() ) ;
-
- if ( tuple.isPrimitive() )
- {
- return ;
- }
-
- TupleNode child = null ;
- for ( int ii = 0; ii < children.size(); ii++ )
- {
- child = ( TupleNode ) children.get( ii ) ;
- child.encode( dest ) ;
- }
-
- if ( child != null )
- {
- Tuple childTuple = child.getTuple() ;
- if ( childTuple.isIndefinateTerminator() )
- {
- return ;
- }
- }
-
- if ( tuple.isIndefinate() )
- {
- // lay down the termination
- dest.put( ( byte ) 0 ) ;
- dest.put( ( byte ) 0 ) ;
- }
- }
-
-
- /*
- * Prinsts some informative information regarding the tlv node.
- *
- * (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- public String toString()
- {
- StringBuffer buf = new StringBuffer() ;
- buf.append( tuple.getId() ) ;
- buf.append( ' ' ).append( tuple.typeClass ) ;
- buf.append( '[' ).append( tuple.length ).append( ']' ) ;
- buf.append( '[' ).append( new String( (byte[]) tuple.getValue() ) ) ;
- buf.append( ']' ) ;
-
- return buf.toString() ;
- }
-
-
- /**
- * Generates a depth first traversal of this node.
- *
- * @return a depth first traversal print out for this node
- */
- public String toDepthFirstString()
- {
- StringBuffer buf = new StringBuffer() ;
- printDepthFirst( buf, 0 ) ;
- return buf.toString() ;
- }
-
-
- /**
- * Start analyzing the tree rooted at this node.
- */
- public void analyze()
- {
- TupleTreeAnalyzer analyzer = new TupleTreeAnalyzer( this ) ;
- analyzer.startup() ;
- }
-
-
- /**
- * Generates a depth first traversal of this node.
- *
- * @param buf the buffer to capture the traversal into
- * @param level the level down into the tree
- */
- public void printDepthFirst( StringBuffer buf, int level )
- {
- DefaultMutableTupleNode child = null ;
- String levelTab = StringUtils.repeat( "\t", level ) ;
-
- if ( level != 0 )
- {
- buf.append( "\n" ) ;
- }
-
- buf.append( levelTab ).append( tuple.getId() ) ;
- buf.append( ' ' ).append( tuple.typeClass ) ;
- buf.append( '[' ).append( tuple.length ).append( ']' ) ;
- buf.append( '[' ).append( new String( (byte[]) tuple.getValue() ) ) ;
- buf.append( ']' ) ;
- for ( int ii = 0; ii < children.size(); ii++ )
- {
- child = ( DefaultMutableTupleNode ) children.get( ii ) ;
- child.printDepthFirst( buf, level + 1 ) ;
- }
- }
-
-
- // ------------------------------------------------------------------------
- // MutableTreeNode implementations
- // ------------------------------------------------------------------------
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.TreeNode#children()
- */
- public Enumeration children()
- {
- return Collections.enumeration( children ) ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.TreeNode#getAllowsChildren()
- */
- public boolean getAllowsChildren()
- {
- return ! tuple.isPrimitive() ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.TreeNode#getChildAt(int)
- */
- public TreeNode getChildAt( int childIndex )
- {
- return ( TreeNode ) getChildTupleNodeAt( childIndex ) ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.TreeNode#getIndex(javax.swing.tree.TreeNode)
- */
- public int getIndex( TreeNode node )
- {
- return getIndex( ( TupleNode ) node ) ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.TreeNode#getParent()
- */
- public TreeNode getParent()
- {
- return parent ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.MutableTreeNode#insert(
- * javax.swing.tree.MutableTreeNode, int)
- */
- public void insert( MutableTreeNode child, int index )
- {
- insert( ( MutableTupleNode ) child, index ) ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.TreeNode#isLeaf()
- */
- public boolean isLeaf()
- {
- if ( tuple != null && tuple.isPrimitive() )
- {
- return true ;
- }
-
- if ( children.isEmpty() )
- {
- return true ;
- }
-
- return false ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.MutableTreeNode#remove(
- * javax.swing.tree.MutableTreeNode)
- */
- public void remove( MutableTreeNode node )
- {
- remove( ( MutableTupleNode ) node ) ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.MutableTreeNode#setParent(
- * javax.swing.tree.MutableTreeNode)
- */
- public void setParent( MutableTreeNode newParent )
- {
- parent = ( DefaultMutableTupleNode ) newParent ;
- }
-
-
- /* (non-Javadoc)
- * @see javax.swing.tree.MutableTreeNode#setUserObject(java.lang.Object)
- */
- public void setUserObject( Object object )
- {
- tuple = ( Tuple ) object ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.nio.ByteBuffer ;
+
+import java.util.Iterator ;
+import java.util.ArrayList ;
+import java.util.Enumeration ;
+import java.util.Collections ;
+
+import javax.swing.tree.TreeNode ;
+import javax.swing.tree.MutableTreeNode ;
+
+import org.apache.commons.lang.StringUtils ;
+
+
+/**
+ * The default mutable tuple node.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DefaultMutableTupleNode
+ implements MutableTupleNode, MutableTreeNode
+{
+ private Tuple tuple ;
+ private ArrayList children = new ArrayList() ;
+ private DefaultMutableTupleNode parent ;
+
+
+ /**
+ * Creates a node without a parent and without a tuple.
+ */
+ public DefaultMutableTupleNode()
+ {
+ }
+
+
+ /**
+ * Creates a node without a parent.
+ *
+ * @param tuple the tuple to set for this node
+ */
+ public DefaultMutableTupleNode( Tuple tuple )
+ {
+ this.tuple = tuple ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.MutableTupleNode#insert(
+ * org.apache.snickers.ber.MutableTupleNode, int)
+ */
+ public void insert( MutableTupleNode child, int index )
+ {
+ children.add( index, child ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.MutableTupleNode#remove(int)
+ */
+ public void remove( int index )
+ {
+ children.remove( index ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.MutableTupleNode#remove(
+ * org.apache.snickers.ber.MutableTupleNode)
+ */
+ public void remove( MutableTupleNode node )
+ {
+ children.remove( node ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.MutableTupleNode#removeFromParent()
+ */
+ public void removeFromParent()
+ {
+ parent.remove( ( MutableTupleNode ) this ) ;
+ parent = null ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.MutableTupleNode#setParent(
+ * org.apache.snickers.ber.MutableTupleNode)
+ */
+ public void setParent( MutableTupleNode newParent )
+ {
+ if ( parent != null )
+ {
+ parent.remove( ( MutableTupleNode ) this ) ;
+ }
+
+ parent = ( DefaultMutableTupleNode ) newParent ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.MutableTupleNode#setTuple(
+ * org.apache.snickers.ber.Tuple)
+ */
+ public void setTuple( Tuple t )
+ {
+ tuple = t ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#getParent()
+ */
+ public TupleNode getParentTupleNode()
+ {
+ return parent ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#children()
+ */
+ public Iterator getChildren()
+ {
+ return Collections.unmodifiableList( children ).iterator() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#getChildAt()
+ */
+ public TupleNode getChildTupleNodeAt( int index )
+ {
+ return ( TupleNode ) children.get( index ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#getIndex(
+ * org.apache.snickers.ber.TupleNode)
+ */
+ public int getIndex( TupleNode node )
+ {
+ return children.indexOf( node ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#getChildCount()
+ */
+ public int getChildCount()
+ {
+ return children.size() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#size()
+ */
+ public int size()
+ {
+ if ( tuple.isPrimitive() )
+ {
+ return tuple.size() ;
+ }
+ else
+ {
+ int size = tuple.size() ;
+
+ if ( tuple.isIndefinate() )
+ {
+ TupleNode child = null ;
+ for ( int ii = 0; ii < children.size(); ii++ )
+ {
+ child = ( TupleNode ) children.get( ii ) ;
+ size += child.size() ;
+ }
+
+ if ( child != null )
+ {
+ if ( ! child.getTuple().isIndefinateTerminator() )
+ {
+ size += 2 ;
+ }
+ }
+ else
+ {
+ size += 2 ;
+ }
+ }
+
+ return size ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.snickers.ber.TupleNode#getTuple()
+ */
+ public Tuple getTuple()
+ {
+ return tuple ;
+ }
+
+
+ /**
+ * Depth first generation of this tlv tuple node's encoded image.
+ *
+ * @see org.apache.snickers.ber.TupleNode#encode()
+ */
+ public void encode( ByteBuffer dest )
+ {
+ dest.put( tuple.encode() ) ;
+
+ if ( tuple.isPrimitive() )
+ {
+ return ;
+ }
+
+ TupleNode child = null ;
+ for ( int ii = 0; ii < children.size(); ii++ )
+ {
+ child = ( TupleNode ) children.get( ii ) ;
+ child.encode( dest ) ;
+ }
+
+ if ( child != null )
+ {
+ Tuple childTuple = child.getTuple() ;
+ if ( childTuple.isIndefinateTerminator() )
+ {
+ return ;
+ }
+ }
+
+ if ( tuple.isIndefinate() )
+ {
+ // lay down the termination
+ dest.put( ( byte ) 0 ) ;
+ dest.put( ( byte ) 0 ) ;
+ }
+ }
+
+
+ /*
+ * Prinsts some informative information regarding the tlv node.
+ *
+ * (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ public String toString()
+ {
+ StringBuffer buf = new StringBuffer() ;
+ buf.append( tuple.getId() ) ;
+ buf.append( ' ' ).append( tuple.typeClass ) ;
+ buf.append( '[' ).append( tuple.length ).append( ']' ) ;
+ buf.append( '[' ).append( new String( (byte[]) tuple.getValue() ) ) ;
+ buf.append( ']' ) ;
+
+ return buf.toString() ;
+ }
+
+
+ /**
+ * Generates a depth first traversal of this node.
+ *
+ * @return a depth first traversal print out for this node
+ */
+ public String toDepthFirstString()
+ {
+ StringBuffer buf = new StringBuffer() ;
+ printDepthFirst( buf, 0 ) ;
+ return buf.toString() ;
+ }
+
+
+ /**
+ * Start analyzing the tree rooted at this node.
+ */
+ public void analyze()
+ {
+ TupleTreeAnalyzer analyzer = new TupleTreeAnalyzer( this ) ;
+ analyzer.startup() ;
+ }
+
+
+ /**
+ * Generates a depth first traversal of this node.
+ *
+ * @param buf the buffer to capture the traversal into
+ * @param level the level down into the tree
+ */
+ public void printDepthFirst( StringBuffer buf, int level )
+ {
+ DefaultMutableTupleNode child = null ;
+ String levelTab = StringUtils.repeat( "\t", level ) ;
+
+ if ( level != 0 )
+ {
+ buf.append( "\n" ) ;
+ }
+
+ buf.append( levelTab ).append( tuple.getId() ) ;
+ buf.append( ' ' ).append( tuple.typeClass ) ;
+ buf.append( '[' ).append( tuple.length ).append( ']' ) ;
+ buf.append( '[' ).append( new String( (byte[]) tuple.getValue() ) ) ;
+ buf.append( ']' ) ;
+ for ( int ii = 0; ii < children.size(); ii++ )
+ {
+ child = ( DefaultMutableTupleNode ) children.get( ii ) ;
+ child.printDepthFirst( buf, level + 1 ) ;
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // MutableTreeNode implementations
+ // ------------------------------------------------------------------------
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.TreeNode#children()
+ */
+ public Enumeration children()
+ {
+ return Collections.enumeration( children ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.TreeNode#getAllowsChildren()
+ */
+ public boolean getAllowsChildren()
+ {
+ return ! tuple.isPrimitive() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.TreeNode#getChildAt(int)
+ */
+ public TreeNode getChildAt( int childIndex )
+ {
+ return ( TreeNode ) getChildTupleNodeAt( childIndex ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.TreeNode#getIndex(javax.swing.tree.TreeNode)
+ */
+ public int getIndex( TreeNode node )
+ {
+ return getIndex( ( TupleNode ) node ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.TreeNode#getParent()
+ */
+ public TreeNode getParent()
+ {
+ return parent ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.MutableTreeNode#insert(
+ * javax.swing.tree.MutableTreeNode, int)
+ */
+ public void insert( MutableTreeNode child, int index )
+ {
+ insert( ( MutableTupleNode ) child, index ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.TreeNode#isLeaf()
+ */
+ public boolean isLeaf()
+ {
+ if ( tuple != null && tuple.isPrimitive() )
+ {
+ return true ;
+ }
+
+ if ( children.isEmpty() )
+ {
+ return true ;
+ }
+
+ return false ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.MutableTreeNode#remove(
+ * javax.swing.tree.MutableTreeNode)
+ */
+ public void remove( MutableTreeNode node )
+ {
+ remove( ( MutableTupleNode ) node ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.MutableTreeNode#setParent(
+ * javax.swing.tree.MutableTreeNode)
+ */
+ public void setParent( MutableTreeNode newParent )
+ {
+ parent = ( DefaultMutableTupleNode ) newParent ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see javax.swing.tree.MutableTreeNode#setUserObject(java.lang.Object)
+ */
+ public void setUserObject( Object object )
+ {
+ tuple = ( Tuple ) object ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/IntStack.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/IntStack.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/IntStack.java Sun Mar 14 14:02:18 2004
@@ -1,121 +1,121 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.EmptyStackException ;
-
-import org.apache.commons.collections.primitives.ArrayIntList ;
-
-
-/**
- * A primitive int based Stack.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class IntStack
-{
- /** the underlying dynamic primitive backing store */
- private ArrayIntList list = new ArrayIntList() ;
-
-
- /**
- * Tests if this stack is empty.
- *
- * @return true if and only if this stack contains no ints; false otherwise
- */
- public boolean empty()
- {
- return list.isEmpty() ;
- }
-
-
- /**
- * Looks at the int at the top of this stack without removing it from
- * the stack.
- *
- * @return int at the top of this stack (last int in ArrayIntList)
- * @throws EmptyStackException if this stack is empty
- */
- public int peek()
- {
- if ( list.isEmpty() )
- {
- throw new EmptyStackException() ;
- }
-
- return list.get( list.size() - 1 ) ;
- }
-
-
- /**
- * Removes the int at the top of this stack and returns that object as the
- * value of this function.
- *
- * @return int at the top of this stack (last int in ArrayIntList)
- * @throws EmptyStackException if this stack is empty
- */
- public int pop()
- {
- if ( list.isEmpty() )
- {
- throw new EmptyStackException() ;
- }
-
- return list.removeElementAt( list.size() - 1 ) ;
- }
-
-
- /**
- * Pushes an int item onto the top of this stack.
- *
- * @param item the int item to push onto this stack
- * @return the item argument for call chaining
- */
- public int push( int item )
- {
- list.add( item ) ;
- return item ;
- }
-
-
- /**
- * Returns the 1-based position where an int is on this stack. If the int
- * occurs as an item in this stack, this method returns the distance from
- * the top of the stack of the occurrence nearest the top of the stack; the
- * topmost item on the stack is considered to be at distance 1.
- *
- * @param item the int to search for from the top down
- * @return the 1-based position from the top of the stack where the int is
- * located; the return value -1 indicates that the int is not on the stack
- */
- public int search( int item )
- {
- for ( int ii = list.size() - 1; ii >= 0; ii-- )
- {
- if ( list.get( ii ) == item )
- {
- return list.size() - ii ;
- }
- }
-
-
- return -1 ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.EmptyStackException ;
+
+import org.apache.commons.collections.primitives.ArrayIntList ;
+
+
+/**
+ * A primitive int based Stack.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class IntStack
+{
+ /** the underlying dynamic primitive backing store */
+ private ArrayIntList list = new ArrayIntList() ;
+
+
+ /**
+ * Tests if this stack is empty.
+ *
+ * @return true if and only if this stack contains no ints; false otherwise
+ */
+ public boolean empty()
+ {
+ return list.isEmpty() ;
+ }
+
+
+ /**
+ * Looks at the int at the top of this stack without removing it from
+ * the stack.
+ *
+ * @return int at the top of this stack (last int in ArrayIntList)
+ * @throws EmptyStackException if this stack is empty
+ */
+ public int peek()
+ {
+ if ( list.isEmpty() )
+ {
+ throw new EmptyStackException() ;
+ }
+
+ return list.get( list.size() - 1 ) ;
+ }
+
+
+ /**
+ * Removes the int at the top of this stack and returns that object as the
+ * value of this function.
+ *
+ * @return int at the top of this stack (last int in ArrayIntList)
+ * @throws EmptyStackException if this stack is empty
+ */
+ public int pop()
+ {
+ if ( list.isEmpty() )
+ {
+ throw new EmptyStackException() ;
+ }
+
+ return list.removeElementAt( list.size() - 1 ) ;
+ }
+
+
+ /**
+ * Pushes an int item onto the top of this stack.
+ *
+ * @param item the int item to push onto this stack
+ * @return the item argument for call chaining
+ */
+ public int push( int item )
+ {
+ list.add( item ) ;
+ return item ;
+ }
+
+
+ /**
+ * Returns the 1-based position where an int is on this stack. If the int
+ * occurs as an item in this stack, this method returns the distance from
+ * the top of the stack of the occurrence nearest the top of the stack; the
+ * topmost item on the stack is considered to be at distance 1.
+ *
+ * @param item the int to search for from the top down
+ * @return the 1-based position from the top of the stack where the int is
+ * located; the return value -1 indicates that the int is not on the stack
+ */
+ public int search( int item )
+ {
+ for ( int ii = list.size() - 1; ii >= 0; ii-- )
+ {
+ if ( list.get( ii ) == item )
+ {
+ return list.size() - ii ;
+ }
+ }
+
+
+ return -1 ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/MutableTupleNode.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/MutableTupleNode.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/MutableTupleNode.java Sun Mar 14 14:02:18 2004
@@ -1,70 +1,70 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * A mutable TupleNode used for building TLV Tuple trees.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public interface MutableTupleNode extends TupleNode
-{
- /**
- * Adds child to the receiver at index.
- *
- * @param child
- * @param index
- */
- void insert( MutableTupleNode child, int index ) ;
-
- /**
- * Removes the child at index from the receiver.
- *
- * @param index
- */
- void remove( int index ) ;
-
- /**
- * Removes node from the receiver.
- *
- * @param node
- */
- void remove( MutableTupleNode node ) ;
-
- /**
- * Removes the receiver from its parent.
- */
- void removeFromParent() ;
-
- /**
- * Sets the parent of the receiver to newParent.
- *
- * @param newParent
- */
- void setParent( MutableTupleNode newParent ) ;
-
- /**
- * Resets the Tuple of the receiver object.
- *
- * @param t
- */
- void setTuple( Tuple t ) ;
-
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * A mutable TupleNode used for building TLV Tuple trees.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface MutableTupleNode extends TupleNode
+{
+ /**
+ * Adds child to the receiver at index.
+ *
+ * @param child
+ * @param index
+ */
+ void insert( MutableTupleNode child, int index ) ;
+
+ /**
+ * Removes the child at index from the receiver.
+ *
+ * @param index
+ */
+ void remove( int index ) ;
+
+ /**
+ * Removes node from the receiver.
+ *
+ * @param node
+ */
+ void remove( MutableTupleNode node ) ;
+
+ /**
+ * Removes the receiver from its parent.
+ */
+ void removeFromParent() ;
+
+ /**
+ * Sets the parent of the receiver to newParent.
+ *
+ * @param newParent
+ */
+ void setParent( MutableTupleNode newParent ) ;
+
+ /**
+ * Resets the Tuple of the receiver object.
+ *
+ * @param t
+ */
+ void setTuple( Tuple t ) ;
+
+}
Added: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TagDecoder.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TagDecoder.java Sun Mar 14 14:02:18 2004
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.codec.DecoderException ;
+import org.apache.commons.codec.stateful.DecoderMonitor ;
+import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+
+
+/**
+ * A BER Tag decoder.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TagDecoder implements StatefulDecoder
+{
+
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#decode(
+ * java.lang.Object)
+ */
+ public void decode( Object arg0 ) throws DecoderException
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#setCallback(
+ * org.apache.commons.codec.stateful.DecoderCallback)
+ */
+ public void setCallback( DecoderCallback cb )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#setDecoderMonitor(
+ * org.apache.commons.codec.stateful.DecoderMonitor)
+ */
+ public void setDecoderMonitor( DecoderMonitor monitor )
+ {
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/Tuple.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/Tuple.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/Tuple.java Sun Mar 14 14:02:18 2004
@@ -1,694 +1,694 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.lang.ArrayUtils ;
-import org.apache.commons.codec.binary.Binary ;
-
-
-/**
- * Simple TLV Tuple. Because the length fields is a primitive int it's maximum
- * value is 2,147,483,647 a single TLV's tuple cannot have a length over this
- * amount or a value size over 2 GB. I don't think we'll be hitting this soon
- * especially with the value size protection feature planned for the decoder.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class Tuple
-{
- /** used to mark lengths and indices and indefinate */
- public static final int INDEFINATE = -2 ;
- /** used to mark indices as undefined */
- public static final int UNDEFINED = -1 ;
-
- /** precalculated left shift of 1 by 7 places */
- static final int BIT_6 = 1 << 7 ;
- /** precalculated left shift of 1 by 8 places */
- static final int BIT_7 = 1 << 8 ;
- /** precalculated left shift of 1 by 14 places */
- static final int BIT_13 = 1 << 14 ;
- /** precalculated left shift of 1 by 16 places */
- static final int BIT_15 = 1 << 16 ;
- /** precalculated left shift of 1 by 21 places */
- static final int BIT_20 = 1 << 21 ;
- /** precalculated left shift of 1 by 24 places */
- static final int BIT_23 = 1 << 24 ;
- /** precalculated left shift of 1 by 28 places */
- static final int BIT_27 = 1 << 28 ;
-
- /** the tag id for this TLV tuple */
- int id = 0 ;
- /** the flag for whether or not this TLV is constructed or primitive */
- boolean isPrimitive = true ;
- /** the type class for this TLV */
- TypeClass typeClass = TypeClass.APPLICATION ;
- /** the length for this TLV tuple */
- int length = 0 ;
- /** the value for this TLV tuple */
- Object value = ArrayUtils.EMPTY_BYTE_ARRAY ;
-
- /** tlv byte index */
- int index = Tuple.UNDEFINED ;
- /** tlv value index for how far into the value we have read */
- int valueIndex = Tuple.UNDEFINED ;
-
-
- // ------------------------------------------------------------------------
- // C O N S T R U C T O R S
- // ------------------------------------------------------------------------
-
-
- /**
- * Empty do nothing tuple.
- */
- Tuple()
- {
- }
-
-
- /**
- * Creates constructed application type tlv tuples. Constructed TLV's with
- * a definate length will use this constructor predominantly. The TypeClass
- * defualts to APPLICATION.
- *
- * @param id the tag id of the tlv
- * @param length the length of the value which is the length of all the
- * nested tuples.
- */
- public Tuple( int id, int length )
- {
- this( id, length, TypeClass.APPLICATION ) ;
- }
-
-
- /**
- * Creates constructed application type tlv tuples. Constructed TLV's with
- * a definate length will use this constructor predominantly.
- *
- * @param id the tag id of the tlv
- * @param length the length of the value which is the length of all the
- * nested tuples.
- * @param typeClass the type class of this tlv tuple
- */
- public Tuple( int id, int length, TypeClass typeClass )
- {
- this.id = id ;
- this.length = length ;
- value = ArrayUtils.EMPTY_BYTE_ARRAY ;
- isPrimitive = false ;
-
- if ( typeClass != null )
- {
- this.typeClass = typeClass ;
- }
- }
-
-
- /**
- * Creates primitive application type tlv tuples. This will be the primary
- * constructor used to build primitives.
- *
- * @param id the tag id of the tlv
- * @param value the value portion for this Tuple
- */
- public Tuple( int id, byte[] value )
- {
- this( id, TypeClass.APPLICATION, true, value ) ;
- }
-
-
- /**
- * Creates an application type tlv with a set value and length.
- *
- * @param id the tag id of the tlv
- * @param isPrimitive whether or not the tlv is primitive or constructed
- * @param value the value portion for this Tuple
- */
- public Tuple( int id, boolean isPrimitive, byte[] value )
- {
- this( id, TypeClass.APPLICATION, isPrimitive, value ) ;
- }
-
-
- /**
- * Creates a tuple where the length is indefinate. The tuple according to
- * the BER encoding must be of the constructed type.
- *
- * @param id the tag id of the tlv
- * @param typeClass the type class for the tlv
- * @param isPrimitive whether or not the tlv is primitive or constructed
- * @param value the value portion for this Tuple
- */
- public Tuple( int id, TypeClass typeClass )
- {
- this.id = id ;
- this.isPrimitive = false ;
- value = ArrayUtils.EMPTY_BYTE_ARRAY ;
- length = Tuple.INDEFINATE ;
-
- if ( typeClass != null )
- {
- this.typeClass = typeClass ;
- }
- }
-
-
- /**
- * Creates a tuple where every member is specified including the length
- * which is taken from the value array.
- *
- * @param id the tag id of the tlv
- * @param typeClass the type class for the tlv
- * @param isPrimitive whether or not the tlv is primitive or constructed
- * @param value the value portion for this Tuple
- */
- public Tuple( int id, TypeClass typeClass, boolean isPrimitive,
- byte[] value )
- {
- this.id = id ;
- this.isPrimitive = isPrimitive ;
-
- if ( value != null )
- {
- this.value = value ;
- this.length = value.length ;
- }
-
- if ( typeClass != null )
- {
- this.typeClass = typeClass ;
- }
- }
-
-
- // ------------------------------------------------------------------------
- // Public Accessors
- // ------------------------------------------------------------------------
-
-
- /**
- * Gets the tag id (T-part) for this TLV Tuple.
- *
- * @return the tag id
- */
- public int getId()
- {
- return id ;
- }
-
-
- /**
- * Get's whether or not this tuples's length is indefinate.
- *
- * @return whether or not this tuple's length is indefinate
- */
- public boolean isIndefinate()
- {
- return length == Tuple.INDEFINATE ;
- }
-
-
- /**
- * Get's whether or not this tuple terminates an indefinate constructed
- * tuple. This means that length == 0 && isPrimitive = true && id == 0
- * and the type class is universal.
- *
- * @return whether or not this node's length is indefinate
- */
- public boolean isIndefinateTerminator()
- {
- return isPrimitive && ( id + length ) == 0 &&
- typeClass.equals( TypeClass.UNIVERSAL ) ;
- }
-
-
- /**
- * Gets whether or not this TLV tuple is primitive or constructed.
- *
- * @return true if it is primitive, false if it is constructed
- */
- public boolean isPrimitive()
- {
- return isPrimitive ;
- }
-
-
- /**
- * Gets the value length for this TLV Tuple.
- *
- * @return the length in bytes of the value field for this TLV tuple
- */
- public int getLength()
- {
- return length ;
- }
-
-
- /**
- * Gets the BER TLV TypeClass for this TLV Tuple.
- *
- * @return the BER TLV TypeClass for this TLV Tuple
- */
- public TypeClass getTypeClass()
- {
- return typeClass ;
- }
-
-
- /**
- * Gets the value field (V-part) for this TLV Tuple.
- *
- * @return the value field for this TLV Tuple
- */
- public Object getValue()
- {
- return value ;
- }
-
-
- /**
- * Gets the total size of this TLV tuple in bytes. This includes the
- * length of the tag field, the length of the length field and the length
- * of the value filed.
- *
- * @return the total TLV size in bytes
- */
- public int size()
- {
- if ( this.length == Tuple.INDEFINATE )
- {
- return getTagLength() + getLengthLength() ;
- }
- else
- {
- return getTagLength() + getLengthLength() + length ;
- }
- }
-
-
- // ------------------------------------------------------------------------
- // Utility methods and java.lang.Object overrides
- // ------------------------------------------------------------------------
-
-
- /**
- * Clears the values of this tuple.
- */
- void clear()
- {
- this.id = 0 ;
- this.index = 0 ;
- this.isPrimitive = true ;
- this.length = Tuple.UNDEFINED ;
- this.typeClass = TypeClass.APPLICATION ;
- this.value = ArrayUtils.EMPTY_BYTE_ARRAY ;
- this.valueIndex = Tuple.UNDEFINED ;
- }
-
-
- /**
- * Does not take into account the index or the valueIndex values when
- * checking for equality. Technically if both are being constructed by
- * the decoder then they should only be equal when these values are equal
- * because the tag, length or value would not be correct.
- *
- * @see java.lang.Object#equals(java.lang.Object)
- */
- public boolean equals( Object o )
- {
- if ( o == this )
- {
- return true ;
- }
-
- if ( o instanceof Tuple )
- {
- Tuple t = ( Tuple ) o ;
-
- if ( t.id != id )
- {
- return false ;
- }
-
- if ( t.isPrimitive != isPrimitive )
- {
- return false ;
- }
-
- if ( t.length != length )
- {
- return false ;
- }
-
- if ( t.typeClass != typeClass )
- {
- return false ;
- }
-
- if ( t.value == null && value == null )
- {
-
- }
- else if ( ! ArrayUtils.isEquals( t.value, value ) )
- {
- return false ;
- }
-
- return true ;
- }
-
- return false ;
- }
-
-
- /*
- * (non-Javadoc)
- * @see java.lang.Object#clone()
- */
- public Object clone()
- {
- Tuple t = new Tuple() ;
- t.id = id ;
- t.isPrimitive = isPrimitive ;
- t.typeClass = typeClass ;
- t.length = length ;
- t.value = value ;
- t.index = index ;
- t.valueIndex = valueIndex ;
-
- return t ;
- }
-
-
- // ------------------------------------------------------------------------
- // Tuple encoding operations
- // ------------------------------------------------------------------------
-
-
- /**
- * If this is a primitive TLV then it is encoded fully. If it is not then
- * only the TL part of the tuple is encoded leaving the value to be encoded
- * by the set of child TLVs.
- *
- * @return partial encoded image if constructed or complete TLV if primitive
- */
- public byte[] encode()
- {
- byte[] octets = null ;
- int tagLength = getTagLength() ;
- int lengthLength = getLengthLength() ;
- int valueLength = 0 ;
- int total = tagLength + lengthLength ;
-
- if ( isPrimitive )
- {
- valueLength = ( ( byte[] ) value ).length ;
- total += valueLength ;
- }
-
- octets = new byte[total] ;
- setTag( octets, tagLength ) ;
- setLength( octets, tagLength, lengthLength ) ;
-
- if ( isPrimitive )
- {
- int destPos = tagLength + lengthLength ;
- System.arraycopy( value, 0, octets, destPos, valueLength ) ;
- }
-
- return octets ;
- }
-
-
- /**
- * Sets the tag section within the array at the start of the array.
- *
- * @param octets the array of bytes to set the tag in
- * @param tagLength the length of the tag section
- */
- void setTag( byte[] octets, int tagLength )
- {
- octets[0] = ( byte ) typeClass.getValue() ;
-
- if ( ! isPrimitive )
- {
- octets[0] |= Binary.BIT_5 ;
- }
-
- if ( tagLength == 1 )
- {
- octets[0] |= id ;
- }
- else
- {
- octets[0] |= BERUtils.SHORT_TAG_MASK ;
- }
-
- if ( tagLength >= 2 )
- {
- octets[1] = ( byte ) ( ( int ) 0x0000007f & id ) ;
-
- if ( tagLength > 2 )
- {
- octets[1] |= Binary.BIT_7 ;
- }
- }
- else
- {
- return ;
- }
-
- /*
- * Take bits [8-14] (1 based bit indexing) inclusive in id and set the
- * value for the second byte to this when shifted down 7 positions so
- * we need the following mask:
- *
- * 0011 1111 1000 0000 => 0x3f80
- *
- */
- if ( tagLength >= 3 )
- {
- octets[2] = ( byte ) ( ( ( int ) 0x3f80 & id ) >> 7 ) ;
-
- if ( tagLength > 3 )
- {
- octets[2] |= Binary.BIT_7 ;
- }
- }
- else
- {
- return ;
- }
-
- /*
- * Take bits [15-21] (1 based bit indexing) inclusive in id and set the
- * value for the second byte to this when shifted down 14 positions so
- * we need the following mask:
- *
- * 0001 1111 1100 0000 0000 0000 => 0x1fc000
- *
- */
- if ( tagLength >= 4 )
- {
- octets[3] = ( byte ) ( ( ( int ) 0x1fc000 & id ) >> 14 ) ;
-
- if ( tagLength > 4 )
- {
- octets[3] |= Binary.BIT_7 ;
- }
- }
- else
- {
- return ;
- }
-
- /*
- * Take bits [22-28] (1 based bit indexing) inclusive in id and set the
- * value for the second byte to this when shifted down 21 positions so
- * we need the following mask:
- *
- * 0000 1111 1110 0000 0000 0000 0000 0000 => 0x0fe00000
- *
- */
- if ( tagLength >= 5 )
- {
- octets[4] = ( byte ) ( ( ( int ) 0x0fe00000 & id ) >> 21 ) ;
-
- if ( tagLength > 5 )
- {
- octets[4] |= Binary.BIT_7 ;
- }
- }
- else
- {
- return ;
- }
-
- if ( tagLength >= 6 )
- {
- throw new IllegalArgumentException( "cannot support id's as large "
- + "as " + id + " unless we start using longs for the id" ) ;
- }
- }
-
-
- /**
- * Sets the length bytes.
- *
- * @param octets the byte [] to set length in
- * @param offset the offset in the array to start the length section in
- * @param lengthBytes the number bytes for the length section
- */
- void setLength( byte[] octets, int offset, int lengthBytes )
- {
- if ( length == Tuple.INDEFINATE )
- {
- octets[offset] |= BIT_6 ;
- return ;
- }
- else if ( lengthBytes == 1 )
- {
- octets[offset] |= length ;
- }
- else
- {
- octets[offset] |= Binary.BIT_7 | lengthBytes - 1 ;
- }
-
- if ( lengthBytes >= 2 )
- {
- octets[offset + 1] = ( byte ) ( 0xff & length ) ;
- }
- else
- {
- return ;
- }
-
- if ( lengthBytes >= 3 )
- {
- octets[offset + 2] = ( byte ) ( ( 0xff00 & length ) >> 8 ) ;
- }
- else
- {
- return ;
- }
-
- if ( lengthBytes >= 4 )
- {
- octets[offset + 3] = ( byte ) ( ( 0xff0000 & length ) >> 16 ) ;
- }
- else
- {
- return ;
- }
-
- if ( lengthBytes >= 5 )
- {
- octets[offset + 4] = ( byte ) ( ( 0xff000000 & length ) >> 24 ) ;
- }
- else
- {
- return ;
- }
-
- if ( lengthBytes >= 6 )
- {
- throw new IllegalArgumentException( "cannot support lengths as "
- + "large as " + length
- + " unless we start using longs for the length" ) ;
- }
- }
-
-
- /**
- * Gets the length in bytes of the tag section for this TLV tuple.
- *
- * @return the length in bytes of the tag section for this TLV tuple
- */
- public int getTagLength()
- {
- if ( id < 31 )
- {
- return 1 ;
- }
- else if ( id < BIT_6 )
- {
- return 2 ;
- }
-
- else if ( id < BIT_13 )
- {
- return 3 ;
- }
- else if ( id < BIT_20 )
- {
- return 4 ;
- }
- else if ( id < BIT_27 )
- {
- return 5 ;
- }
-
- throw new IllegalArgumentException( "cannot support id's larger than "
- + id + " unless we start using longs for the id" ) ;
- }
-
-
- /**
- * Gets the length in bytes of the length section of this TLV Tuple.
- *
- * @return the length in bytes of the length section
- */
- public int getLengthLength()
- {
- if ( length == Tuple.INDEFINATE )
- {
- return 1 ;
- }
-
- if ( length < 0 )
- {
- throw new IllegalArgumentException( "integer overflow makes id "
- + "negative with a value of " + id
- + " - unless we start using longs for"
- + " the id there you've hit a limitation" ) ;
- }
- else if ( length < BIT_6 )
- {
- return 1 ;
- }
- else if ( length < BIT_7 )
- {
- return 2 ;
- }
- else if ( length < BIT_15 )
- {
- return 3 ;
- }
- else if ( length < BIT_23 )
- {
- return 4 ;
- }
- else
- {
- return 5 ;
- }
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.lang.ArrayUtils ;
+import org.apache.commons.codec.binary.Binary ;
+
+
+/**
+ * Simple TLV Tuple. Because the length fields is a primitive int it's maximum
+ * value is 2,147,483,647 a single TLV's tuple cannot have a length over this
+ * amount or a value size over 2 GB. I don't think we'll be hitting this soon
+ * especially with the value size protection feature planned for the decoder.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class Tuple
+{
+ /** used to mark lengths and indices and indefinate */
+ public static final int INDEFINATE = -2 ;
+ /** used to mark indices as undefined */
+ public static final int UNDEFINED = -1 ;
+
+ /** precalculated left shift of 1 by 7 places */
+ static final int BIT_6 = 1 << 7 ;
+ /** precalculated left shift of 1 by 8 places */
+ static final int BIT_7 = 1 << 8 ;
+ /** precalculated left shift of 1 by 14 places */
+ static final int BIT_13 = 1 << 14 ;
+ /** precalculated left shift of 1 by 16 places */
+ static final int BIT_15 = 1 << 16 ;
+ /** precalculated left shift of 1 by 21 places */
+ static final int BIT_20 = 1 << 21 ;
+ /** precalculated left shift of 1 by 24 places */
+ static final int BIT_23 = 1 << 24 ;
+ /** precalculated left shift of 1 by 28 places */
+ static final int BIT_27 = 1 << 28 ;
+
+ /** the tag id for this TLV tuple */
+ int id = 0 ;
+ /** the flag for whether or not this TLV is constructed or primitive */
+ boolean isPrimitive = true ;
+ /** the type class for this TLV */
+ TypeClass typeClass = TypeClass.APPLICATION ;
+ /** the length for this TLV tuple */
+ int length = 0 ;
+ /** the value for this TLV tuple */
+ Object value = ArrayUtils.EMPTY_BYTE_ARRAY ;
+
+ /** tlv byte index */
+ int index = Tuple.UNDEFINED ;
+ /** tlv value index for how far into the value we have read */
+ int valueIndex = Tuple.UNDEFINED ;
+
+
+ // ------------------------------------------------------------------------
+ // C O N S T R U C T O R S
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Empty do nothing tuple.
+ */
+ Tuple()
+ {
+ }
+
+
+ /**
+ * Creates constructed application type tlv tuples. Constructed TLV's with
+ * a definate length will use this constructor predominantly. The TypeClass
+ * defualts to APPLICATION.
+ *
+ * @param id the tag id of the tlv
+ * @param length the length of the value which is the length of all the
+ * nested tuples.
+ */
+ public Tuple( int id, int length )
+ {
+ this( id, length, TypeClass.APPLICATION ) ;
+ }
+
+
+ /**
+ * Creates constructed application type tlv tuples. Constructed TLV's with
+ * a definate length will use this constructor predominantly.
+ *
+ * @param id the tag id of the tlv
+ * @param length the length of the value which is the length of all the
+ * nested tuples.
+ * @param typeClass the type class of this tlv tuple
+ */
+ public Tuple( int id, int length, TypeClass typeClass )
+ {
+ this.id = id ;
+ this.length = length ;
+ value = ArrayUtils.EMPTY_BYTE_ARRAY ;
+ isPrimitive = false ;
+
+ if ( typeClass != null )
+ {
+ this.typeClass = typeClass ;
+ }
+ }
+
+
+ /**
+ * Creates primitive application type tlv tuples. This will be the primary
+ * constructor used to build primitives.
+ *
+ * @param id the tag id of the tlv
+ * @param value the value portion for this Tuple
+ */
+ public Tuple( int id, byte[] value )
+ {
+ this( id, TypeClass.APPLICATION, true, value ) ;
+ }
+
+
+ /**
+ * Creates an application type tlv with a set value and length.
+ *
+ * @param id the tag id of the tlv
+ * @param isPrimitive whether or not the tlv is primitive or constructed
+ * @param value the value portion for this Tuple
+ */
+ public Tuple( int id, boolean isPrimitive, byte[] value )
+ {
+ this( id, TypeClass.APPLICATION, isPrimitive, value ) ;
+ }
+
+
+ /**
+ * Creates a tuple where the length is indefinate. The tuple according to
+ * the BER encoding must be of the constructed type.
+ *
+ * @param id the tag id of the tlv
+ * @param typeClass the type class for the tlv
+ * @param isPrimitive whether or not the tlv is primitive or constructed
+ * @param value the value portion for this Tuple
+ */
+ public Tuple( int id, TypeClass typeClass )
+ {
+ this.id = id ;
+ this.isPrimitive = false ;
+ value = ArrayUtils.EMPTY_BYTE_ARRAY ;
+ length = Tuple.INDEFINATE ;
+
+ if ( typeClass != null )
+ {
+ this.typeClass = typeClass ;
+ }
+ }
+
+
+ /**
+ * Creates a tuple where every member is specified including the length
+ * which is taken from the value array.
+ *
+ * @param id the tag id of the tlv
+ * @param typeClass the type class for the tlv
+ * @param isPrimitive whether or not the tlv is primitive or constructed
+ * @param value the value portion for this Tuple
+ */
+ public Tuple( int id, TypeClass typeClass, boolean isPrimitive,
+ byte[] value )
+ {
+ this.id = id ;
+ this.isPrimitive = isPrimitive ;
+
+ if ( value != null )
+ {
+ this.value = value ;
+ this.length = value.length ;
+ }
+
+ if ( typeClass != null )
+ {
+ this.typeClass = typeClass ;
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Public Accessors
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Gets the tag id (T-part) for this TLV Tuple.
+ *
+ * @return the tag id
+ */
+ public int getId()
+ {
+ return id ;
+ }
+
+
+ /**
+ * Get's whether or not this tuples's length is indefinate.
+ *
+ * @return whether or not this tuple's length is indefinate
+ */
+ public boolean isIndefinate()
+ {
+ return length == Tuple.INDEFINATE ;
+ }
+
+
+ /**
+ * Get's whether or not this tuple terminates an indefinate constructed
+ * tuple. This means that length == 0 && isPrimitive = true && id == 0
+ * and the type class is universal.
+ *
+ * @return whether or not this node's length is indefinate
+ */
+ public boolean isIndefinateTerminator()
+ {
+ return isPrimitive && ( id + length ) == 0 &&
+ typeClass.equals( TypeClass.UNIVERSAL ) ;
+ }
+
+
+ /**
+ * Gets whether or not this TLV tuple is primitive or constructed.
+ *
+ * @return true if it is primitive, false if it is constructed
+ */
+ public boolean isPrimitive()
+ {
+ return isPrimitive ;
+ }
+
+
+ /**
+ * Gets the value length for this TLV Tuple.
+ *
+ * @return the length in bytes of the value field for this TLV tuple
+ */
+ public int getLength()
+ {
+ return length ;
+ }
+
+
+ /**
+ * Gets the BER TLV TypeClass for this TLV Tuple.
+ *
+ * @return the BER TLV TypeClass for this TLV Tuple
+ */
+ public TypeClass getTypeClass()
+ {
+ return typeClass ;
+ }
+
+
+ /**
+ * Gets the value field (V-part) for this TLV Tuple.
+ *
+ * @return the value field for this TLV Tuple
+ */
+ public Object getValue()
+ {
+ return value ;
+ }
+
+
+ /**
+ * Gets the total size of this TLV tuple in bytes. This includes the
+ * length of the tag field, the length of the length field and the length
+ * of the value filed.
+ *
+ * @return the total TLV size in bytes
+ */
+ public int size()
+ {
+ if ( this.length == Tuple.INDEFINATE )
+ {
+ return getTagLength() + getLengthLength() ;
+ }
+ else
+ {
+ return getTagLength() + getLengthLength() + length ;
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Utility methods and java.lang.Object overrides
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Clears the values of this tuple.
+ */
+ void clear()
+ {
+ this.id = 0 ;
+ this.index = 0 ;
+ this.isPrimitive = true ;
+ this.length = Tuple.UNDEFINED ;
+ this.typeClass = TypeClass.APPLICATION ;
+ this.value = ArrayUtils.EMPTY_BYTE_ARRAY ;
+ this.valueIndex = Tuple.UNDEFINED ;
+ }
+
+
+ /**
+ * Does not take into account the index or the valueIndex values when
+ * checking for equality. Technically if both are being constructed by
+ * the decoder then they should only be equal when these values are equal
+ * because the tag, length or value would not be correct.
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object o )
+ {
+ if ( o == this )
+ {
+ return true ;
+ }
+
+ if ( o instanceof Tuple )
+ {
+ Tuple t = ( Tuple ) o ;
+
+ if ( t.id != id )
+ {
+ return false ;
+ }
+
+ if ( t.isPrimitive != isPrimitive )
+ {
+ return false ;
+ }
+
+ if ( t.length != length )
+ {
+ return false ;
+ }
+
+ if ( t.typeClass != typeClass )
+ {
+ return false ;
+ }
+
+ if ( t.value == null && value == null )
+ {
+
+ }
+ else if ( ! ArrayUtils.isEquals( t.value, value ) )
+ {
+ return false ;
+ }
+
+ return true ;
+ }
+
+ return false ;
+ }
+
+
+ /*
+ * (non-Javadoc)
+ * @see java.lang.Object#clone()
+ */
+ public Object clone()
+ {
+ Tuple t = new Tuple() ;
+ t.id = id ;
+ t.isPrimitive = isPrimitive ;
+ t.typeClass = typeClass ;
+ t.length = length ;
+ t.value = value ;
+ t.index = index ;
+ t.valueIndex = valueIndex ;
+
+ return t ;
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Tuple encoding operations
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * If this is a primitive TLV then it is encoded fully. If it is not then
+ * only the TL part of the tuple is encoded leaving the value to be encoded
+ * by the set of child TLVs.
+ *
+ * @return partial encoded image if constructed or complete TLV if primitive
+ */
+ public byte[] encode()
+ {
+ byte[] octets = null ;
+ int tagLength = getTagLength() ;
+ int lengthLength = getLengthLength() ;
+ int valueLength = 0 ;
+ int total = tagLength + lengthLength ;
+
+ if ( isPrimitive )
+ {
+ valueLength = ( ( byte[] ) value ).length ;
+ total += valueLength ;
+ }
+
+ octets = new byte[total] ;
+ setTag( octets, tagLength ) ;
+ setLength( octets, tagLength, lengthLength ) ;
+
+ if ( isPrimitive )
+ {
+ int destPos = tagLength + lengthLength ;
+ System.arraycopy( value, 0, octets, destPos, valueLength ) ;
+ }
+
+ return octets ;
+ }
+
+
+ /**
+ * Sets the tag section within the array at the start of the array.
+ *
+ * @param octets the array of bytes to set the tag in
+ * @param tagLength the length of the tag section
+ */
+ void setTag( byte[] octets, int tagLength )
+ {
+ octets[0] = ( byte ) typeClass.getValue() ;
+
+ if ( ! isPrimitive )
+ {
+ octets[0] |= Binary.BIT_5 ;
+ }
+
+ if ( tagLength == 1 )
+ {
+ octets[0] |= id ;
+ }
+ else
+ {
+ octets[0] |= BERUtils.SHORT_TAG_MASK ;
+ }
+
+ if ( tagLength >= 2 )
+ {
+ octets[1] = ( byte ) ( ( int ) 0x0000007f & id ) ;
+
+ if ( tagLength > 2 )
+ {
+ octets[1] |= Binary.BIT_7 ;
+ }
+ }
+ else
+ {
+ return ;
+ }
+
+ /*
+ * Take bits [8-14] (1 based bit indexing) inclusive in id and set the
+ * value for the second byte to this when shifted down 7 positions so
+ * we need the following mask:
+ *
+ * 0011 1111 1000 0000 => 0x3f80
+ *
+ */
+ if ( tagLength >= 3 )
+ {
+ octets[2] = ( byte ) ( ( ( int ) 0x3f80 & id ) >> 7 ) ;
+
+ if ( tagLength > 3 )
+ {
+ octets[2] |= Binary.BIT_7 ;
+ }
+ }
+ else
+ {
+ return ;
+ }
+
+ /*
+ * Take bits [15-21] (1 based bit indexing) inclusive in id and set the
+ * value for the second byte to this when shifted down 14 positions so
+ * we need the following mask:
+ *
+ * 0001 1111 1100 0000 0000 0000 => 0x1fc000
+ *
+ */
+ if ( tagLength >= 4 )
+ {
+ octets[3] = ( byte ) ( ( ( int ) 0x1fc000 & id ) >> 14 ) ;
+
+ if ( tagLength > 4 )
+ {
+ octets[3] |= Binary.BIT_7 ;
+ }
+ }
+ else
+ {
+ return ;
+ }
+
+ /*
+ * Take bits [22-28] (1 based bit indexing) inclusive in id and set the
+ * value for the second byte to this when shifted down 21 positions so
+ * we need the following mask:
+ *
+ * 0000 1111 1110 0000 0000 0000 0000 0000 => 0x0fe00000
+ *
+ */
+ if ( tagLength >= 5 )
+ {
+ octets[4] = ( byte ) ( ( ( int ) 0x0fe00000 & id ) >> 21 ) ;
+
+ if ( tagLength > 5 )
+ {
+ octets[4] |= Binary.BIT_7 ;
+ }
+ }
+ else
+ {
+ return ;
+ }
+
+ if ( tagLength >= 6 )
+ {
+ throw new IllegalArgumentException( "cannot support id's as large "
+ + "as " + id + " unless we start using longs for the id" ) ;
+ }
+ }
+
+
+ /**
+ * Sets the length bytes.
+ *
+ * @param octets the byte [] to set length in
+ * @param offset the offset in the array to start the length section in
+ * @param lengthBytes the number bytes for the length section
+ */
+ void setLength( byte[] octets, int offset, int lengthBytes )
+ {
+ if ( length == Tuple.INDEFINATE )
+ {
+ octets[offset] |= BIT_6 ;
+ return ;
+ }
+ else if ( lengthBytes == 1 )
+ {
+ octets[offset] |= length ;
+ }
+ else
+ {
+ octets[offset] |= Binary.BIT_7 | lengthBytes - 1 ;
+ }
+
+ if ( lengthBytes >= 2 )
+ {
+ octets[offset + 1] = ( byte ) ( 0xff & length ) ;
+ }
+ else
+ {
+ return ;
+ }
+
+ if ( lengthBytes >= 3 )
+ {
+ octets[offset + 2] = ( byte ) ( ( 0xff00 & length ) >> 8 ) ;
+ }
+ else
+ {
+ return ;
+ }
+
+ if ( lengthBytes >= 4 )
+ {
+ octets[offset + 3] = ( byte ) ( ( 0xff0000 & length ) >> 16 ) ;
+ }
+ else
+ {
+ return ;
+ }
+
+ if ( lengthBytes >= 5 )
+ {
+ octets[offset + 4] = ( byte ) ( ( 0xff000000 & length ) >> 24 ) ;
+ }
+ else
+ {
+ return ;
+ }
+
+ if ( lengthBytes >= 6 )
+ {
+ throw new IllegalArgumentException( "cannot support lengths as "
+ + "large as " + length
+ + " unless we start using longs for the length" ) ;
+ }
+ }
+
+
+ /**
+ * Gets the length in bytes of the tag section for this TLV tuple.
+ *
+ * @return the length in bytes of the tag section for this TLV tuple
+ */
+ public int getTagLength()
+ {
+ if ( id < 31 )
+ {
+ return 1 ;
+ }
+ else if ( id < BIT_6 )
+ {
+ return 2 ;
+ }
+
+ else if ( id < BIT_13 )
+ {
+ return 3 ;
+ }
+ else if ( id < BIT_20 )
+ {
+ return 4 ;
+ }
+ else if ( id < BIT_27 )
+ {
+ return 5 ;
+ }
+
+ throw new IllegalArgumentException( "cannot support id's larger than "
+ + id + " unless we start using longs for the id" ) ;
+ }
+
+
+ /**
+ * Gets the length in bytes of the length section of this TLV Tuple.
+ *
+ * @return the length in bytes of the length section
+ */
+ public int getLengthLength()
+ {
+ if ( length == Tuple.INDEFINATE )
+ {
+ return 1 ;
+ }
+
+ if ( length < 0 )
+ {
+ throw new IllegalArgumentException( "integer overflow makes id "
+ + "negative with a value of " + id
+ + " - unless we start using longs for"
+ + " the id there you've hit a limitation" ) ;
+ }
+ else if ( length < BIT_6 )
+ {
+ return 1 ;
+ }
+ else if ( length < BIT_7 )
+ {
+ return 2 ;
+ }
+ else if ( length < BIT_15 )
+ {
+ return 3 ;
+ }
+ else if ( length < BIT_23 )
+ {
+ return 4 ;
+ }
+ else
+ {
+ return 5 ;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleNode.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleNode.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleNode.java Sun Mar 14 14:02:18 2004
@@ -1,41 +1,41 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.Iterator ;
-import java.nio.ByteBuffer ;
-
-
-/**
- * A TLV Tuple tree node.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public interface TupleNode
-{
- TupleNode getParentTupleNode() ;
- Iterator getChildren() ;
- TupleNode getChildTupleNodeAt( int index ) ;
- int getIndex( TupleNode node ) ;
- int getChildCount() ;
- int size() ;
- Tuple getTuple() ;
- void encode( ByteBuffer buf ) ;
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.Iterator ;
+import java.nio.ByteBuffer ;
+
+
+/**
+ * A TLV Tuple tree node.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface TupleNode
+{
+ TupleNode getParentTupleNode() ;
+ Iterator getChildren() ;
+ TupleNode getChildTupleNodeAt( int index ) ;
+ int getIndex( TupleNode node ) ;
+ int getChildCount() ;
+ int size() ;
+ Tuple getTuple() ;
+ void encode( ByteBuffer buf ) ;
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeAnalyzer.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeAnalyzer.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeAnalyzer.java Sun Mar 14 14:02:18 2004
@@ -1,269 +1,269 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import javax.swing.JMenu ;
-import javax.swing.JTree ;
-import javax.swing.JFrame ;
-import javax.swing.JPanel ;
-import javax.swing.JLabel ;
-import javax.swing.JMenuBar ;
-import javax.swing.JMenuItem ;
-import javax.swing.JTextArea ;
-import javax.swing.JTextField ;
-import javax.swing.JSplitPane ;
-import javax.swing.JScrollPane ;
-import javax.swing.JFileChooser ;
-import javax.swing.tree.DefaultTreeModel ;
-
-import java.awt.Toolkit ;
-import java.awt.Dimension ;
-import java.awt.BorderLayout ;
-import java.awt.event.ActionEvent ;
-import java.awt.event.WindowEvent ;
-import java.awt.event.ActionListener ;
-
-
-/**
- * Simple JTree view of a tuple tree.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class TupleTreeAnalyzer extends JFrame
-{
- DefaultMutableTupleNode root = null ;
-
- /** Creates new form JFrame */
- public TupleTreeAnalyzer( DefaultMutableTupleNode root )
- {
- this.root = root ;
-
- initGUI() ;
- pack() ;
- }
-
- /** This method is called from within
- * the constructor to initialize the form. */
- private void initGUI() {
-
- getContentPane().setLayout(layout);
- JPanel content = new JPanel();
- content.setPreferredSize(new Dimension(300, 200));
- getContentPane().add(content, BorderLayout.CENTER);
- // set title
- setTitle("");
- // add status bar
- getContentPane().add(statusBar, BorderLayout.SOUTH);
- // add menu bar
- JMenuBar menuBar = new JMenuBar();
- JMenu menuFile = new JMenu("File");
- menuFile.setMnemonic('F');
- // create Exit menu item
- JMenuItem fileExit = new JMenuItem("Exit");
- fileExit.setMnemonic('E');
- fileExit.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- System.exit(0);
- }
- });
- // create About menu item
- JMenu menuHelp = new JMenu("Help");
- menuHelp.setMnemonic('H');
- JMenuItem helpAbout = new JMenuItem("About");
- helpAbout.setMnemonic('A');
- helpAbout.addActionListener(
- new ActionListener() {
- public void actionPerformed(ActionEvent e) {
- }
- });
- menuHelp.add(helpAbout);
- // create Open menu item
- final JFileChooser fc = new JFileChooser();
- JMenuItem openFile = new JMenuItem("Open");
- openFile.setMnemonic('O');
- openFile.addActionListener(
- new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent e) {
- int returnVal = fc.showOpenDialog(TupleTreeAnalyzer.this);
- if (returnVal == javax.swing.JFileChooser.APPROVE_OPTION) {
- java.io.File file = fc.getSelectedFile();
- // Write your code here what to do with selected file
- } else {
- // Write your code here what to do if user has canceled
- }
- }
- });
- menuFile.add(openFile);
- // create Save menu item
- JMenuItem saveFile = new JMenuItem("Save");
- saveFile.setMnemonic('S');
- saveFile.addActionListener(
- new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent e) {
- int returnVal = fc.showSaveDialog(TupleTreeAnalyzer.this);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- java.io.File file = fc.getSelectedFile();
- // Write your code here what to do with selected file
- } else {
-// Write your code here what to do if user has canceled Save dialog
- }
- }
- });
- menuFile.add(saveFile);
- // create Print menu item
- JMenuItem print = new JMenuItem("Print");
- print.setMnemonic('P');
- print.addActionListener(
- new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent e) {
- // PrintDialog.print(getGraphics());
- }
- }); menuFile.add(print);
- menuFile.add(fileExit);
- menuBar.add(menuFile);
- menuBar.add(menuHelp);
- // sets menu bar
- setJMenuBar(menuBar);
- addWindowListener(
- new java.awt.event.WindowAdapter() {
- public void windowClosing(java.awt.event.WindowEvent evt) {
- exitForm(evt);
- }
- });
-
-
- jLabel3.setText("Type Class:");
- jPanel5.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
- jPanel5.add(jLabel3);
- jPanel5.add(jTextField3);
- jTextField3.setText("");
- jTextField3.setMinimumSize(new java.awt.Dimension(104, 25));
- jTextField3.setPreferredSize(new java.awt.Dimension(104, 25));
- jSplitPane1.setLastDividerLocation(50);
- jSplitPane1.setDividerLocation(180);
- jSplitPane1.add(jScrollPane1, javax.swing.JSplitPane.LEFT);
- jSplitPane1.add(jPanel1, javax.swing.JSplitPane.RIGHT);
- addWindowListener(
- new java.awt.event.WindowAdapter() {
- public void windowClosing(java.awt.event.WindowEvent evt) {
- exitForm(evt);
- }
- });
- getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
- jScrollPane1.getViewport().add(jTree1);
- jTree1.setBounds(new java.awt.Rectangle(95,95,85,84));
- jTree1.setShowsRootHandles(true);
- jPanel1.setLayout(new java.awt.GridBagLayout());
- jPanel1.add(jPanel2,
- new java.awt.GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
- java.awt.GridBagConstraints.WEST,
- java.awt.GridBagConstraints.HORIZONTAL,
- new java.awt.Insets(0, 9, 0, 9), 0, 0));
- jPanel1.add(jPanel3,
- new java.awt.GridBagConstraints(0, 1, 1, 1, 1.0, 1.0,
- java.awt.GridBagConstraints.WEST,
- java.awt.GridBagConstraints.HORIZONTAL,
- new java.awt.Insets(0, 9, 0, 9), 0, 0));
- jPanel1.add(jPanel4,
- new java.awt.GridBagConstraints(0, 3, 1, 35, 1.0, 1.0,
- java.awt.GridBagConstraints.CENTER,
- java.awt.GridBagConstraints.BOTH,
- new java.awt.Insets(9, 12, 9, 12), 0, 0));
- jPanel1.add(jPanel5,
- new java.awt.GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
- java.awt.GridBagConstraints.WEST,
- java.awt.GridBagConstraints.HORIZONTAL,
- new java.awt.Insets(0, 9, 0, 9), 0, 0));
- jLabel1.setText("Tag Id:");
- jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
- jPanel2.add(jLabel1);
- jPanel2.add(jTextField1);
- jLabel2.setText("Length:");
- jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
- jPanel3.add(jLabel2);
- jPanel3.add(jTextField2);
- jPanel4.setLayout(new java.awt.BorderLayout());
- jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
- javax.swing.BorderFactory.createLineBorder(
- new java.awt.Color(153, 153, 153), 1), "Value",
- javax.swing.border.TitledBorder.LEADING,
- javax.swing.border.TitledBorder.TOP,
- new java.awt.Font("Comic Sans MS", 0, 14),
- new java.awt.Color(60, 60, 60)));
- jPanel4.add(jScrollPane2, java.awt.BorderLayout.CENTER);
- jTextArea1.setText("");
- jScrollPane2.getViewport().add(jTextArea1);
- jTextField1.setText("");
- jTextField1.setMinimumSize(new java.awt.Dimension(104, 25));
- jTextField1.setPreferredSize(new java.awt.Dimension(104, 25));
- jTextField1.setEditable(true);
- jTextField2.setText("");
- jTextField2.setPreferredSize(new java.awt.Dimension(104,25));
- jTextField2.setMinimumSize(new java.awt.Dimension(104,25));
- jTextField2.setEditable(true);
- jScrollPane2.setVerticalScrollBarPolicy(
- javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
- jScrollPane2.setHorizontalScrollBarPolicy(
- javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
- jScrollPane2.setBorder(null);
-
- jTree1.setModel( new DefaultTreeModel( root ) ) ;
- }
-
- /** Exit the Application */
- private void exitForm(WindowEvent evt) {
- System.exit(0);
- }
-
-
- public void startup()
- {
- setSize( 800, 640 ) ;
- Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
- Dimension frameSize = getSize();
- frameSize.height = ((frameSize.height > screenSize.height)
- ? screenSize.height : frameSize.height);
- frameSize.width = ((frameSize.width > screenSize.width)
- ? screenSize.width : frameSize.width);
- setLocation((screenSize.width - frameSize.width) / 2,
- (screenSize.height - frameSize.height) / 2);
- setVisible(true);
- }
-
- private BorderLayout layout = new BorderLayout();
- private JLabel statusBar = new JLabel("Ready");
- private JSplitPane jSplitPane1 = new JSplitPane();
- private JScrollPane jScrollPane1 = new JScrollPane();
- private JPanel jPanel1 = new JPanel();
- private JTree jTree1 = new JTree();
- private JPanel jPanel2 = new JPanel();
- private JPanel jPanel5 = new JPanel();
- private JPanel jPanel3 = new JPanel();
- private JPanel jPanel4 = new JPanel();
- private JLabel jLabel1 = new JLabel();
- private JLabel jLabel3 = new JLabel();
- private JLabel jLabel2 = new JLabel();
- private JScrollPane jScrollPane2 = new JScrollPane();
- private JTextArea jTextArea1 = new JTextArea();
- private JTextField jTextField1 = new JTextField();
- private JTextField jTextField3 = new JTextField();
- private JTextField jTextField2 = new JTextField();
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import javax.swing.JMenu ;
+import javax.swing.JTree ;
+import javax.swing.JFrame ;
+import javax.swing.JPanel ;
+import javax.swing.JLabel ;
+import javax.swing.JMenuBar ;
+import javax.swing.JMenuItem ;
+import javax.swing.JTextArea ;
+import javax.swing.JTextField ;
+import javax.swing.JSplitPane ;
+import javax.swing.JScrollPane ;
+import javax.swing.JFileChooser ;
+import javax.swing.tree.DefaultTreeModel ;
+
+import java.awt.Toolkit ;
+import java.awt.Dimension ;
+import java.awt.BorderLayout ;
+import java.awt.event.ActionEvent ;
+import java.awt.event.WindowEvent ;
+import java.awt.event.ActionListener ;
+
+
+/**
+ * Simple JTree view of a tuple tree.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TupleTreeAnalyzer extends JFrame
+{
+ DefaultMutableTupleNode root = null ;
+
+ /** Creates new form JFrame */
+ public TupleTreeAnalyzer( DefaultMutableTupleNode root )
+ {
+ this.root = root ;
+
+ initGUI() ;
+ pack() ;
+ }
+
+ /** This method is called from within
+ * the constructor to initialize the form. */
+ private void initGUI() {
+
+ getContentPane().setLayout(layout);
+ JPanel content = new JPanel();
+ content.setPreferredSize(new Dimension(300, 200));
+ getContentPane().add(content, BorderLayout.CENTER);
+ // set title
+ setTitle("");
+ // add status bar
+ getContentPane().add(statusBar, BorderLayout.SOUTH);
+ // add menu bar
+ JMenuBar menuBar = new JMenuBar();
+ JMenu menuFile = new JMenu("File");
+ menuFile.setMnemonic('F');
+ // create Exit menu item
+ JMenuItem fileExit = new JMenuItem("Exit");
+ fileExit.setMnemonic('E');
+ fileExit.addActionListener(
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ System.exit(0);
+ }
+ });
+ // create About menu item
+ JMenu menuHelp = new JMenu("Help");
+ menuHelp.setMnemonic('H');
+ JMenuItem helpAbout = new JMenuItem("About");
+ helpAbout.setMnemonic('A');
+ helpAbout.addActionListener(
+ new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ }
+ });
+ menuHelp.add(helpAbout);
+ // create Open menu item
+ final JFileChooser fc = new JFileChooser();
+ JMenuItem openFile = new JMenuItem("Open");
+ openFile.setMnemonic('O');
+ openFile.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent e) {
+ int returnVal = fc.showOpenDialog(TupleTreeAnalyzer.this);
+ if (returnVal == javax.swing.JFileChooser.APPROVE_OPTION) {
+ java.io.File file = fc.getSelectedFile();
+ // Write your code here what to do with selected file
+ } else {
+ // Write your code here what to do if user has canceled
+ }
+ }
+ });
+ menuFile.add(openFile);
+ // create Save menu item
+ JMenuItem saveFile = new JMenuItem("Save");
+ saveFile.setMnemonic('S');
+ saveFile.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent e) {
+ int returnVal = fc.showSaveDialog(TupleTreeAnalyzer.this);
+ if (returnVal == JFileChooser.APPROVE_OPTION) {
+ java.io.File file = fc.getSelectedFile();
+ // Write your code here what to do with selected file
+ } else {
+// Write your code here what to do if user has canceled Save dialog
+ }
+ }
+ });
+ menuFile.add(saveFile);
+ // create Print menu item
+ JMenuItem print = new JMenuItem("Print");
+ print.setMnemonic('P');
+ print.addActionListener(
+ new java.awt.event.ActionListener() {
+ public void actionPerformed(java.awt.event.ActionEvent e) {
+ // PrintDialog.print(getGraphics());
+ }
+ }); menuFile.add(print);
+ menuFile.add(fileExit);
+ menuBar.add(menuFile);
+ menuBar.add(menuHelp);
+ // sets menu bar
+ setJMenuBar(menuBar);
+ addWindowListener(
+ new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ exitForm(evt);
+ }
+ });
+
+
+ jLabel3.setText("Type Class:");
+ jPanel5.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
+ jPanel5.add(jLabel3);
+ jPanel5.add(jTextField3);
+ jTextField3.setText("");
+ jTextField3.setMinimumSize(new java.awt.Dimension(104, 25));
+ jTextField3.setPreferredSize(new java.awt.Dimension(104, 25));
+ jSplitPane1.setLastDividerLocation(50);
+ jSplitPane1.setDividerLocation(180);
+ jSplitPane1.add(jScrollPane1, javax.swing.JSplitPane.LEFT);
+ jSplitPane1.add(jPanel1, javax.swing.JSplitPane.RIGHT);
+ addWindowListener(
+ new java.awt.event.WindowAdapter() {
+ public void windowClosing(java.awt.event.WindowEvent evt) {
+ exitForm(evt);
+ }
+ });
+ getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER);
+ jScrollPane1.getViewport().add(jTree1);
+ jTree1.setBounds(new java.awt.Rectangle(95,95,85,84));
+ jTree1.setShowsRootHandles(true);
+ jPanel1.setLayout(new java.awt.GridBagLayout());
+ jPanel1.add(jPanel2,
+ new java.awt.GridBagConstraints(0, 0, 1, 1, 1.0, 1.0,
+ java.awt.GridBagConstraints.WEST,
+ java.awt.GridBagConstraints.HORIZONTAL,
+ new java.awt.Insets(0, 9, 0, 9), 0, 0));
+ jPanel1.add(jPanel3,
+ new java.awt.GridBagConstraints(0, 1, 1, 1, 1.0, 1.0,
+ java.awt.GridBagConstraints.WEST,
+ java.awt.GridBagConstraints.HORIZONTAL,
+ new java.awt.Insets(0, 9, 0, 9), 0, 0));
+ jPanel1.add(jPanel4,
+ new java.awt.GridBagConstraints(0, 3, 1, 35, 1.0, 1.0,
+ java.awt.GridBagConstraints.CENTER,
+ java.awt.GridBagConstraints.BOTH,
+ new java.awt.Insets(9, 12, 9, 12), 0, 0));
+ jPanel1.add(jPanel5,
+ new java.awt.GridBagConstraints(0, 2, 1, 1, 1.0, 1.0,
+ java.awt.GridBagConstraints.WEST,
+ java.awt.GridBagConstraints.HORIZONTAL,
+ new java.awt.Insets(0, 9, 0, 9), 0, 0));
+ jLabel1.setText("Tag Id:");
+ jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
+ jPanel2.add(jLabel1);
+ jPanel2.add(jTextField1);
+ jLabel2.setText("Length:");
+ jPanel3.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
+ jPanel3.add(jLabel2);
+ jPanel3.add(jTextField2);
+ jPanel4.setLayout(new java.awt.BorderLayout());
+ jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
+ javax.swing.BorderFactory.createLineBorder(
+ new java.awt.Color(153, 153, 153), 1), "Value",
+ javax.swing.border.TitledBorder.LEADING,
+ javax.swing.border.TitledBorder.TOP,
+ new java.awt.Font("Comic Sans MS", 0, 14),
+ new java.awt.Color(60, 60, 60)));
+ jPanel4.add(jScrollPane2, java.awt.BorderLayout.CENTER);
+ jTextArea1.setText("");
+ jScrollPane2.getViewport().add(jTextArea1);
+ jTextField1.setText("");
+ jTextField1.setMinimumSize(new java.awt.Dimension(104, 25));
+ jTextField1.setPreferredSize(new java.awt.Dimension(104, 25));
+ jTextField1.setEditable(true);
+ jTextField2.setText("");
+ jTextField2.setPreferredSize(new java.awt.Dimension(104,25));
+ jTextField2.setMinimumSize(new java.awt.Dimension(104,25));
+ jTextField2.setEditable(true);
+ jScrollPane2.setVerticalScrollBarPolicy(
+ javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
+ jScrollPane2.setHorizontalScrollBarPolicy(
+ javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
+ jScrollPane2.setBorder(null);
+
+ jTree1.setModel( new DefaultTreeModel( root ) ) ;
+ }
+
+ /** Exit the Application */
+ private void exitForm(WindowEvent evt) {
+ System.exit(0);
+ }
+
+
+ public void startup()
+ {
+ setSize( 800, 640 ) ;
+ Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
+ Dimension frameSize = getSize();
+ frameSize.height = ((frameSize.height > screenSize.height)
+ ? screenSize.height : frameSize.height);
+ frameSize.width = ((frameSize.width > screenSize.width)
+ ? screenSize.width : frameSize.width);
+ setLocation((screenSize.width - frameSize.width) / 2,
+ (screenSize.height - frameSize.height) / 2);
+ setVisible(true);
+ }
+
+ private BorderLayout layout = new BorderLayout();
+ private JLabel statusBar = new JLabel("Ready");
+ private JSplitPane jSplitPane1 = new JSplitPane();
+ private JScrollPane jScrollPane1 = new JScrollPane();
+ private JPanel jPanel1 = new JPanel();
+ private JTree jTree1 = new JTree();
+ private JPanel jPanel2 = new JPanel();
+ private JPanel jPanel5 = new JPanel();
+ private JPanel jPanel3 = new JPanel();
+ private JPanel jPanel4 = new JPanel();
+ private JLabel jLabel1 = new JLabel();
+ private JLabel jLabel3 = new JLabel();
+ private JLabel jLabel2 = new JLabel();
+ private JScrollPane jScrollPane2 = new JScrollPane();
+ private JTextArea jTextArea1 = new JTextArea();
+ private JTextField jTextField1 = new JTextField();
+ private JTextField jTextField3 = new JTextField();
+ private JTextField jTextField2 = new JTextField();
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/java/org/apache/snickers/ber/TupleTreeDecoder.java Sun Mar 14 14:02:18 2004
@@ -1,175 +1,175 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.nio.ByteBuffer;
-import java.util.Stack ;
-
-import org.apache.commons.codec.DecoderException ;
-import org.apache.commons.codec.stateful.CallbackHistory;
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-import org.apache.commons.codec.stateful.DecoderCallback ;
-import org.apache.commons.codec.stateful.StatefulDecoder ;
-import org.apache.commons.codec.stateful.DecoderMonitorAdapter ;
-
-
-/**
- * Builds a TLV tree from the TLV stream emitted from the decoder.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class TupleTreeDecoder implements StatefulDecoder
-{
- Stack stack = new Stack() ;
- BERDecoder decoder = new BERDecoder() ;
- DecoderCallback cb = null ;
- DecoderMonitor monitor = new DecoderMonitorAdapter() ;
-
-
- public TupleTreeDecoder()
- {
- BERDecoderCallback berCallback = new BERDecoderCallback()
- {
- public void tagDecoded( Tuple tlv ) { }
-
- public void lengthDecoded( Tuple tlv )
- {
- if ( ! tlv.isPrimitive )
- {
- MutableTupleNode child = null ;
- MutableTupleNode parent = null ;
- Tuple cloned = ( Tuple ) tlv.clone() ;
-
- if ( stack.isEmpty() )
- {
- stack.push( new DefaultMutableTupleNode( cloned ) ) ;
- return ;
- }
-
- parent = ( MutableTupleNode ) stack.peek() ;
- child = new DefaultMutableTupleNode( cloned ) ;
- child.setParent( parent ) ;
-
- int index = parent.getChildCount() - 1 ;
-
- if ( index < 0 )
- {
- index = 0 ;
- }
-
- parent.insert( child, index ) ;
- stack.push( child ) ;
- }
- }
-
- public void
- decodeOccurred( StatefulDecoder decoder, Object decoded )
- {
- handleTuple( ( Tuple ) decoded ) ;
- }
- } ;
-
- decoder.setCallback( berCallback ) ;
- decoder.setDecoderMonitor( monitor ) ;
- }
-
-
- public void handleTuple( Tuple t )
- {
- System.out.println( t.id ) ;
- MutableTupleNode node = null ;
-
- if ( t.isPrimitive )
- {
- node = new DefaultMutableTupleNode( ( Tuple ) t.clone() ) ;
-
- if ( ! stack.isEmpty() )
- {
- MutableTupleNode parent = ( MutableTupleNode ) stack.peek() ;
- node.setParent( parent ) ;
- int index = parent.getChildCount() - 1 ;
-
- if ( index < 0 )
- {
- index = 0 ;
- }
-
- parent.insert( node, index ) ;
- }
-
- return ;
- }
-
- node = ( MutableTupleNode ) stack.pop() ;
-
- if ( cb != null && stack.isEmpty() )
- {
- cb.decodeOccurred( this, node ) ;
- }
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.StatefulDecoder#decode(
- * java.lang.Object)
- */
- public void decode( Object encoded ) throws DecoderException
- {
- decoder.decode( encoded ) ;
- }
-
-
- public static TupleNode treeDecode( ByteBuffer buf ) throws DecoderException
- {
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- CallbackHistory history = new CallbackHistory( 1 ) ;
-
- decoder.setCallback( history ) ;
- decoder.decode( buf ) ;
-
- if ( history.isEmpty() )
- {
- return null ;
- }
-
- return ( TupleNode ) history.getMostRecent() ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.StatefulDecoder#setCallback(
- * org.apache.commons.codec.stateful.DecoderCallback)
- */
- public void setCallback( DecoderCallback cb )
- {
- this.cb = cb ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.StatefulDecoder#setDecoderMonitor(
- * org.apache.commons.codec.stateful.DecoderMonitor)
- */
- public void setDecoderMonitor( DecoderMonitor monitor )
- {
- this.monitor = monitor ;
- decoder.setDecoderMonitor( monitor ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.nio.ByteBuffer;
+import java.util.Stack ;
+
+import org.apache.commons.codec.DecoderException ;
+import org.apache.commons.codec.stateful.CallbackHistory;
+import org.apache.commons.codec.stateful.DecoderMonitor ;
+import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+import org.apache.commons.codec.stateful.DecoderMonitorAdapter ;
+
+
+/**
+ * Builds a TLV tree from the TLV stream emitted from the decoder.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TupleTreeDecoder implements StatefulDecoder
+{
+ Stack stack = new Stack() ;
+ BERDecoder decoder = new BERDecoder() ;
+ DecoderCallback cb = null ;
+ DecoderMonitor monitor = new DecoderMonitorAdapter() ;
+
+
+ public TupleTreeDecoder()
+ {
+ BERDecoderCallback berCallback = new BERDecoderCallback()
+ {
+ public void tagDecoded( Tuple tlv ) { }
+
+ public void lengthDecoded( Tuple tlv )
+ {
+ if ( ! tlv.isPrimitive )
+ {
+ MutableTupleNode child = null ;
+ MutableTupleNode parent = null ;
+ Tuple cloned = ( Tuple ) tlv.clone() ;
+
+ if ( stack.isEmpty() )
+ {
+ stack.push( new DefaultMutableTupleNode( cloned ) ) ;
+ return ;
+ }
+
+ parent = ( MutableTupleNode ) stack.peek() ;
+ child = new DefaultMutableTupleNode( cloned ) ;
+ child.setParent( parent ) ;
+
+ int index = parent.getChildCount() - 1 ;
+
+ if ( index < 0 )
+ {
+ index = 0 ;
+ }
+
+ parent.insert( child, index ) ;
+ stack.push( child ) ;
+ }
+ }
+
+ public void
+ decodeOccurred( StatefulDecoder decoder, Object decoded )
+ {
+ handleTuple( ( Tuple ) decoded ) ;
+ }
+ } ;
+
+ decoder.setCallback( berCallback ) ;
+ decoder.setDecoderMonitor( monitor ) ;
+ }
+
+
+ public void handleTuple( Tuple t )
+ {
+ System.out.println( t.id ) ;
+ MutableTupleNode node = null ;
+
+ if ( t.isPrimitive )
+ {
+ node = new DefaultMutableTupleNode( ( Tuple ) t.clone() ) ;
+
+ if ( ! stack.isEmpty() )
+ {
+ MutableTupleNode parent = ( MutableTupleNode ) stack.peek() ;
+ node.setParent( parent ) ;
+ int index = parent.getChildCount() - 1 ;
+
+ if ( index < 0 )
+ {
+ index = 0 ;
+ }
+
+ parent.insert( node, index ) ;
+ }
+
+ return ;
+ }
+
+ node = ( MutableTupleNode ) stack.pop() ;
+
+ if ( cb != null && stack.isEmpty() )
+ {
+ cb.decodeOccurred( this, node ) ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#decode(
+ * java.lang.Object)
+ */
+ public void decode( Object encoded ) throws DecoderException
+ {
+ decoder.decode( encoded ) ;
+ }
+
+
+ public static TupleNode treeDecode( ByteBuffer buf ) throws DecoderException
+ {
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ CallbackHistory history = new CallbackHistory( 1 ) ;
+
+ decoder.setCallback( history ) ;
+ decoder.decode( buf ) ;
+
+ if ( history.isEmpty() )
+ {
+ return null ;
+ }
+
+ return ( TupleNode ) history.getMostRecent() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#setCallback(
+ * org.apache.commons.codec.stateful.DecoderCallback)
+ */
+ public void setCallback( DecoderCallback cb )
+ {
+ this.cb = cb ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.StatefulDecoder#setDecoderMonitor(
+ * org.apache.commons.codec.stateful.DecoderMonitor)
+ */
+ public void setDecoderMonitor( DecoderMonitor monitor )
+ {
+ this.monitor = monitor ;
+ decoder.setDecoderMonitor( monitor ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/SnickersDecoderTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/SnickersDecoderTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/SnickersDecoderTest.java Sun Mar 14 14:02:18 2004
@@ -1,337 +1,337 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers ;
-
-
-import java.util.ArrayList ;
-
-import java.math.BigInteger ;
-
-import java.nio.ByteBuffer ;
-
-import javax.naming.directory.Attributes ;
-
-import org.apache.commons.codec.stateful.DecoderMonitor ;
-import org.apache.commons.codec.stateful.DecoderCallback ;
-import org.apache.commons.codec.stateful.StatefulDecoder ;
-
-import org.apache.ldap.common.message.Message ;
-import org.apache.ldap.common.message.ScopeEnum ;
-import org.apache.ldap.common.filter.PresenceNode ;
-import org.apache.ldap.common.message.MessageEncoder ;
-import org.apache.ldap.common.message.AddRequestImpl ;
-import org.apache.ldap.common.message.BindRequestImpl ;
-import org.apache.ldap.common.message.DerefAliasesEnum ;
-import org.apache.ldap.common.message.DeleteRequestImpl ;
-import org.apache.ldap.common.message.SearchRequestImpl ;
-import org.apache.ldap.common.message.ModifyRequestImpl ;
-import org.apache.ldap.common.message.AbandonRequestImpl ;
-import org.apache.ldap.common.message.CompareRequestImpl ;
-import org.apache.ldap.common.message.ExtendedRequestImpl ;
-import org.apache.ldap.common.message.ModifyDnRequestImpl ;
-import org.apache.ldap.common.message.LockableAttributesImpl ;
-import org.apache.snickers.ber.TupleNode;
-import org.apache.snickers.ber.TupleTreeDecoder;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests the SnickersDecoder.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class SnickersDecoderTest extends TestCase
- implements DecoderCallback, DecoderMonitor
-{
- private SnickersDecoder decoder = null ;
- private ArrayList msgList = new ArrayList() ;
-
-
- /* (non-Javadoc)
- * @see junit.framework.TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
-
- decoder = new SnickersDecoder( this ) ;
- decoder.setDecoderMonitor( this ) ;
- }
-
-
- /* (non-Javadoc)
- * @see junit.framework.TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
-
- msgList.clear() ;
- decoder = null ;
- }
-
-
- /*
- * Class to test for Message decode(TupleNode)
- */
- public void testDecodeTupleNode() throws Exception
- {
- TupleNode node = null ;
-
- AddRequestImpl request = new AddRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
-
- Attributes attrs = new LockableAttributesImpl() ;
- attrs.put( "attr0", "val0" ) ;
- attrs.put( "attr0", "val1" ) ;
- attrs.put( "attr0", "val2" ) ;
- attrs.put( "attr1", "val0" ) ;
- attrs.put( "attr2", "val0" ) ;
- attrs.put( "attr2", "val1" ) ;
-
- request.setEntry( attrs ) ;
- MessageEncoder encoder = new MessageEncoder() ;
- byte[] bites = encoder.encode( request ) ;
- ByteBuffer buf = ByteBuffer.wrap( bites ) ;
- TupleTreeDecoder ttd = new TupleTreeDecoder() ;
-
- final ArrayList list = new ArrayList() ;
- ttd.setCallback( new DecoderCallback(){
- public void decodeOccurred(StatefulDecoder arg0, Object arg1)
- {
- list.add( arg1 ) ;
- }}) ;
-
- ttd.decode( buf ) ;
- node = ( TupleNode ) list.get( 0 ) ;
- Message msg = decoder.decode( node ) ;
- assertNotNull( msg ) ;
- }
-
-
- public void decode( Message msg ) throws Exception
- {
- MessageEncoder encoder = new MessageEncoder() ;
- ByteBuffer buf = ByteBuffer.wrap( encoder.encode( msg ) ) ;
- decoder.decode( buf ) ;
- }
-
-
- public void testBindMessage() throws Exception
- {
- BindRequestImpl request = new BindRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- request.setSimple( true ) ;
- request.setCredentials( "password".getBytes() ) ;
- request.setVersion3( true ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testAddMessage() throws Exception
- {
- AddRequestImpl request = new AddRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
-
- Attributes attrs = new LockableAttributesImpl() ;
- attrs.put( "attr0", "val0" ) ;
- attrs.put( "attr0", "val1" ) ;
- attrs.put( "attr0", "val2" ) ;
- attrs.put( "attr1", "val0" ) ;
- attrs.put( "attr2", "val0" ) ;
- attrs.put( "attr2", "val1" ) ;
-
- request.setEntry( attrs ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testDeleteMessage() throws Exception
- {
- DeleteRequestImpl request = new DeleteRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testAbandonMessage() throws Exception
- {
- AbandonRequestImpl request = new AbandonRequestImpl( BigInteger.ONE ) ;
- request.setAbandoned( new BigInteger( "3" ) ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testCompareMessage() throws Exception
- {
- CompareRequestImpl request = new CompareRequestImpl( BigInteger.ONE ) ;
- request.setAssertionValue( "testvalue" ) ;
- request.setAttributeId( "testattr" ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testExtendedMessage() throws Exception
- {
- ExtendedRequestImpl request = new ExtendedRequestImpl( BigInteger.ONE ) ;
- request.setOid( "1234.1234.1324" ) ;
- request.setPayload( "Hello World".getBytes() ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testModifyDnMessage() throws Exception
- {
- ModifyDnRequestImpl request = new ModifyDnRequestImpl( BigInteger.ONE ) ;
- request.setDeleteOldRdn(true) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- request.setNewRdn( "uid=aok" ) ;
- request.setNewSuperior( "dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testModifyMessage() throws Exception
- {
- ModifyRequestImpl request = new ModifyRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testSearchMessage() throws Exception
- {
- SearchRequestImpl request = new SearchRequestImpl( BigInteger.ONE ) ;
- request.setBase( "uid=akarasulu,dc=example,dc=com" ) ;
- request.setDerefAliases( DerefAliasesEnum.DEREFALWAYS ) ;
- PresenceNode node = new PresenceNode( "attrib0" ) ;
- request.setFilter( node ) ;
- request.setScope( ScopeEnum.BASEOBJECT ) ;
- request.setSizeLimit( BigInteger.ZERO ) ;
- request.setTimeLimit( BigInteger.ZERO ) ;
- decode( request ) ;
- assertFalse( msgList.isEmpty() ) ;
- }
-
-
- public void testSetCallback()
- {
- decoder.setCallback( this ) ;
- }
-
-
- public void testSetDecoderMonitor()
- {
- decoder.setDecoderMonitor( this ) ;
- assertNotNull( decoder ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
- */
- public void decodeOccurred( StatefulDecoder arg0, Object message )
- {
- msgList.add( message ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackOccured(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderCallback, java.lang.Object)
- */
- public void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
- Object decoded )
- {
- assertSame( decoder, this.decoder ) ;
- assertSame( this, cb ) ;
- assertNotNull( decoded ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackSet(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderCallback,
- * org.apache.commons.codec.stateful.DecoderCallback)
- */
- public void callbackSet( StatefulDecoder decoder, DecoderCallback cb,
- DecoderCallback ncb )
- {
- assertSame(this.decoder, decoder) ;
- assertNotNull(cb) ;
- assertNotNull(ncb) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#error(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void error( StatefulDecoder decoder, Exception e )
- {
- assertSame( decoder, this.decoder ) ;
- assertNotNull( e ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#fatalError(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void fatalError( StatefulDecoder decoder, Exception e )
- {
- assertSame( decoder, this.decoder ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#monitorSet(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderMonitor)
- */
- public void monitorSet( StatefulDecoder decoder, DecoderMonitor monitor )
- {
- assertSame( decoder, this.decoder ) ;
- assertNotNull( monitor ) ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#warning(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void warning( StatefulDecoder decoder, Exception e )
- {
- assertSame( this.decoder, decoder ) ;
- assertNotNull( e ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers ;
+
+
+import java.util.ArrayList ;
+
+import java.math.BigInteger ;
+
+import java.nio.ByteBuffer ;
+
+import javax.naming.directory.Attributes ;
+
+import org.apache.commons.codec.stateful.DecoderMonitor ;
+import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+
+import org.apache.ldap.common.message.Message ;
+import org.apache.ldap.common.message.ScopeEnum ;
+import org.apache.ldap.common.filter.PresenceNode ;
+import org.apache.ldap.common.message.MessageEncoder ;
+import org.apache.ldap.common.message.AddRequestImpl ;
+import org.apache.ldap.common.message.BindRequestImpl ;
+import org.apache.ldap.common.message.DerefAliasesEnum ;
+import org.apache.ldap.common.message.DeleteRequestImpl ;
+import org.apache.ldap.common.message.SearchRequestImpl ;
+import org.apache.ldap.common.message.ModifyRequestImpl ;
+import org.apache.ldap.common.message.AbandonRequestImpl ;
+import org.apache.ldap.common.message.CompareRequestImpl ;
+import org.apache.ldap.common.message.ExtendedRequestImpl ;
+import org.apache.ldap.common.message.ModifyDnRequestImpl ;
+import org.apache.ldap.common.message.LockableAttributesImpl ;
+import org.apache.snickers.ber.TupleNode;
+import org.apache.snickers.ber.TupleTreeDecoder;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the SnickersDecoder.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class SnickersDecoderTest extends TestCase
+ implements DecoderCallback, DecoderMonitor
+{
+ private SnickersDecoder decoder = null ;
+ private ArrayList msgList = new ArrayList() ;
+
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ decoder = new SnickersDecoder( this ) ;
+ decoder.setDecoderMonitor( this ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+
+ msgList.clear() ;
+ decoder = null ;
+ }
+
+
+ /*
+ * Class to test for Message decode(TupleNode)
+ */
+ public void testDecodeTupleNode() throws Exception
+ {
+ TupleNode node = null ;
+
+ AddRequestImpl request = new AddRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+
+ Attributes attrs = new LockableAttributesImpl() ;
+ attrs.put( "attr0", "val0" ) ;
+ attrs.put( "attr0", "val1" ) ;
+ attrs.put( "attr0", "val2" ) ;
+ attrs.put( "attr1", "val0" ) ;
+ attrs.put( "attr2", "val0" ) ;
+ attrs.put( "attr2", "val1" ) ;
+
+ request.setEntry( attrs ) ;
+ MessageEncoder encoder = new MessageEncoder() ;
+ byte[] bites = encoder.encode( request ) ;
+ ByteBuffer buf = ByteBuffer.wrap( bites ) ;
+ TupleTreeDecoder ttd = new TupleTreeDecoder() ;
+
+ final ArrayList list = new ArrayList() ;
+ ttd.setCallback( new DecoderCallback(){
+ public void decodeOccurred(StatefulDecoder arg0, Object arg1)
+ {
+ list.add( arg1 ) ;
+ }}) ;
+
+ ttd.decode( buf ) ;
+ node = ( TupleNode ) list.get( 0 ) ;
+ Message msg = decoder.decode( node ) ;
+ assertNotNull( msg ) ;
+ }
+
+
+ public void decode( Message msg ) throws Exception
+ {
+ MessageEncoder encoder = new MessageEncoder() ;
+ ByteBuffer buf = ByteBuffer.wrap( encoder.encode( msg ) ) ;
+ decoder.decode( buf ) ;
+ }
+
+
+ public void testBindMessage() throws Exception
+ {
+ BindRequestImpl request = new BindRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ request.setSimple( true ) ;
+ request.setCredentials( "password".getBytes() ) ;
+ request.setVersion3( true ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testAddMessage() throws Exception
+ {
+ AddRequestImpl request = new AddRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+
+ Attributes attrs = new LockableAttributesImpl() ;
+ attrs.put( "attr0", "val0" ) ;
+ attrs.put( "attr0", "val1" ) ;
+ attrs.put( "attr0", "val2" ) ;
+ attrs.put( "attr1", "val0" ) ;
+ attrs.put( "attr2", "val0" ) ;
+ attrs.put( "attr2", "val1" ) ;
+
+ request.setEntry( attrs ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testDeleteMessage() throws Exception
+ {
+ DeleteRequestImpl request = new DeleteRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testAbandonMessage() throws Exception
+ {
+ AbandonRequestImpl request = new AbandonRequestImpl( BigInteger.ONE ) ;
+ request.setAbandoned( new BigInteger( "3" ) ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testCompareMessage() throws Exception
+ {
+ CompareRequestImpl request = new CompareRequestImpl( BigInteger.ONE ) ;
+ request.setAssertionValue( "testvalue" ) ;
+ request.setAttributeId( "testattr" ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testExtendedMessage() throws Exception
+ {
+ ExtendedRequestImpl request = new ExtendedRequestImpl( BigInteger.ONE ) ;
+ request.setOid( "1234.1234.1324" ) ;
+ request.setPayload( "Hello World".getBytes() ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testModifyDnMessage() throws Exception
+ {
+ ModifyDnRequestImpl request = new ModifyDnRequestImpl( BigInteger.ONE ) ;
+ request.setDeleteOldRdn(true) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ request.setNewRdn( "uid=aok" ) ;
+ request.setNewSuperior( "dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testModifyMessage() throws Exception
+ {
+ ModifyRequestImpl request = new ModifyRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testSearchMessage() throws Exception
+ {
+ SearchRequestImpl request = new SearchRequestImpl( BigInteger.ONE ) ;
+ request.setBase( "uid=akarasulu,dc=example,dc=com" ) ;
+ request.setDerefAliases( DerefAliasesEnum.DEREFALWAYS ) ;
+ PresenceNode node = new PresenceNode( "attrib0" ) ;
+ request.setFilter( node ) ;
+ request.setScope( ScopeEnum.BASEOBJECT ) ;
+ request.setSizeLimit( BigInteger.ZERO ) ;
+ request.setTimeLimit( BigInteger.ZERO ) ;
+ decode( request ) ;
+ assertFalse( msgList.isEmpty() ) ;
+ }
+
+
+ public void testSetCallback()
+ {
+ decoder.setCallback( this ) ;
+ }
+
+
+ public void testSetDecoderMonitor()
+ {
+ decoder.setDecoderMonitor( this ) ;
+ assertNotNull( decoder ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
+ */
+ public void decodeOccurred( StatefulDecoder arg0, Object message )
+ {
+ msgList.add( message ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackOccured(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderCallback, java.lang.Object)
+ */
+ public void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
+ Object decoded )
+ {
+ assertSame( decoder, this.decoder ) ;
+ assertSame( this, cb ) ;
+ assertNotNull( decoded ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackSet(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderCallback,
+ * org.apache.commons.codec.stateful.DecoderCallback)
+ */
+ public void callbackSet( StatefulDecoder decoder, DecoderCallback cb,
+ DecoderCallback ncb )
+ {
+ assertSame(this.decoder, decoder) ;
+ assertNotNull(cb) ;
+ assertNotNull(ncb) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#error(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void error( StatefulDecoder decoder, Exception e )
+ {
+ assertSame( decoder, this.decoder ) ;
+ assertNotNull( e ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#fatalError(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void fatalError( StatefulDecoder decoder, Exception e )
+ {
+ assertSame( decoder, this.decoder ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#monitorSet(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderMonitor)
+ */
+ public void monitorSet( StatefulDecoder decoder, DecoderMonitor monitor )
+ {
+ assertSame( decoder, this.decoder ) ;
+ assertNotNull( monitor ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#warning(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void warning( StatefulDecoder decoder, Exception e )
+ {
+ assertSame( this.decoder, decoder ) ;
+ assertNotNull( e ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/asn/TestBitString.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/asn/TestBitString.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/asn/TestBitString.java Sun Mar 14 14:02:18 2004
@@ -1,242 +1,242 @@
-/*
-
- ============================================================================
- The Apache Software License, Version 1.1
- ============================================================================
-
- Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without modifica-
- tion, are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
- 3. The end-user documentation included with the redistribution, if any, must
- include the following acknowledgment: "This product includes software
- developed by the Apache Software Foundation (http://www.apache.org/)."
- Alternately, this acknowledgment may appear in the software itself, if
- and wherever such third-party acknowledgments normally appear.
-
- 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
- and "Apache Software Foundation" must not be used to endorse or promote
- products derived from this software without prior written
- permission. For written permission, please contact apache@apache.org.
-
- 5. Products derived from this software may not be called "Apache", nor may
- "Apache" appear in their name, without prior written permission of the
- Apache Software Foundation.
-
- THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
- DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This software consists of voluntary contributions made by many individuals
- on behalf of the Apache Software Foundation. For more information on the
- Apache Software Foundation, please see <http://www.apache.org/>.
-
-*/
-
-package org.apache.snickers.asn;
-
-import java.util.BitSet;
-import junit.framework.TestCase;
-import org.apache.commons.codec.binary.Binary;
-import org.apache.snickers.asn.BitString;
-
-/**
- * @author Wes McKean
- *
- * Test the BitString class
- */
-public class TestBitString extends TestCase {
-
- String binary[] = {
- "1",
- "10",
- "100",
- "1000",
- "10000",
- "100000",
- "1000000",
- "10000000"
- };
-
- /**
- * @param name the test to run
- */
- public TestBitString(String name) {
- super(name);
- }
-
- /**
- * Run a simple test of the bits in <code>Binary</code>
- *
- * @throws Exception if an error occurs
- */
- public void testSimpleBinary() throws Exception {
- int vals[] = {
- Binary.BIT_0,
- Binary.BIT_1,
- Binary.BIT_2,
- Binary.BIT_3,
- Binary.BIT_4,
- Binary.BIT_5,
- Binary.BIT_6,
- Binary.BIT_7
- };
-
- for( int i = 0; i < vals.length; i++ ) {
- int[] tmp = new int[1];
- tmp[0] = vals[i];
- BitString bs = new BitString( tmp,8 );
- BitSet bset = bs;
- // System.out.println( "\n" + bs.toString());
- // System.out.println( bset.toString() );
- assertTrue( "testSimpleBinary:" + binary[i], bs.toString().equals(binary[i]));
- }
- }
-
- /**
- * A test for more complicated bit patterns. Nothing fancy yet.
- *
- * @throws Exception
- */
- public void testComplicated() throws Exception {
- int []tmp;
-
- // First test. 1 int with various bits set
- tmp = new int[1];
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
-
- BitString bs = new BitString( tmp, 16 );
- BitSet bset = bs;
- //System.out.println( "\n" + bs.toString() );
- //System.out.println( bset.toString() );
- assertTrue( "testComplicated:1", bs.toString().equals("1000100000001110") );
-
- // Lets do a 24 bit bit string.
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 16 ) | ((Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 )<<8) |
- (Binary.BIT_6 | Binary.BIT_0);
- bs = new BitString( tmp, 24 );
- //System.out.println( "\n" + bs.toString() );
- bset = bs;
- //System.out.println( bset.toString() );
- assertTrue( "testComplicated:2", bs.toString().equals("100010000000111001000001") );
-
- // Lets do a 32 bit string
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 24 ) | ((Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 )<<16) |
- ((Binary.BIT_6 | Binary.BIT_0) << 8 ) | (Binary.BIT_5 | Binary.BIT_0 | Binary.BIT_1 | Binary.BIT_3 );
- bs = new BitString( tmp, 32 );
- //System.out.println( "\n" + bs.toString() );
- bset = bs;
- //System.out.println( bset );
- assertTrue( "testComplicated:3", bs.toString().equals("10001000000011100100000100101011") );
-
- // Now for the real test. 2 ints (64 bit strings)
- tmp = new int[2];
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 24 ) | ((Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 )<<16) |
- ((Binary.BIT_6 | Binary.BIT_0) << 8 ) | (Binary.BIT_5 | Binary.BIT_0 | Binary.BIT_1 | Binary.BIT_3 );
-
- tmp[1] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
- bs = new BitString( tmp,48 );
- //System.out.println( "\n" + bs.toString() );
- assertTrue( "testComplicated:4", bs.toString().equals("100010000000111010001000000011100100000100101011") );
- }
-
- /**
- * Execute some simple 32-bit tests
- */
- public void testAnd() throws Exception {
- // First test. 1 int with various bits set
- int[] tmp = new int[1];
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
-
- int[] tmp2 = new int[1];
- tmp2[0] = (( Binary.BIT_7 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_5 );
-
- BitString bs1 = new BitString( tmp, 16 );
- BitString bs2 = new BitString( tmp2, 16 );
- BitString delta = bs1.and(bs2);
-
- //System.out.println( "\n" + bs1.toString() );
- //System.out.println( bs2.toString() );
- //System.out.println( delta.toString() );
-
- // 1000100000001110
- // AND 1000000000000110
- // ----------------
- // 1000000000000110
-
- assertTrue( "testAnd", delta.toString().equals("1000000000000110"));
- }
-
- /**
- * Execute some simple 32-bit tests
- */
- public void testOr() throws Exception {
- // First test. 1 int with various bits set
- int[] tmp = new int[1];
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
-
- int[] tmp2 = new int[1];
- tmp2[0] = (( Binary.BIT_7 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_5 );
-
- BitString bs1 = new BitString( tmp, 16 );
- BitString bs2 = new BitString( tmp2, 16 );
- BitString delta = bs1.or(bs2);
-
- //System.out.println( "\n" + bs1.toString() );
- //System.out.println( bs2.toString() );
- //System.out.println( delta.toString() );
-
- // 1000100000001110
- // OR 1000000000100110
- // ----------------
- // 1000100000101110
-
- assertTrue( "testOr", delta.toString().equals("1000100000101110"));
- }
-
- /**
- * Execute some simple 32-bit tests
- */
- public void testXor() throws Exception {
- // First test. 1 int with various bits set
- int[] tmp = new int[1];
- tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
-
- int[] tmp2 = new int[1];
- tmp2[0] = (( Binary.BIT_7 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_5 );
-
- BitString bs1 = new BitString( tmp, 16 );
- BitString bs2 = new BitString( tmp2, 16 );
- BitString delta = bs1.xor(bs2);
-
- //System.out.println( "\n" + bs1.toString() );
- //System.out.println( bs2.toString() );
- //System.out.println( delta.toString() );
-
- // 1000100000001110
- // XOR 1000000000100110
- // ----------------
- // 0000100000101000
-
- assertTrue( "testXor", delta.toString().equals("100000101000"));
- }
-
- public static void main(String[] args) {
- junit.textui.TestRunner.run( TestBitString.class );
- }
-}
+/*
+
+ ============================================================================
+ The Apache Software License, Version 1.1
+ ============================================================================
+
+ Copyright (C) 1999-2002 The Apache Software Foundation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ 3. The end-user documentation included with the redistribution, if any, must
+ include the following acknowledgment: "This product includes software
+ developed by the Apache Software Foundation (http://www.apache.org/)."
+ Alternately, this acknowledgment may appear in the software itself, if
+ and wherever such third-party acknowledgments normally appear.
+
+ 4. The names "Eve Directory Server", "Apache Directory Project", "Apache Eve"
+ and "Apache Software Foundation" must not be used to endorse or promote
+ products derived from this software without prior written
+ permission. For written permission, please contact apache@apache.org.
+
+ 5. Products derived from this software may not be called "Apache", nor may
+ "Apache" appear in their name, without prior written permission of the
+ Apache Software Foundation.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This software consists of voluntary contributions made by many individuals
+ on behalf of the Apache Software Foundation. For more information on the
+ Apache Software Foundation, please see <http://www.apache.org/>.
+
+*/
+
+package org.apache.snickers.asn;
+
+import java.util.BitSet;
+import junit.framework.TestCase;
+import org.apache.commons.codec.binary.Binary;
+import org.apache.snickers.asn.BitString;
+
+/**
+ * @author Wes McKean
+ *
+ * Test the BitString class
+ */
+public class TestBitString extends TestCase {
+
+ String binary[] = {
+ "1",
+ "10",
+ "100",
+ "1000",
+ "10000",
+ "100000",
+ "1000000",
+ "10000000"
+ };
+
+ /**
+ * @param name the test to run
+ */
+ public TestBitString(String name) {
+ super(name);
+ }
+
+ /**
+ * Run a simple test of the bits in <code>Binary</code>
+ *
+ * @throws Exception if an error occurs
+ */
+ public void testSimpleBinary() throws Exception {
+ int vals[] = {
+ Binary.BIT_0,
+ Binary.BIT_1,
+ Binary.BIT_2,
+ Binary.BIT_3,
+ Binary.BIT_4,
+ Binary.BIT_5,
+ Binary.BIT_6,
+ Binary.BIT_7
+ };
+
+ for( int i = 0; i < vals.length; i++ ) {
+ int[] tmp = new int[1];
+ tmp[0] = vals[i];
+ BitString bs = new BitString( tmp,8 );
+ BitSet bset = bs;
+ // System.out.println( "\n" + bs.toString());
+ // System.out.println( bset.toString() );
+ assertTrue( "testSimpleBinary:" + binary[i], bs.toString().equals(binary[i]));
+ }
+ }
+
+ /**
+ * A test for more complicated bit patterns. Nothing fancy yet.
+ *
+ * @throws Exception
+ */
+ public void testComplicated() throws Exception {
+ int []tmp;
+
+ // First test. 1 int with various bits set
+ tmp = new int[1];
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
+
+ BitString bs = new BitString( tmp, 16 );
+ BitSet bset = bs;
+ //System.out.println( "\n" + bs.toString() );
+ //System.out.println( bset.toString() );
+ assertTrue( "testComplicated:1", bs.toString().equals("1000100000001110") );
+
+ // Lets do a 24 bit bit string.
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 16 ) | ((Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 )<<8) |
+ (Binary.BIT_6 | Binary.BIT_0);
+ bs = new BitString( tmp, 24 );
+ //System.out.println( "\n" + bs.toString() );
+ bset = bs;
+ //System.out.println( bset.toString() );
+ assertTrue( "testComplicated:2", bs.toString().equals("100010000000111001000001") );
+
+ // Lets do a 32 bit string
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 24 ) | ((Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 )<<16) |
+ ((Binary.BIT_6 | Binary.BIT_0) << 8 ) | (Binary.BIT_5 | Binary.BIT_0 | Binary.BIT_1 | Binary.BIT_3 );
+ bs = new BitString( tmp, 32 );
+ //System.out.println( "\n" + bs.toString() );
+ bset = bs;
+ //System.out.println( bset );
+ assertTrue( "testComplicated:3", bs.toString().equals("10001000000011100100000100101011") );
+
+ // Now for the real test. 2 ints (64 bit strings)
+ tmp = new int[2];
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 24 ) | ((Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 )<<16) |
+ ((Binary.BIT_6 | Binary.BIT_0) << 8 ) | (Binary.BIT_5 | Binary.BIT_0 | Binary.BIT_1 | Binary.BIT_3 );
+
+ tmp[1] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
+ bs = new BitString( tmp,48 );
+ //System.out.println( "\n" + bs.toString() );
+ assertTrue( "testComplicated:4", bs.toString().equals("100010000000111010001000000011100100000100101011") );
+ }
+
+ /**
+ * Execute some simple 32-bit tests
+ */
+ public void testAnd() throws Exception {
+ // First test. 1 int with various bits set
+ int[] tmp = new int[1];
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
+
+ int[] tmp2 = new int[1];
+ tmp2[0] = (( Binary.BIT_7 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_5 );
+
+ BitString bs1 = new BitString( tmp, 16 );
+ BitString bs2 = new BitString( tmp2, 16 );
+ BitString delta = bs1.and(bs2);
+
+ //System.out.println( "\n" + bs1.toString() );
+ //System.out.println( bs2.toString() );
+ //System.out.println( delta.toString() );
+
+ // 1000100000001110
+ // AND 1000000000000110
+ // ----------------
+ // 1000000000000110
+
+ assertTrue( "testAnd", delta.toString().equals("1000000000000110"));
+ }
+
+ /**
+ * Execute some simple 32-bit tests
+ */
+ public void testOr() throws Exception {
+ // First test. 1 int with various bits set
+ int[] tmp = new int[1];
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
+
+ int[] tmp2 = new int[1];
+ tmp2[0] = (( Binary.BIT_7 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_5 );
+
+ BitString bs1 = new BitString( tmp, 16 );
+ BitString bs2 = new BitString( tmp2, 16 );
+ BitString delta = bs1.or(bs2);
+
+ //System.out.println( "\n" + bs1.toString() );
+ //System.out.println( bs2.toString() );
+ //System.out.println( delta.toString() );
+
+ // 1000100000001110
+ // OR 1000000000100110
+ // ----------------
+ // 1000100000101110
+
+ assertTrue( "testOr", delta.toString().equals("1000100000101110"));
+ }
+
+ /**
+ * Execute some simple 32-bit tests
+ */
+ public void testXor() throws Exception {
+ // First test. 1 int with various bits set
+ int[] tmp = new int[1];
+ tmp[0] = (( Binary.BIT_7 | Binary.BIT_3 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_3 );
+
+ int[] tmp2 = new int[1];
+ tmp2[0] = (( Binary.BIT_7 ) << 8 ) | (Binary.BIT_1 | Binary.BIT_2 | Binary.BIT_5 );
+
+ BitString bs1 = new BitString( tmp, 16 );
+ BitString bs2 = new BitString( tmp2, 16 );
+ BitString delta = bs1.xor(bs2);
+
+ //System.out.println( "\n" + bs1.toString() );
+ //System.out.println( bs2.toString() );
+ //System.out.println( delta.toString() );
+
+ // 1000100000001110
+ // XOR 1000000000100110
+ // ----------------
+ // 0000100000101000
+
+ assertTrue( "testXor", delta.toString().equals("100000101000"));
+ }
+
+ public static void main(String[] args) {
+ junit.textui.TestRunner.run( TestBitString.class );
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/AbstractDecoderTestCaseTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/AbstractDecoderTestCaseTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/AbstractDecoderTestCaseTest.java Sun Mar 14 14:02:18 2004
@@ -1,137 +1,137 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.lang.ArrayUtils ;
-
-
-/**
- * Tests the base test class functions.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class AbstractDecoderTestCaseTest extends AbstractDecoderTestCase
-{
-
- public AbstractDecoderTestCaseTest()
- {
- super ( AbstractDecoderTestCaseTest.class.getName() ) ;
- }
-
- public void testFragment()
- {
- byte[] all = new byte[3] ;
- assertEquals( 1, fragment(all, 3).length) ;
- try
- {
- fragment(ArrayUtils.EMPTY_BYTE_ARRAY, 0) ;
- fail( "should have thrown exception before reaching this line" ) ;
- }
- catch( IllegalArgumentException e )
- {
- assertNotNull( e ) ;
- }
- }
-
- /*
- * Class to test for Tuple decode(byte)
- */
- public void testDecodebyte() throws Exception
- {
- decode( ( byte ) 1 ) ;
- decode( ( byte ) 1 ) ;
- Tuple t = decode( ( byte ) 1 ) ;
- assertEquals( 1, t.id ) ;
- assertEquals( 1, t.length ) ;
- }
-
- /*
- * Class to test for Tuple decode(Tuple[])
- */
- public void testDecodeTupleArray() throws Exception
- {
- Tuple [] tuples = new Tuple[2] ;
- tuples[0] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- tuples[1] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- decode(tuples) ;
-
- decode( new Tuple[0] ) ;
- }
-
- public void testCallbackOccured() throws Exception
- {
- decoder.setDecoderMonitor( this ) ;
- Tuple [] tuples = new Tuple[2] ;
- tuples[0] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- tuples[1] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- decode(tuples) ;
- callbackOccured(decoder, this, tuples[1]) ;
- }
-
- public void testCallbackSet()
- {
- decoder.setCallback(this) ;
- callbackSet(decoder, this, this) ;
- }
-
- public void testError()
- {
- try
- {
- error( decoder, new Exception() ) ;
- fail("should not get here") ;
- }
- catch ( Throwable e )
- {
- assertNotNull( e ) ;
- }
- }
-
- public void testFatalError()
- {
- try
- {
- fatalError( decoder, new Exception() ) ;
- fail("should not get here") ;
- }
- catch ( Throwable e )
- {
- assertNotNull( e ) ;
- }
- }
-
- public void testMonitorSet()
- {
- monitorSet( decoder, this ) ;
- }
-
- public void testWarning()
- {
- try
- {
- warning( decoder, new Exception() ) ;
- fail("should not get here") ;
- }
- catch ( Throwable e )
- {
- assertNotNull( e ) ;
- }
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.lang.ArrayUtils ;
+
+
+/**
+ * Tests the base test class functions.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class AbstractDecoderTestCaseTest extends AbstractDecoderTestCase
+{
+
+ public AbstractDecoderTestCaseTest()
+ {
+ super ( AbstractDecoderTestCaseTest.class.getName() ) ;
+ }
+
+ public void testFragment()
+ {
+ byte[] all = new byte[3] ;
+ assertEquals( 1, fragment(all, 3).length) ;
+ try
+ {
+ fragment(ArrayUtils.EMPTY_BYTE_ARRAY, 0) ;
+ fail( "should have thrown exception before reaching this line" ) ;
+ }
+ catch( IllegalArgumentException e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ /*
+ * Class to test for Tuple decode(byte)
+ */
+ public void testDecodebyte() throws Exception
+ {
+ decode( ( byte ) 1 ) ;
+ decode( ( byte ) 1 ) ;
+ Tuple t = decode( ( byte ) 1 ) ;
+ assertEquals( 1, t.id ) ;
+ assertEquals( 1, t.length ) ;
+ }
+
+ /*
+ * Class to test for Tuple decode(Tuple[])
+ */
+ public void testDecodeTupleArray() throws Exception
+ {
+ Tuple [] tuples = new Tuple[2] ;
+ tuples[0] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ tuples[1] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ decode(tuples) ;
+
+ decode( new Tuple[0] ) ;
+ }
+
+ public void testCallbackOccured() throws Exception
+ {
+ decoder.setDecoderMonitor( this ) ;
+ Tuple [] tuples = new Tuple[2] ;
+ tuples[0] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ tuples[1] = new Tuple(1, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ decode(tuples) ;
+ callbackOccured(decoder, this, tuples[1]) ;
+ }
+
+ public void testCallbackSet()
+ {
+ decoder.setCallback(this) ;
+ callbackSet(decoder, this, this) ;
+ }
+
+ public void testError()
+ {
+ try
+ {
+ error( decoder, new Exception() ) ;
+ fail("should not get here") ;
+ }
+ catch ( Throwable e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ public void testFatalError()
+ {
+ try
+ {
+ fatalError( decoder, new Exception() ) ;
+ fail("should not get here") ;
+ }
+ catch ( Throwable e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ public void testMonitorSet()
+ {
+ monitorSet( decoder, this ) ;
+ }
+
+ public void testWarning()
+ {
+ try
+ {
+ warning( decoder, new Exception() ) ;
+ fail("should not get here") ;
+ }
+ catch ( Throwable e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderCallbackAdapterTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderCallbackAdapterTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderCallbackAdapterTest.java Sun Mar 14 14:02:18 2004
@@ -1,82 +1,82 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests for the adapter to pass clover coverage.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class BERDecoderCallbackAdapterTest extends TestCase
-{
- BERDecoderCallbackAdapter adapter = null ;
-
-
- public static void main(String[] args)
- {
- junit.textui.TestRunner.run(BERDecoderCallbackAdapterTest.class);
- }
-
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
- adapter = new BERDecoderCallbackAdapter() ;
- }
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
- adapter = null ;
- }
-
- /**
- * Constructor for BERDecoderCallbackAdapter.
- * @param arg0
- */
- public BERDecoderCallbackAdapterTest(String arg0)
- {
- super(arg0);
- }
-
- public void testTagDecoded()
- {
- adapter.tagDecoded( null ) ;
- }
-
- public void testLengthDecoded()
- {
- adapter.lengthDecoded( null ) ;
- }
-
- public void testDecodeOccurred()
- {
- adapter.decodeOccurred( null, null ) ;
- }
-
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests for the adapter to pass clover coverage.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERDecoderCallbackAdapterTest extends TestCase
+{
+ BERDecoderCallbackAdapter adapter = null ;
+
+
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.run(BERDecoderCallbackAdapterTest.class);
+ }
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ adapter = new BERDecoderCallbackAdapter() ;
+ }
+
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ adapter = null ;
+ }
+
+ /**
+ * Constructor for BERDecoderCallbackAdapter.
+ * @param arg0
+ */
+ public BERDecoderCallbackAdapterTest(String arg0)
+ {
+ super(arg0);
+ }
+
+ public void testTagDecoded()
+ {
+ adapter.tagDecoded( null ) ;
+ }
+
+ public void testLengthDecoded()
+ {
+ adapter.lengthDecoded( null ) ;
+ }
+
+ public void testDecodeOccurred()
+ {
+ adapter.decodeOccurred( null, null ) ;
+ }
+
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderStateTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderStateTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderStateTest.java Sun Mar 14 14:02:18 2004
@@ -1,173 +1,173 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests the
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class BERDecoderStateTest extends TestCase
-{
-
- public static void main(String[] args)
- {
- junit.textui.TestRunner.run(BERDecoderStateTest.class);
- }
-
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
- }
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
- }
-
- /**
- * Constructor for BERDecoderStateTest.
- * @param arg0
- */
- public BERDecoderStateTest(String arg0)
- {
- super(arg0);
- }
-
- public void testGetNext()
- {
- BERDecoderState state = BERDecoderState.getStartState() ;
-
- assertEquals( BERDecoderState.TAG, state ) ;
- state = state.getNext( true ) ;
- assertEquals( BERDecoderState.LENGTH, state ) ;
- state = state.getNext( true ) ;
- assertEquals( BERDecoderState.VALUE, state ) ;
-
- state = state.getNext( true ) ;
- assertEquals( BERDecoderState.TAG, state ) ;
- state = state.getNext( true ) ;
- assertEquals( BERDecoderState.LENGTH, state ) ;
- state = state.getNext( false ) ;
- assertEquals( BERDecoderState.TAG, state ) ;
- }
-
- public void testIsEndState()
- {
- assertFalse( BERDecoderState.TAG.isEndState( true ) ) ;
- assertFalse( BERDecoderState.TAG.isEndState( false ) ) ;
- assertFalse( BERDecoderState.LENGTH.isEndState( true ) ) ;
- assertTrue( BERDecoderState.LENGTH.isEndState( false ) ) ;
- assertTrue( BERDecoderState.VALUE.isEndState( true ) ) ;
- assertTrue( BERDecoderState.VALUE.isEndState( false ) ) ;
- }
-
- public void testGetStartState()
- {
- assertEquals( BERDecoderState.TAG, BERDecoderState.getStartState() ) ;
- }
-
- /*
- * Class to test for BERDecoderState getTypeClass(String)
- */
- public void testGetStateString()
- {
- assertEquals( BERDecoderState.LENGTH,
- BERDecoderState.getState(BERDecoderState.LENGTH.getName()) ) ;
- assertEquals( BERDecoderState.TAG,
- BERDecoderState.getState(BERDecoderState.TAG.getName()) ) ;
- assertEquals( BERDecoderState.VALUE,
- BERDecoderState.getState(BERDecoderState.VALUE.getName()) ) ;
-
- assertEquals( BERDecoderState.LENGTH,
- BERDecoderState.getState("length") ) ;
- assertEquals( BERDecoderState.TAG,
- BERDecoderState.getState("TAG") ) ;
- assertEquals( BERDecoderState.TAG,
- BERDecoderState.getState("Tag") ) ;
- assertEquals( BERDecoderState.VALUE,
- BERDecoderState.getState("value") ) ;
-
- try
- {
- BERDecoderState.getState("asdf") ;
- fail( "should not be reached due to thrown exception" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
- }
-
- public void testList()
- {
- List list = BERDecoderState.list() ;
- assertNotNull( list ) ;
- assertEquals( 3, list.size() ) ;
- assertTrue( list.contains( BERDecoderState.LENGTH ) ) ;
- assertTrue( list.contains( BERDecoderState.TAG ) ) ;
- assertTrue( list.contains( BERDecoderState.VALUE ) ) ;
- }
-
- public void testMap()
- {
- Map map = BERDecoderState.map() ;
- assertNotNull( map ) ;
- assertEquals( 3, map.size() ) ;
- assertTrue( map.containsKey( BERDecoderState.VALUE.getName() ) ) ;
- assertTrue( map.containsKey( BERDecoderState.LENGTH.getName() ) ) ;
- assertTrue( map.containsKey( BERDecoderState.TAG.getName() ) ) ;
- }
-
- /*
- * Class to test for BERDecoderState getTypeClass(int)
- */
- public void testGetStateint()
- {
- assertEquals( BERDecoderState.LENGTH,
- BERDecoderState.getState(BERDecoderState.LENGTH_VAL) ) ;
- assertEquals( BERDecoderState.TAG,
- BERDecoderState.getState(BERDecoderState.TAG_VAL) ) ;
- assertEquals( BERDecoderState.VALUE,
- BERDecoderState.getState(BERDecoderState.VALUE_VAL) ) ;
-
- try
- {
- BERDecoderState.getState( 293847 ) ;
- fail( "should not be reached due to thrown exception" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERDecoderStateTest extends TestCase
+{
+
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.run(BERDecoderStateTest.class);
+ }
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Constructor for BERDecoderStateTest.
+ * @param arg0
+ */
+ public BERDecoderStateTest(String arg0)
+ {
+ super(arg0);
+ }
+
+ public void testGetNext()
+ {
+ BERDecoderState state = BERDecoderState.getStartState() ;
+
+ assertEquals( BERDecoderState.TAG, state ) ;
+ state = state.getNext( true ) ;
+ assertEquals( BERDecoderState.LENGTH, state ) ;
+ state = state.getNext( true ) ;
+ assertEquals( BERDecoderState.VALUE, state ) ;
+
+ state = state.getNext( true ) ;
+ assertEquals( BERDecoderState.TAG, state ) ;
+ state = state.getNext( true ) ;
+ assertEquals( BERDecoderState.LENGTH, state ) ;
+ state = state.getNext( false ) ;
+ assertEquals( BERDecoderState.TAG, state ) ;
+ }
+
+ public void testIsEndState()
+ {
+ assertFalse( BERDecoderState.TAG.isEndState( true ) ) ;
+ assertFalse( BERDecoderState.TAG.isEndState( false ) ) ;
+ assertFalse( BERDecoderState.LENGTH.isEndState( true ) ) ;
+ assertTrue( BERDecoderState.LENGTH.isEndState( false ) ) ;
+ assertTrue( BERDecoderState.VALUE.isEndState( true ) ) ;
+ assertTrue( BERDecoderState.VALUE.isEndState( false ) ) ;
+ }
+
+ public void testGetStartState()
+ {
+ assertEquals( BERDecoderState.TAG, BERDecoderState.getStartState() ) ;
+ }
+
+ /*
+ * Class to test for BERDecoderState getTypeClass(String)
+ */
+ public void testGetStateString()
+ {
+ assertEquals( BERDecoderState.LENGTH,
+ BERDecoderState.getState(BERDecoderState.LENGTH.getName()) ) ;
+ assertEquals( BERDecoderState.TAG,
+ BERDecoderState.getState(BERDecoderState.TAG.getName()) ) ;
+ assertEquals( BERDecoderState.VALUE,
+ BERDecoderState.getState(BERDecoderState.VALUE.getName()) ) ;
+
+ assertEquals( BERDecoderState.LENGTH,
+ BERDecoderState.getState("length") ) ;
+ assertEquals( BERDecoderState.TAG,
+ BERDecoderState.getState("TAG") ) ;
+ assertEquals( BERDecoderState.TAG,
+ BERDecoderState.getState("Tag") ) ;
+ assertEquals( BERDecoderState.VALUE,
+ BERDecoderState.getState("value") ) ;
+
+ try
+ {
+ BERDecoderState.getState("asdf") ;
+ fail( "should not be reached due to thrown exception" ) ;
+ }
+ catch ( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+ }
+
+ public void testList()
+ {
+ List list = BERDecoderState.list() ;
+ assertNotNull( list ) ;
+ assertEquals( 3, list.size() ) ;
+ assertTrue( list.contains( BERDecoderState.LENGTH ) ) ;
+ assertTrue( list.contains( BERDecoderState.TAG ) ) ;
+ assertTrue( list.contains( BERDecoderState.VALUE ) ) ;
+ }
+
+ public void testMap()
+ {
+ Map map = BERDecoderState.map() ;
+ assertNotNull( map ) ;
+ assertEquals( 3, map.size() ) ;
+ assertTrue( map.containsKey( BERDecoderState.VALUE.getName() ) ) ;
+ assertTrue( map.containsKey( BERDecoderState.LENGTH.getName() ) ) ;
+ assertTrue( map.containsKey( BERDecoderState.TAG.getName() ) ) ;
+ }
+
+ /*
+ * Class to test for BERDecoderState getTypeClass(int)
+ */
+ public void testGetStateint()
+ {
+ assertEquals( BERDecoderState.LENGTH,
+ BERDecoderState.getState(BERDecoderState.LENGTH_VAL) ) ;
+ assertEquals( BERDecoderState.TAG,
+ BERDecoderState.getState(BERDecoderState.TAG_VAL) ) ;
+ assertEquals( BERDecoderState.VALUE,
+ BERDecoderState.getState(BERDecoderState.VALUE_VAL) ) ;
+
+ try
+ {
+ BERDecoderState.getState( 293847 ) ;
+ fail( "should not be reached due to thrown exception" ) ;
+ }
+ catch ( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERDecoderTest.java Sun Mar 14 14:02:18 2004
@@ -1,156 +1,156 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.nio.ByteBuffer;
-
-import org.apache.commons.codec.stateful.DecoderMonitorAdapter;
-import org.apache.commons.lang.ArrayUtils ;
-import org.apache.commons.lang.RandomStringUtils ;
-
-
-/**
- * Tests the decoder using various complext TLV decoding scenarios and performs
- * round trip encode - decode functionality.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class BERDecoderTest extends AbstractDecoderTestCase
-{
- public BERDecoderTest()
- {
- super( BERDecoderTest.class.getName() ) ;
- }
-
-
- public void testBasisCases() throws Exception
- {
- decoder.setDecoderMonitor( new DecoderMonitorAdapter() ) ;
- decoder.decode( null ) ;
- decoder.decode( ByteBuffer.wrap( ArrayUtils.EMPTY_BYTE_ARRAY ) ) ;
- }
-
-
- public void testPrimitives() throws Exception
- {
- byte[] bites = null ;
- Tuple decoded = null ;
- Tuple t = new Tuple( 45, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- assertTrue( decode( t ).equals( t ) ) ;
-
- t = new Tuple( 45, "Hello world!".getBytes() ) ;
- decoded = decode( t ) ;
- assertTrue( decoded.equals( t ) ) ;
- assertEquals( "Hello world!", new String( (byte[])
- decoded.getValue() ) ) ;
-
- String mesg = RandomStringUtils.randomAlphanumeric(1000) ;
- t = new Tuple( 1234233, mesg.getBytes() ) ;
- decoded = decode( t ) ;
- assertTrue( decoded.equals( t ) ) ;
- assertEquals( mesg, new String( (byte[])
- decoded.getValue() ) ) ;
- }
-
-
- public void testConstructedIndefinate() throws Exception
- {
- Tuple top = new Tuple( 1, TypeClass.APPLICATION ) ;
- Tuple t0 = new Tuple( 2, "Hello".getBytes() ) ;
- Tuple t1 = new Tuple( 3, "World".getBytes() ) ;
- Tuple terminator = new Tuple( 0, TypeClass.UNIVERSAL, true,
- ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- assertTrue( decode( top ).equals( top ) ) ;
-
- Tuple decoded = decode( t0 ) ;
- assertTrue( decoded.equals( t0 ) ) ;
- assertEquals( "Hello", new String( ( byte[] ) decoded.getValue() ) ) ;
-
- decoded = decode( t1 ) ;
- assertTrue( decoded.equals( t1 ) ) ;
- assertEquals( "World", new String( ( byte[] ) decoded.getValue() ) ) ;
-
- decoded = decode( terminator ) ;
- assertTrue( decoded.equals( top ) ) ;
- }
-
-
- public void testConstructedLongLengthForm() throws Exception
- {
- String str0 = RandomStringUtils.randomAlphanumeric(10000) ;
- Tuple t0 = new Tuple( 2, str0.getBytes() ) ;
- String str1 = RandomStringUtils.randomAlphanumeric(10000) ;
- Tuple t1 = new Tuple( 3, str1.getBytes() ) ;
- Tuple top = new Tuple( 1, t0.size() + t1.size() ) ;
- assertTrue( decode( top ).equals( top ) ) ;
-
- Tuple decoded = decode( t0 ) ;
- assertTrue( decoded.equals( t0 ) ) ;
- assertEquals( str0, new String( ( byte[] ) decoded.getValue() ) ) ;
-
- // automatically set to top because after t1 is delivered top is
- decoded = decode( t1 ) ;
- assertTrue( decoded.equals( top ) ) ;
- }
-
-
- public void testConstructedShortLengthForm() throws Exception
- {
- Tuple t0 = new Tuple( 2, "Hello".getBytes() ) ;
- Tuple t1 = new Tuple( 3, "World".getBytes() ) ;
- Tuple top = new Tuple( 1, t0.size() + t1.size() ) ;
- assertTrue( decode( top ).equals( top ) ) ;
-
- Tuple decoded = decode( t0 ) ;
- assertTrue( decoded.equals( t0 ) ) ;
- assertEquals( "Hello", new String( ( byte[] ) decoded.getValue() ) ) ;
-
- // automatically set to top because after t1 is delivered top is
- decoded = decode( t1 ) ;
- assertTrue( decoded.equals( top ) ) ;
- }
-
-
- public void testFragmentedValue() throws Exception
- {
- String str0 = RandomStringUtils.randomAlphanumeric(20) ;
- Tuple t0 = new Tuple( 2, str0.getBytes() ) ;
- String str1 = RandomStringUtils.randomAlphanumeric(20) ;
- Tuple t1 = new Tuple( 3, str1.getBytes() ) ;
- Tuple top = new Tuple( 1, t0.size() + t1.size() ) ;
- assertTrue( decode( top ).equals( top ) ) ;
-
- byte[] all = t0.encode() ;
- byte[][] fragments = fragment( all, 10 ) ;
- Tuple decoded = null ;
-
- for ( int ii = 0; ii < fragments.length; ii++ )
- {
- decoded = decode( fragments[ii] ) ;
- }
-
- assertTrue( decoded.equals( t0 ) ) ;
- assertEquals( str0, new String( ( byte[] ) decoded.getValue() ) ) ;
-
- // automatically set to top because after t1 is delivered top is
- decoded = decode( t1 ) ;
- assertTrue( decoded.equals( top ) ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.nio.ByteBuffer;
+
+import org.apache.commons.codec.stateful.DecoderMonitorAdapter;
+import org.apache.commons.lang.ArrayUtils ;
+import org.apache.commons.lang.RandomStringUtils ;
+
+
+/**
+ * Tests the decoder using various complext TLV decoding scenarios and performs
+ * round trip encode - decode functionality.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERDecoderTest extends AbstractDecoderTestCase
+{
+ public BERDecoderTest()
+ {
+ super( BERDecoderTest.class.getName() ) ;
+ }
+
+
+ public void testBasisCases() throws Exception
+ {
+ decoder.setDecoderMonitor( new DecoderMonitorAdapter() ) ;
+ decoder.decode( null ) ;
+ decoder.decode( ByteBuffer.wrap( ArrayUtils.EMPTY_BYTE_ARRAY ) ) ;
+ }
+
+
+ public void testPrimitives() throws Exception
+ {
+ byte[] bites = null ;
+ Tuple decoded = null ;
+ Tuple t = new Tuple( 45, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ assertTrue( decode( t ).equals( t ) ) ;
+
+ t = new Tuple( 45, "Hello world!".getBytes() ) ;
+ decoded = decode( t ) ;
+ assertTrue( decoded.equals( t ) ) ;
+ assertEquals( "Hello world!", new String( (byte[])
+ decoded.getValue() ) ) ;
+
+ String mesg = RandomStringUtils.randomAlphanumeric(1000) ;
+ t = new Tuple( 1234233, mesg.getBytes() ) ;
+ decoded = decode( t ) ;
+ assertTrue( decoded.equals( t ) ) ;
+ assertEquals( mesg, new String( (byte[])
+ decoded.getValue() ) ) ;
+ }
+
+
+ public void testConstructedIndefinate() throws Exception
+ {
+ Tuple top = new Tuple( 1, TypeClass.APPLICATION ) ;
+ Tuple t0 = new Tuple( 2, "Hello".getBytes() ) ;
+ Tuple t1 = new Tuple( 3, "World".getBytes() ) ;
+ Tuple terminator = new Tuple( 0, TypeClass.UNIVERSAL, true,
+ ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ assertTrue( decode( top ).equals( top ) ) ;
+
+ Tuple decoded = decode( t0 ) ;
+ assertTrue( decoded.equals( t0 ) ) ;
+ assertEquals( "Hello", new String( ( byte[] ) decoded.getValue() ) ) ;
+
+ decoded = decode( t1 ) ;
+ assertTrue( decoded.equals( t1 ) ) ;
+ assertEquals( "World", new String( ( byte[] ) decoded.getValue() ) ) ;
+
+ decoded = decode( terminator ) ;
+ assertTrue( decoded.equals( top ) ) ;
+ }
+
+
+ public void testConstructedLongLengthForm() throws Exception
+ {
+ String str0 = RandomStringUtils.randomAlphanumeric(10000) ;
+ Tuple t0 = new Tuple( 2, str0.getBytes() ) ;
+ String str1 = RandomStringUtils.randomAlphanumeric(10000) ;
+ Tuple t1 = new Tuple( 3, str1.getBytes() ) ;
+ Tuple top = new Tuple( 1, t0.size() + t1.size() ) ;
+ assertTrue( decode( top ).equals( top ) ) ;
+
+ Tuple decoded = decode( t0 ) ;
+ assertTrue( decoded.equals( t0 ) ) ;
+ assertEquals( str0, new String( ( byte[] ) decoded.getValue() ) ) ;
+
+ // automatically set to top because after t1 is delivered top is
+ decoded = decode( t1 ) ;
+ assertTrue( decoded.equals( top ) ) ;
+ }
+
+
+ public void testConstructedShortLengthForm() throws Exception
+ {
+ Tuple t0 = new Tuple( 2, "Hello".getBytes() ) ;
+ Tuple t1 = new Tuple( 3, "World".getBytes() ) ;
+ Tuple top = new Tuple( 1, t0.size() + t1.size() ) ;
+ assertTrue( decode( top ).equals( top ) ) ;
+
+ Tuple decoded = decode( t0 ) ;
+ assertTrue( decoded.equals( t0 ) ) ;
+ assertEquals( "Hello", new String( ( byte[] ) decoded.getValue() ) ) ;
+
+ // automatically set to top because after t1 is delivered top is
+ decoded = decode( t1 ) ;
+ assertTrue( decoded.equals( top ) ) ;
+ }
+
+
+ public void testFragmentedValue() throws Exception
+ {
+ String str0 = RandomStringUtils.randomAlphanumeric(20) ;
+ Tuple t0 = new Tuple( 2, str0.getBytes() ) ;
+ String str1 = RandomStringUtils.randomAlphanumeric(20) ;
+ Tuple t1 = new Tuple( 3, str1.getBytes() ) ;
+ Tuple top = new Tuple( 1, t0.size() + t1.size() ) ;
+ assertTrue( decode( top ).equals( top ) ) ;
+
+ byte[] all = t0.encode() ;
+ byte[][] fragments = fragment( all, 10 ) ;
+ Tuple decoded = null ;
+
+ for ( int ii = 0; ii < fragments.length; ii++ )
+ {
+ decoded = decode( fragments[ii] ) ;
+ }
+
+ assertTrue( decoded.equals( t0 ) ) ;
+ assertEquals( str0, new String( ( byte[] ) decoded.getValue() ) ) ;
+
+ // automatically set to top because after t1 is delivered top is
+ decoded = decode( t1 ) ;
+ assertTrue( decoded.equals( top ) ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERUtilsTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERUtilsTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/BERUtilsTest.java Sun Mar 14 14:02:18 2004
@@ -1,250 +1,250 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.codec.binary.Binary ;
-import org.apache.commons.collections.primitives.ArrayByteList ;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests the BER utility functions.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class BERUtilsTest extends TestCase
-{
-
- public static void main(String[] args)
- {
- junit.textui.TestRunner.run(BERUtilsTest.class);
- }
-
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
- }
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
- }
-
- /**
- * Constructor for BERUtilsTest.
- * @param arg0
- */
- public BERUtilsTest(String arg0)
- {
- super(arg0);
- }
-
-
- public void getTypeClass()
- {
- assertEquals( TypeClass.UNIVERSAL, BERUtils.getTypeClass( (byte) 0 ) ) ;
- }
-
- public void testIsPrimitive() throws Exception
- {
- byte octet = Binary.BIT_5 ;
-
- assertFalse( BERUtils.isPrimitive( octet ) ) ;
- assertFalse( BERUtils.isPrimitive( Binary.BIT_5 ) ) ;
-
- assertTrue( BERUtils.isPrimitive( 0 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_0 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_1 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_2 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_3 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_4 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_6 ) ) ;
- assertTrue( BERUtils.isPrimitive( Binary.BIT_7 ) ) ;
- }
-
-
- public void testIsConstructed() throws Exception
- {
- byte octet = Binary.BIT_5 ;
-
- assertTrue( BERUtils.isConstructed( octet ) ) ;
- assertTrue( BERUtils.isConstructed( Binary.BIT_5 ) ) ;
-
- assertFalse( BERUtils.isConstructed( 0 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_0 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_1 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_2 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_3 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_4 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_6 ) ) ;
- assertFalse( BERUtils.isConstructed( Binary.BIT_7 ) ) ;
- }
-
-
- public void testGetTagId() throws Exception
- {
- byte[] octets = new byte[1] ;
-
- for ( int ii = 0 ; ii < 128; ii++ )
- {
- octets[0] = ( byte ) ii ;
-
- if ( ii < 31 )
- {
- assertEquals( BERUtils.getTagId( octets ), ii ) ;
- }
- else
- {
- assertTrue( BERUtils.getTagId( octets ) != ii ) ;
- }
- }
-
- octets = new byte[2] ;
- octets[0] = 31 ;
- octets[1] = 0 ;
-
- for ( int ii = 31 ; ii < 255; ii++ )
- {
- octets[1] = ( byte ) ii ;
-
- if ( ii < 128 )
- {
- assertEquals( BERUtils.getTagId( octets ), ii ) ;
- }
- else
- {
- assertTrue( BERUtils.getTagId( octets ) != ii ) ;
- }
- }
-
- octets = new byte[3] ;
- octets[0] = 31 ;
- octets[1] = 0 ;
- octets[2] = 0 ;
-
- for ( int ii = 128 ; ii < 20000; ii++ )
- {
- octets[1] = ( byte ) ( ii & BERUtils.LONG_TAG_MASK ) ;
- octets[2] = ( byte ) ( ( ii >> 7 ) & BERUtils.LONG_TAG_MASK ) ;
-
- if ( ii < 16384 )
- {
- assertEquals( BERUtils.getTagId( octets ), ii ) ;
- }
- else
- {
- assertTrue( BERUtils.getTagId( octets ) != ii ) ;
- }
- }
-
- octets = new byte[6] ;
- octets[0] = 31 ;
- octets[1] = 0 ; // shift 0
- octets[2] = 0 ; // shift 7
- octets[3] = 0 ; // shift 14
- octets[4] = 0 ; // shift 21
- octets[5] = 0 ; // shift 28
-
- for ( int ii = 16384 ; ii < 2100000 ; ii++ )
- {
- octets[1] = ( byte ) ( ii & BERUtils.LONG_TAG_MASK ) ;
- octets[2] = ( byte ) ( ( ii >> 7 ) & BERUtils.LONG_TAG_MASK ) ;
- octets[3] = ( byte ) ( ( ii >> 14 ) & BERUtils.LONG_TAG_MASK ) ;
-
- if ( ii < 2097152 )
- {
- assertEquals( BERUtils.getTagId( octets ), ii ) ;
- }
- else
- {
- assertTrue( BERUtils.getTagId( octets ) != ii ) ;
- }
- }
-
- ArrayByteList list = new ArrayByteList() ;
- list.add( (byte)1) ;
- assertEquals( 1, BERUtils.getTagId( list ) ) ;
-
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- list.add( (byte)1) ;
- try
- {
- BERUtils.getTagId( list ) ;
- fail( "should fail before getting here" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
-
-
- try
- {
- BERUtils.getTagId( new byte[56] ) ;
- fail( "should fail before getting here" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
- }
-
-
- public void testGetLength() throws Exception
- {
- ArrayByteList list = new ArrayByteList() ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
- list.add( (byte) 0x1 ) ;
-
- try
- {
- BERUtils.getLength( list ) ;
- fail( "should fail before we get here" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
-
-
- list.clear() ;
- list.add(( byte ) 0x7 ) ;
- assertEquals( 7, BERUtils.getLength( list ) ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.codec.binary.Binary ;
+import org.apache.commons.collections.primitives.ArrayByteList ;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the BER utility functions.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class BERUtilsTest extends TestCase
+{
+
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.run(BERUtilsTest.class);
+ }
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Constructor for BERUtilsTest.
+ * @param arg0
+ */
+ public BERUtilsTest(String arg0)
+ {
+ super(arg0);
+ }
+
+
+ public void getTypeClass()
+ {
+ assertEquals( TypeClass.UNIVERSAL, BERUtils.getTypeClass( (byte) 0 ) ) ;
+ }
+
+ public void testIsPrimitive() throws Exception
+ {
+ byte octet = Binary.BIT_5 ;
+
+ assertFalse( BERUtils.isPrimitive( octet ) ) ;
+ assertFalse( BERUtils.isPrimitive( Binary.BIT_5 ) ) ;
+
+ assertTrue( BERUtils.isPrimitive( 0 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_0 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_1 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_2 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_3 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_4 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_6 ) ) ;
+ assertTrue( BERUtils.isPrimitive( Binary.BIT_7 ) ) ;
+ }
+
+
+ public void testIsConstructed() throws Exception
+ {
+ byte octet = Binary.BIT_5 ;
+
+ assertTrue( BERUtils.isConstructed( octet ) ) ;
+ assertTrue( BERUtils.isConstructed( Binary.BIT_5 ) ) ;
+
+ assertFalse( BERUtils.isConstructed( 0 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_0 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_1 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_2 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_3 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_4 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_6 ) ) ;
+ assertFalse( BERUtils.isConstructed( Binary.BIT_7 ) ) ;
+ }
+
+
+ public void testGetTagId() throws Exception
+ {
+ byte[] octets = new byte[1] ;
+
+ for ( int ii = 0 ; ii < 128; ii++ )
+ {
+ octets[0] = ( byte ) ii ;
+
+ if ( ii < 31 )
+ {
+ assertEquals( BERUtils.getTagId( octets ), ii ) ;
+ }
+ else
+ {
+ assertTrue( BERUtils.getTagId( octets ) != ii ) ;
+ }
+ }
+
+ octets = new byte[2] ;
+ octets[0] = 31 ;
+ octets[1] = 0 ;
+
+ for ( int ii = 31 ; ii < 255; ii++ )
+ {
+ octets[1] = ( byte ) ii ;
+
+ if ( ii < 128 )
+ {
+ assertEquals( BERUtils.getTagId( octets ), ii ) ;
+ }
+ else
+ {
+ assertTrue( BERUtils.getTagId( octets ) != ii ) ;
+ }
+ }
+
+ octets = new byte[3] ;
+ octets[0] = 31 ;
+ octets[1] = 0 ;
+ octets[2] = 0 ;
+
+ for ( int ii = 128 ; ii < 20000; ii++ )
+ {
+ octets[1] = ( byte ) ( ii & BERUtils.LONG_TAG_MASK ) ;
+ octets[2] = ( byte ) ( ( ii >> 7 ) & BERUtils.LONG_TAG_MASK ) ;
+
+ if ( ii < 16384 )
+ {
+ assertEquals( BERUtils.getTagId( octets ), ii ) ;
+ }
+ else
+ {
+ assertTrue( BERUtils.getTagId( octets ) != ii ) ;
+ }
+ }
+
+ octets = new byte[6] ;
+ octets[0] = 31 ;
+ octets[1] = 0 ; // shift 0
+ octets[2] = 0 ; // shift 7
+ octets[3] = 0 ; // shift 14
+ octets[4] = 0 ; // shift 21
+ octets[5] = 0 ; // shift 28
+
+ for ( int ii = 16384 ; ii < 2100000 ; ii++ )
+ {
+ octets[1] = ( byte ) ( ii & BERUtils.LONG_TAG_MASK ) ;
+ octets[2] = ( byte ) ( ( ii >> 7 ) & BERUtils.LONG_TAG_MASK ) ;
+ octets[3] = ( byte ) ( ( ii >> 14 ) & BERUtils.LONG_TAG_MASK ) ;
+
+ if ( ii < 2097152 )
+ {
+ assertEquals( BERUtils.getTagId( octets ), ii ) ;
+ }
+ else
+ {
+ assertTrue( BERUtils.getTagId( octets ) != ii ) ;
+ }
+ }
+
+ ArrayByteList list = new ArrayByteList() ;
+ list.add( (byte)1) ;
+ assertEquals( 1, BERUtils.getTagId( list ) ) ;
+
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ list.add( (byte)1) ;
+ try
+ {
+ BERUtils.getTagId( list ) ;
+ fail( "should fail before getting here" ) ;
+ }
+ catch ( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+
+
+ try
+ {
+ BERUtils.getTagId( new byte[56] ) ;
+ fail( "should fail before getting here" ) ;
+ }
+ catch ( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+ }
+
+
+ public void testGetLength() throws Exception
+ {
+ ArrayByteList list = new ArrayByteList() ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+ list.add( (byte) 0x1 ) ;
+
+ try
+ {
+ BERUtils.getLength( list ) ;
+ fail( "should fail before we get here" ) ;
+ }
+ catch ( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+
+
+ list.clear() ;
+ list.add(( byte ) 0x7 ) ;
+ assertEquals( 7, BERUtils.getLength( list ) ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ConstructedTLVTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ConstructedTLVTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ConstructedTLVTests.java Sun Mar 14 14:02:18 2004
@@ -1,200 +1,200 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * Performs constructed tlv tests.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class ConstructedTLVTests extends AbstractDecoderTestCase
-{
-
- /**
- * @param arg0
- */
- public ConstructedTLVTests( String arg0 )
- {
- super( arg0 ) ;
- }
-
-
- public void testConstructedDefinateTLV() throws Exception
- {
- // decode tag
- Tuple outter = decode( "01100001" ) ;
- assertEquals( 1, outter.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( false, outter.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, outter.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- outter = decode( "00000011" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- // decode tag
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 2, tlvList.size() ) ;
- }
-
-
- public void testMultipleIndefinateTLV() throws Exception
- {
- // --------------------------------------------------------------------
-
- // decode tag
- Tuple outter = decode( "01100001" ) ;
- assertEquals( 1, outter.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( false, outter.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, outter.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- outter = decode( "10000000" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
-
- // --------------------------------------------------------------------
-
-
- // decode tag
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
- assertEquals( 0, tlvList.size() ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 1, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
-
-
- // --------------------------------------------------------------------
-
-
- // decode tag
- tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 1, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 2, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
-
-
- // --------------------------------------------------------------------
-
-
- // decode tag
- tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 2, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 3, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
-
- decode( "00000000" ) ;
- decode( "00000000" ) ;
-
- assertEquals( 4, tlvList.size() ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- }
-
-
- public void testIllegalState() throws Exception
- {
- try
- {
- decode( "00000000" ) ;
- decode( "00000000" ) ;
- fail( "should throw an exception before getting here" ) ;
- }
- catch( Throwable e )
- {
- assertNotNull( e ) ;
- }
- }
-
-
- public void testIllegalStateNoMonitor() throws Exception
- {
- decoder.setDecoderMonitor( null ) ;
-
- try
- {
- decode( "00000000" ) ;
- decode( "00000000" ) ;
- fail( "should throw an exception before getting here" ) ;
- }
- catch( Throwable e )
- {
- assertNotNull( e ) ;
- }
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * Performs constructed tlv tests.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class ConstructedTLVTests extends AbstractDecoderTestCase
+{
+
+ /**
+ * @param arg0
+ */
+ public ConstructedTLVTests( String arg0 )
+ {
+ super( arg0 ) ;
+ }
+
+
+ public void testConstructedDefinateTLV() throws Exception
+ {
+ // decode tag
+ Tuple outter = decode( "01100001" ) ;
+ assertEquals( 1, outter.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( false, outter.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, outter.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ outter = decode( "00000011" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ // decode tag
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 2, tlvList.size() ) ;
+ }
+
+
+ public void testMultipleIndefinateTLV() throws Exception
+ {
+ // --------------------------------------------------------------------
+
+ // decode tag
+ Tuple outter = decode( "01100001" ) ;
+ assertEquals( 1, outter.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( false, outter.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, outter.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ outter = decode( "10000000" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+
+ // --------------------------------------------------------------------
+
+
+ // decode tag
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+ assertEquals( 0, tlvList.size() ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 1, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+
+
+ // --------------------------------------------------------------------
+
+
+ // decode tag
+ tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 1, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 2, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+
+
+ // --------------------------------------------------------------------
+
+
+ // decode tag
+ tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 2, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 3, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+
+ decode( "00000000" ) ;
+ decode( "00000000" ) ;
+
+ assertEquals( 4, tlvList.size() ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ }
+
+
+ public void testIllegalState() throws Exception
+ {
+ try
+ {
+ decode( "00000000" ) ;
+ decode( "00000000" ) ;
+ fail( "should throw an exception before getting here" ) ;
+ }
+ catch( Throwable e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+
+ public void testIllegalStateNoMonitor() throws Exception
+ {
+ decoder.setDecoderMonitor( null ) ;
+
+ try
+ {
+ decode( "00000000" ) ;
+ decode( "00000000" ) ;
+ fail( "should throw an exception before getting here" ) ;
+ }
+ catch( Throwable e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/DefaultMutableTupleNodeTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/DefaultMutableTupleNodeTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/DefaultMutableTupleNodeTest.java Sun Mar 14 14:02:18 2004
@@ -1,506 +1,506 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.Enumeration;
-
-import javax.swing.tree.MutableTreeNode;
-
-import org.apache.commons.codec.stateful.DecoderCallback;
-import org.apache.commons.codec.stateful.StatefulDecoder;
-import org.apache.commons.lang.ArrayUtils;
-
-
-/**
- * Tests the default MutableTupleNode implementation.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class DefaultMutableTupleNodeTest extends AbstractDecoderTestCase
-{
- public DefaultMutableTupleNodeTest()
- {
- super ( DefaultMutableTupleNodeTest.class.getName() ) ;
- }
-
-
- /*
- * Class to test for void DefaultMutableTupleNode()
- */
- public void testDefaultMutableTupleNode()
- {
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- assertNotNull( node ) ;
- }
-
- /*
- * Class to test for void DefaultMutableTupleNode(Tuple)
- */
- public void testDefaultMutableTupleNodeTuple()
- {
- }
-
- /*
- * Class to test for void insert(MutableTupleNode, int)
- */
- public void testInsertMutableTupleNodeint()
- {
- }
-
- /*
- * Class to test for void remove(int)
- */
- public void testRemoveint()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- assertEquals(1,parent.getChildCount()) ;
- parent.remove( 0 ) ;
- assertEquals(0,parent.getChildCount()) ;
- }
-
- /*
- * Class to test for void remove(MutableTupleNode)
- */
- public void testRemoveMutableTupleNode()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- assertEquals(1,parent.getChildCount()) ;
- parent.remove( (MutableTupleNode) node ) ;
- assertEquals(0,parent.getChildCount()) ;
-
- parent.insert( (MutableTreeNode) node, 0 ) ;
- assertEquals(1,parent.getChildCount()) ;
- parent.remove( (MutableTreeNode) node ) ;
- assertEquals(0,parent.getChildCount()) ;
- }
-
- public void testRemoveFromParent()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- assertEquals(1,parent.getChildCount()) ;
- node.removeFromParent() ;
- assertEquals(0,parent.getChildCount()) ;
- }
-
- /*
- * Class to test for void setParent(MutableTupleNode)
- */
- public void testSetParentMutableTupleNode()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
- assertEquals(parent, node.getParent()) ;
- node.setParent((MutableTupleNode)new DefaultMutableTupleNode()) ;
- assertNotSame(parent, node.getParent()) ;
- }
-
- /*
- * Class to test for void setParent(MutableTupleNode)
- */
- public void testSetParentMutableTreeNode()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTreeNode) node, 0 ) ;
- node.setParent( (MutableTreeNode) parent) ;
- assertEquals(parent, node.getParent()) ;
- node.setParent((MutableTreeNode)new DefaultMutableTupleNode()) ;
- assertNotSame(parent, node.getParent()) ;
- }
-
- public void testSetTuple()
- {
- Tuple t = new Tuple() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- node.setTuple( t ) ;
- assertEquals(t, node.getTuple()) ;
- }
-
- public void testGetParentTupleNode()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
- assertSame(parent, node.getParentTupleNode()) ;
- assertSame(parent, node.getParent()) ;
- }
-
- public void testGetChildren()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
- assertSame(parent, node.getParentTupleNode()) ;
- assertTrue( parent.getChildren().hasNext()) ;
- }
-
-
- public void testGetChildTupleNodeAt()
- {
- }
-
- /*
- * Class to test for int getIndex(TupleNode)
- */
- public void testGetIndexTupleNode()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
- assertEquals( 0, parent.getIndex((MutableTupleNode)node));
- assertEquals( 0, parent.getIndex((MutableTreeNode)node));
- }
-
- public void testGetChildCount()
- {
- }
-
- public void testSize()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
-
- // fact that we use the indefinate form we automatically add two to
- // the contained size
- assertEquals(9, parent.size()) ;
- }
-
- public void testSize2()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, 5, TypeClass.APPLICATION ) ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
-
- assertEquals(7, parent.size()) ;
- }
-
- public void testSize3()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- parent.setTuple( constructed ) ;
-
- assertEquals(4, parent.size()) ;
- }
-
- public void testEncode3() throws Exception
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- parent.setTuple( constructed ) ;
-
- assertEquals(4, parent.size()) ;
-
- ByteBuffer buf = ByteBuffer.allocate( 4 ) ;
- parent.encode( buf ) ;
-
- final ArrayList list = new ArrayList() ;
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.setCallback( new DecoderCallback(){
- public void decodeOccurred(StatefulDecoder arg0, Object arg1)
- {
- list.add( arg1 ) ;
- }}) ;
-
- decoder.decode(buf.flip()) ;
- DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
- list.get(0);
- assertEquals( decoded.getTuple(), parent.getTuple()) ;
- }
-
- public void testGetTuple()
- {
- Tuple t = new Tuple() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- node.setTuple(t) ;
- assertSame(t, node.getTuple()) ;
- }
-
- public void testEncode0() throws Exception
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) end, 0 ) ;
- end.setParent( (MutableTupleNode) parent) ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
- terminator.typeClass = TypeClass.UNIVERSAL ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
- end.setTuple(terminator) ;
-
- assertEquals(9, parent.size()) ;
-
- ByteBuffer buf = ByteBuffer.allocate( 9 ) ;
- parent.encode( buf ) ;
-
- final ArrayList list = new ArrayList() ;
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.setCallback( new DecoderCallback(){
- public void decodeOccurred(StatefulDecoder arg0, Object arg1)
- {
- list.add( arg1 ) ;
- }}) ;
-
- decoder.decode(buf.flip()) ;
- DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
- list.get(0);
- assertEquals( decoded.getTuple(), parent.getTuple()) ;
- }
-
- public void testEncode1() throws Exception
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
-
- // 2 extra bytes added for indefinate form
- assertEquals(9, parent.size()) ;
-
- ByteBuffer buf = ByteBuffer.allocate( 9 ) ;
- parent.encode( buf ) ;
-
- final ArrayList list = new ArrayList() ;
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.setCallback( new DecoderCallback(){
- public void decodeOccurred(StatefulDecoder arg0, Object arg1)
- {
- list.add( arg1 ) ;
- }}) ;
-
- decoder.decode(buf.flip()) ;
- DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
- list.get(0);
- assertEquals( decoded.getTuple(), parent.getTuple()) ;
- }
-
- public void testEncode2() throws Exception
- {
- DefaultMutableTupleNode top = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode middle = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode bottom = new DefaultMutableTupleNode() ;
- top.insert( (MutableTupleNode) middle, 0 ) ;
- middle.setParent( (MutableTupleNode) top) ;
- middle.insert( (MutableTupleNode) bottom, 0 ) ;
- bottom.setParent( (MutableTupleNode) middle) ;
-
- Tuple middleTuple = new Tuple( 1, 3, TypeClass.APPLICATION ) ;
- Tuple topTuple = new Tuple ( 2, 5, TypeClass.APPLICATION ) ;
- Tuple bottomTuple = new Tuple( 3, new byte[1]) ;
-
- bottomTuple.typeClass = TypeClass.UNIVERSAL ;
- top.setTuple( topTuple ) ;
- middle.setTuple( middleTuple ) ;
- bottom.setTuple( bottomTuple ) ;
-
- assertEquals(7, top.size()) ;
-
- ByteBuffer buf = ByteBuffer.allocate( 7 ) ;
- top.encode( buf ) ;
-
- final ArrayList list = new ArrayList() ;
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.setCallback( new DecoderCallback(){
- public void decodeOccurred(StatefulDecoder arg0, Object arg1)
- {
- list.add( arg1 ) ;
- }}) ;
-
- decoder.decode(buf.flip()) ;
- DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
- list.get(0);
- assertEquals( decoded.getTuple(), top.getTuple()) ;
- }
-
- /*
- * Class to test for String toString()
- */
- public void testToString()
- {
- }
-
- public void testPrintDepthFirst()
- {
- }
-
- public void testChildren()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) end, 0 ) ;
- end.setParent( (MutableTupleNode) parent) ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
- terminator.typeClass = TypeClass.UNIVERSAL ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
- end.setTuple(terminator) ;
-
- Enumeration list = parent.children() ;
-
- assertEquals( node, list.nextElement() ) ;
- assertEquals( end, list.nextElement() ) ;
-
- try
- {
- list.nextElement() ;
- fail( "should never get here due to thrown exception" ) ;
- }
- catch( Throwable t )
- {
- assertNotNull( t ) ;
- }
- }
-
- public void testGetAllowsChildren()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) end, 0 ) ;
- end.setParent( (MutableTupleNode) parent) ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
- terminator.typeClass = TypeClass.UNIVERSAL ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
- end.setTuple(terminator) ;
-
- assertFalse( end.getAllowsChildren() ) ;
- assertFalse( node.getAllowsChildren() ) ;
- assertTrue( parent.getAllowsChildren() ) ;
- }
-
- public void testGetChildAt()
- {
- }
-
- /*
- * Class to test for int getIndex(TreeNode)
- */
- public void testGetIndexTreeNode()
- {
- }
-
- public void testGetParent()
- {
- }
-
- /*
- * Class to test for void insert(MutableTreeNode, int)
- */
- public void testInsertMutableTreeNodeint()
- {
- }
-
- public void testIsLeaf0()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- assertTrue( parent.isLeaf() ) ;
- }
-
- public void testIsLeaf1()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- parent.setTuple(new Tuple()) ;
- assertTrue( parent.isLeaf() ) ;
- }
-
- public void testIsLeaf2()
- {
- DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
- parent.insert( (MutableTupleNode) end, 0 ) ;
- end.setParent( (MutableTupleNode) parent) ;
- parent.insert( (MutableTupleNode) node, 0 ) ;
- node.setParent( (MutableTupleNode) parent) ;
-
- Tuple primitive = new Tuple( 1, new byte[3] ) ;
- Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
- Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
- terminator.typeClass = TypeClass.UNIVERSAL ;
- parent.setTuple( constructed ) ;
- node.setTuple( primitive ) ;
- end.setTuple(terminator) ;
-
- assertFalse( parent.isLeaf() ) ;
- }
-
- /*
- * Class to test for void remove(MutableTreeNode)
- */
- public void testRemoveMutableTreeNode()
- {
- }
-
- public void testSetUserObject()
- {
- DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
- node.setUserObject( new Tuple() ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.Enumeration;
+
+import javax.swing.tree.MutableTreeNode;
+
+import org.apache.commons.codec.stateful.DecoderCallback;
+import org.apache.commons.codec.stateful.StatefulDecoder;
+import org.apache.commons.lang.ArrayUtils;
+
+
+/**
+ * Tests the default MutableTupleNode implementation.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class DefaultMutableTupleNodeTest extends AbstractDecoderTestCase
+{
+ public DefaultMutableTupleNodeTest()
+ {
+ super ( DefaultMutableTupleNodeTest.class.getName() ) ;
+ }
+
+
+ /*
+ * Class to test for void DefaultMutableTupleNode()
+ */
+ public void testDefaultMutableTupleNode()
+ {
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ assertNotNull( node ) ;
+ }
+
+ /*
+ * Class to test for void DefaultMutableTupleNode(Tuple)
+ */
+ public void testDefaultMutableTupleNodeTuple()
+ {
+ }
+
+ /*
+ * Class to test for void insert(MutableTupleNode, int)
+ */
+ public void testInsertMutableTupleNodeint()
+ {
+ }
+
+ /*
+ * Class to test for void remove(int)
+ */
+ public void testRemoveint()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ assertEquals(1,parent.getChildCount()) ;
+ parent.remove( 0 ) ;
+ assertEquals(0,parent.getChildCount()) ;
+ }
+
+ /*
+ * Class to test for void remove(MutableTupleNode)
+ */
+ public void testRemoveMutableTupleNode()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ assertEquals(1,parent.getChildCount()) ;
+ parent.remove( (MutableTupleNode) node ) ;
+ assertEquals(0,parent.getChildCount()) ;
+
+ parent.insert( (MutableTreeNode) node, 0 ) ;
+ assertEquals(1,parent.getChildCount()) ;
+ parent.remove( (MutableTreeNode) node ) ;
+ assertEquals(0,parent.getChildCount()) ;
+ }
+
+ public void testRemoveFromParent()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ assertEquals(1,parent.getChildCount()) ;
+ node.removeFromParent() ;
+ assertEquals(0,parent.getChildCount()) ;
+ }
+
+ /*
+ * Class to test for void setParent(MutableTupleNode)
+ */
+ public void testSetParentMutableTupleNode()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+ assertEquals(parent, node.getParent()) ;
+ node.setParent((MutableTupleNode)new DefaultMutableTupleNode()) ;
+ assertNotSame(parent, node.getParent()) ;
+ }
+
+ /*
+ * Class to test for void setParent(MutableTupleNode)
+ */
+ public void testSetParentMutableTreeNode()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTreeNode) node, 0 ) ;
+ node.setParent( (MutableTreeNode) parent) ;
+ assertEquals(parent, node.getParent()) ;
+ node.setParent((MutableTreeNode)new DefaultMutableTupleNode()) ;
+ assertNotSame(parent, node.getParent()) ;
+ }
+
+ public void testSetTuple()
+ {
+ Tuple t = new Tuple() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ node.setTuple( t ) ;
+ assertEquals(t, node.getTuple()) ;
+ }
+
+ public void testGetParentTupleNode()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+ assertSame(parent, node.getParentTupleNode()) ;
+ assertSame(parent, node.getParent()) ;
+ }
+
+ public void testGetChildren()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+ assertSame(parent, node.getParentTupleNode()) ;
+ assertTrue( parent.getChildren().hasNext()) ;
+ }
+
+
+ public void testGetChildTupleNodeAt()
+ {
+ }
+
+ /*
+ * Class to test for int getIndex(TupleNode)
+ */
+ public void testGetIndexTupleNode()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+ assertEquals( 0, parent.getIndex((MutableTupleNode)node));
+ assertEquals( 0, parent.getIndex((MutableTreeNode)node));
+ }
+
+ public void testGetChildCount()
+ {
+ }
+
+ public void testSize()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+
+ // fact that we use the indefinate form we automatically add two to
+ // the contained size
+ assertEquals(9, parent.size()) ;
+ }
+
+ public void testSize2()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, 5, TypeClass.APPLICATION ) ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+
+ assertEquals(7, parent.size()) ;
+ }
+
+ public void testSize3()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ parent.setTuple( constructed ) ;
+
+ assertEquals(4, parent.size()) ;
+ }
+
+ public void testEncode3() throws Exception
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ parent.setTuple( constructed ) ;
+
+ assertEquals(4, parent.size()) ;
+
+ ByteBuffer buf = ByteBuffer.allocate( 4 ) ;
+ parent.encode( buf ) ;
+
+ final ArrayList list = new ArrayList() ;
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.setCallback( new DecoderCallback(){
+ public void decodeOccurred(StatefulDecoder arg0, Object arg1)
+ {
+ list.add( arg1 ) ;
+ }}) ;
+
+ decoder.decode(buf.flip()) ;
+ DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
+ list.get(0);
+ assertEquals( decoded.getTuple(), parent.getTuple()) ;
+ }
+
+ public void testGetTuple()
+ {
+ Tuple t = new Tuple() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ node.setTuple(t) ;
+ assertSame(t, node.getTuple()) ;
+ }
+
+ public void testEncode0() throws Exception
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) end, 0 ) ;
+ end.setParent( (MutableTupleNode) parent) ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
+ terminator.typeClass = TypeClass.UNIVERSAL ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+ end.setTuple(terminator) ;
+
+ assertEquals(9, parent.size()) ;
+
+ ByteBuffer buf = ByteBuffer.allocate( 9 ) ;
+ parent.encode( buf ) ;
+
+ final ArrayList list = new ArrayList() ;
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.setCallback( new DecoderCallback(){
+ public void decodeOccurred(StatefulDecoder arg0, Object arg1)
+ {
+ list.add( arg1 ) ;
+ }}) ;
+
+ decoder.decode(buf.flip()) ;
+ DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
+ list.get(0);
+ assertEquals( decoded.getTuple(), parent.getTuple()) ;
+ }
+
+ public void testEncode1() throws Exception
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+
+ // 2 extra bytes added for indefinate form
+ assertEquals(9, parent.size()) ;
+
+ ByteBuffer buf = ByteBuffer.allocate( 9 ) ;
+ parent.encode( buf ) ;
+
+ final ArrayList list = new ArrayList() ;
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.setCallback( new DecoderCallback(){
+ public void decodeOccurred(StatefulDecoder arg0, Object arg1)
+ {
+ list.add( arg1 ) ;
+ }}) ;
+
+ decoder.decode(buf.flip()) ;
+ DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
+ list.get(0);
+ assertEquals( decoded.getTuple(), parent.getTuple()) ;
+ }
+
+ public void testEncode2() throws Exception
+ {
+ DefaultMutableTupleNode top = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode middle = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode bottom = new DefaultMutableTupleNode() ;
+ top.insert( (MutableTupleNode) middle, 0 ) ;
+ middle.setParent( (MutableTupleNode) top) ;
+ middle.insert( (MutableTupleNode) bottom, 0 ) ;
+ bottom.setParent( (MutableTupleNode) middle) ;
+
+ Tuple middleTuple = new Tuple( 1, 3, TypeClass.APPLICATION ) ;
+ Tuple topTuple = new Tuple ( 2, 5, TypeClass.APPLICATION ) ;
+ Tuple bottomTuple = new Tuple( 3, new byte[1]) ;
+
+ bottomTuple.typeClass = TypeClass.UNIVERSAL ;
+ top.setTuple( topTuple ) ;
+ middle.setTuple( middleTuple ) ;
+ bottom.setTuple( bottomTuple ) ;
+
+ assertEquals(7, top.size()) ;
+
+ ByteBuffer buf = ByteBuffer.allocate( 7 ) ;
+ top.encode( buf ) ;
+
+ final ArrayList list = new ArrayList() ;
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.setCallback( new DecoderCallback(){
+ public void decodeOccurred(StatefulDecoder arg0, Object arg1)
+ {
+ list.add( arg1 ) ;
+ }}) ;
+
+ decoder.decode(buf.flip()) ;
+ DefaultMutableTupleNode decoded = ( DefaultMutableTupleNode )
+ list.get(0);
+ assertEquals( decoded.getTuple(), top.getTuple()) ;
+ }
+
+ /*
+ * Class to test for String toString()
+ */
+ public void testToString()
+ {
+ }
+
+ public void testPrintDepthFirst()
+ {
+ }
+
+ public void testChildren()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) end, 0 ) ;
+ end.setParent( (MutableTupleNode) parent) ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
+ terminator.typeClass = TypeClass.UNIVERSAL ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+ end.setTuple(terminator) ;
+
+ Enumeration list = parent.children() ;
+
+ assertEquals( node, list.nextElement() ) ;
+ assertEquals( end, list.nextElement() ) ;
+
+ try
+ {
+ list.nextElement() ;
+ fail( "should never get here due to thrown exception" ) ;
+ }
+ catch( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+ }
+
+ public void testGetAllowsChildren()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) end, 0 ) ;
+ end.setParent( (MutableTupleNode) parent) ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
+ terminator.typeClass = TypeClass.UNIVERSAL ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+ end.setTuple(terminator) ;
+
+ assertFalse( end.getAllowsChildren() ) ;
+ assertFalse( node.getAllowsChildren() ) ;
+ assertTrue( parent.getAllowsChildren() ) ;
+ }
+
+ public void testGetChildAt()
+ {
+ }
+
+ /*
+ * Class to test for int getIndex(TreeNode)
+ */
+ public void testGetIndexTreeNode()
+ {
+ }
+
+ public void testGetParent()
+ {
+ }
+
+ /*
+ * Class to test for void insert(MutableTreeNode, int)
+ */
+ public void testInsertMutableTreeNodeint()
+ {
+ }
+
+ public void testIsLeaf0()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ assertTrue( parent.isLeaf() ) ;
+ }
+
+ public void testIsLeaf1()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ parent.setTuple(new Tuple()) ;
+ assertTrue( parent.isLeaf() ) ;
+ }
+
+ public void testIsLeaf2()
+ {
+ DefaultMutableTupleNode parent = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ DefaultMutableTupleNode end = new DefaultMutableTupleNode() ;
+ parent.insert( (MutableTupleNode) end, 0 ) ;
+ end.setParent( (MutableTupleNode) parent) ;
+ parent.insert( (MutableTupleNode) node, 0 ) ;
+ node.setParent( (MutableTupleNode) parent) ;
+
+ Tuple primitive = new Tuple( 1, new byte[3] ) ;
+ Tuple constructed = new Tuple ( 2, TypeClass.APPLICATION ) ;
+ Tuple terminator = new Tuple( 0, true, ArrayUtils.EMPTY_BYTE_ARRAY) ;
+ terminator.typeClass = TypeClass.UNIVERSAL ;
+ parent.setTuple( constructed ) ;
+ node.setTuple( primitive ) ;
+ end.setTuple(terminator) ;
+
+ assertFalse( parent.isLeaf() ) ;
+ }
+
+ /*
+ * Class to test for void remove(MutableTreeNode)
+ */
+ public void testRemoveMutableTreeNode()
+ {
+ }
+
+ public void testSetUserObject()
+ {
+ DefaultMutableTupleNode node = new DefaultMutableTupleNode() ;
+ node.setUserObject( new Tuple() ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/EncodeDecodeTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/EncodeDecodeTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/EncodeDecodeTests.java Sun Mar 14 14:02:18 2004
@@ -1,80 +1,80 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.nio.ByteBuffer ;
-import java.math.BigInteger ;
-import java.io.ByteArrayInputStream ;
-
-import org.apache.commons.codec.binary.Hex ;
-import org.apache.ldap.common.message.AbandonRequest ;
-import org.apache.ldap.common.message.MessageDecoder ;
-import org.apache.ldap.common.message.MessageEncoder ;
-import org.apache.ldap.common.message.AbandonRequestImpl ;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Testing out round trip encode decode.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class EncodeDecodeTests extends TestCase
-{
- public void testAbandonRequest() throws Exception
- {
- DefaultMutableTupleNode root = null ;
- ByteBuffer buf = null ;
- AbandonRequestImpl request = new AbandonRequestImpl( BigInteger.ONE ) ;
- request.setAbandoned( new BigInteger( "3" ) ) ;
-
- MessageEncoder encoder = new MessageEncoder() ;
- byte[] snaccBytes = encoder.encode( request ) ;
-
- String snaccEncoded = new String( Hex.encodeHex( snaccBytes ) ) ;
- System.out.println( "snacc encoded = [" + snaccEncoded + "]["
- + snaccBytes.length + "]" ) ;
-
- MessageDecoder decoder = new MessageDecoder() ;
- AbandonRequest msg = ( AbandonRequest ) decoder.decode( null,
- new ByteArrayInputStream( snaccBytes ) ) ;
- assertTrue( msg.getMessageId().equals( request.getMessageId() ) ) ;
-
- System.out.println( "snacc decoded = " + msg ) ;
-
- root = ( DefaultMutableTupleNode )
- TupleTreeDecoder.treeDecode( ByteBuffer.wrap( snaccBytes ) ) ;
- //root.analyze() ;
-
- if ( root == null )
- {
- System.out.println( "nothing decoded" ) ;
- return ;
- }
-
- buf = ByteBuffer.allocate( root.size() ) ;
- root.encode( buf ) ;
- buf.flip() ;
- byte[] snickersBytes = new byte[buf.remaining()] ;
- buf.get( snickersBytes ) ;
- String snickersEncoded = new String( Hex.encodeHex( snickersBytes ) ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.nio.ByteBuffer ;
+import java.math.BigInteger ;
+import java.io.ByteArrayInputStream ;
+
+import org.apache.commons.codec.binary.Hex ;
+import org.apache.ldap.common.message.AbandonRequest ;
+import org.apache.ldap.common.message.MessageDecoder ;
+import org.apache.ldap.common.message.MessageEncoder ;
+import org.apache.ldap.common.message.AbandonRequestImpl ;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Testing out round trip encode decode.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class EncodeDecodeTests extends TestCase
+{
+ public void testAbandonRequest() throws Exception
+ {
+ DefaultMutableTupleNode root = null ;
+ ByteBuffer buf = null ;
+ AbandonRequestImpl request = new AbandonRequestImpl( BigInteger.ONE ) ;
+ request.setAbandoned( new BigInteger( "3" ) ) ;
+
+ MessageEncoder encoder = new MessageEncoder() ;
+ byte[] snaccBytes = encoder.encode( request ) ;
+
+ String snaccEncoded = new String( Hex.encodeHex( snaccBytes ) ) ;
+ System.out.println( "snacc encoded = [" + snaccEncoded + "]["
+ + snaccBytes.length + "]" ) ;
+
+ MessageDecoder decoder = new MessageDecoder() ;
+ AbandonRequest msg = ( AbandonRequest ) decoder.decode( null,
+ new ByteArrayInputStream( snaccBytes ) ) ;
+ assertTrue( msg.getMessageId().equals( request.getMessageId() ) ) ;
+
+ System.out.println( "snacc decoded = " + msg ) ;
+
+ root = ( DefaultMutableTupleNode )
+ TupleTreeDecoder.treeDecode( ByteBuffer.wrap( snaccBytes ) ) ;
+ //root.analyze() ;
+
+ if ( root == null )
+ {
+ System.out.println( "nothing decoded" ) ;
+ return ;
+ }
+
+ buf = ByteBuffer.allocate( root.size() ) ;
+ root.encode( buf ) ;
+ buf.flip() ;
+ byte[] snickersBytes = new byte[buf.remaining()] ;
+ buf.get( snickersBytes ) ;
+ String snickersEncoded = new String( Hex.encodeHex( snickersBytes ) ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/IntStackTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/IntStackTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/IntStackTest.java Sun Mar 14 14:02:18 2004
@@ -1,151 +1,151 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.EmptyStackException ;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests the IntStack class.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class IntStackTest extends TestCase
-{
- IntStack stack = null ;
-
-
- /**
- * Runs the test.
- *
- * @param args nada
- */
- public static void main( String[] args )
- {
- junit.textui.TestRunner.run( IntStackTest.class ) ;
- }
-
-
- /* (non-Javadoc)
- * @see junit.framework.TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp() ;
- stack = new IntStack() ;
- }
-
-
- /**
- * Constructor for IntStackTest.
- * @param arg0
- */
- public IntStackTest( String arg0 )
- {
- super( arg0 ) ;
- }
-
-
- public void testEmpty()
- {
- assertTrue( "Newly created stacks should be empty", stack.empty() ) ;
- stack.push( 0 ) ;
- assertFalse( "Stack with item should not be empty", stack.empty() ) ;
- stack.pop() ;
- assertTrue( "Stack last int popped should be empty", stack.empty() ) ;
- }
-
-
- public void testPeek()
- {
- try
- {
- stack.peek() ;
- throw new AssertionError(
- "Peek should have thrown an EmptyStackException" ) ;
- }
- catch( EmptyStackException e )
- {
- assertNotNull( "EmptyStackException should not be null", e ) ;
- }
-
- for( int ii = 0; ii < 10; ii++ )
- {
- stack.push( ii ) ;
- assertEquals( ii, stack.peek() ) ;
- }
- }
-
-
- public void testPop()
- {
- try
- {
- stack.pop() ;
- throw new AssertionError(
- "Pop should have thrown an EmptyStackException" ) ;
- }
- catch( EmptyStackException e )
- {
- assertNotNull( "EmptyStackException should not be null", e ) ;
- }
-
- for( int ii = 0; ii < 10; ii++ )
- {
- stack.push( ii ) ;
- assertEquals( ii, stack.pop() ) ;
- }
-
- for( int ii = 0; ii < 10; ii++ )
- {
- stack.push( ii ) ;
- }
- for( int ii = 10; ii < 0; ii-- )
- {
- stack.push( ii ) ;
- assertEquals( ii, stack.pop() ) ;
- }
- }
-
-
- public void testPush()
- {
- stack.push( 0 ) ;
- stack.push( 0 ) ;
- assertFalse( stack.empty() ) ;
- assertEquals( 0, stack.pop() ) ;
- assertEquals( 0, stack.pop() ) ;
- }
-
-
- public void testSearch()
- {
- stack.push( 0 ) ;
- stack.push( 1 ) ;
- assertEquals( 2, stack.search( 0 ) ) ;
- stack.push( 0 ) ;
- assertEquals( 1, stack.search( 0 ) ) ;
- stack.push( 0 ) ;
- assertEquals( 3, stack.search( 1 ) ) ;
- assertEquals( -1, stack.search( 44 ) ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.EmptyStackException ;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the IntStack class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class IntStackTest extends TestCase
+{
+ IntStack stack = null ;
+
+
+ /**
+ * Runs the test.
+ *
+ * @param args nada
+ */
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( IntStackTest.class ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp() ;
+ stack = new IntStack() ;
+ }
+
+
+ /**
+ * Constructor for IntStackTest.
+ * @param arg0
+ */
+ public IntStackTest( String arg0 )
+ {
+ super( arg0 ) ;
+ }
+
+
+ public void testEmpty()
+ {
+ assertTrue( "Newly created stacks should be empty", stack.empty() ) ;
+ stack.push( 0 ) ;
+ assertFalse( "Stack with item should not be empty", stack.empty() ) ;
+ stack.pop() ;
+ assertTrue( "Stack last int popped should be empty", stack.empty() ) ;
+ }
+
+
+ public void testPeek()
+ {
+ try
+ {
+ stack.peek() ;
+ throw new AssertionError(
+ "Peek should have thrown an EmptyStackException" ) ;
+ }
+ catch( EmptyStackException e )
+ {
+ assertNotNull( "EmptyStackException should not be null", e ) ;
+ }
+
+ for( int ii = 0; ii < 10; ii++ )
+ {
+ stack.push( ii ) ;
+ assertEquals( ii, stack.peek() ) ;
+ }
+ }
+
+
+ public void testPop()
+ {
+ try
+ {
+ stack.pop() ;
+ throw new AssertionError(
+ "Pop should have thrown an EmptyStackException" ) ;
+ }
+ catch( EmptyStackException e )
+ {
+ assertNotNull( "EmptyStackException should not be null", e ) ;
+ }
+
+ for( int ii = 0; ii < 10; ii++ )
+ {
+ stack.push( ii ) ;
+ assertEquals( ii, stack.pop() ) ;
+ }
+
+ for( int ii = 0; ii < 10; ii++ )
+ {
+ stack.push( ii ) ;
+ }
+ for( int ii = 10; ii < 0; ii-- )
+ {
+ stack.push( ii ) ;
+ assertEquals( ii, stack.pop() ) ;
+ }
+ }
+
+
+ public void testPush()
+ {
+ stack.push( 0 ) ;
+ stack.push( 0 ) ;
+ assertFalse( stack.empty() ) ;
+ assertEquals( 0, stack.pop() ) ;
+ assertEquals( 0, stack.pop() ) ;
+ }
+
+
+ public void testSearch()
+ {
+ stack.push( 0 ) ;
+ stack.push( 1 ) ;
+ assertEquals( 2, stack.search( 0 ) ) ;
+ stack.push( 0 ) ;
+ assertEquals( 1, stack.search( 0 ) ) ;
+ stack.push( 0 ) ;
+ assertEquals( 3, stack.search( 1 ) ) ;
+ assertEquals( -1, stack.search( 44 ) ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/LdapMessageTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/LdapMessageTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/LdapMessageTests.java Sun Mar 14 14:02:18 2004
@@ -1,159 +1,159 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.math.BigInteger ;
-
-import javax.naming.directory.Attributes ;
-
-import org.apache.ldap.common.message.ScopeEnum ;
-import org.apache.ldap.common.filter.PresenceNode ;
-import org.apache.ldap.common.message.AddRequestImpl ;
-import org.apache.ldap.common.message.BindRequestImpl ;
-import org.apache.ldap.common.message.DerefAliasesEnum ;
-import org.apache.ldap.common.message.DeleteRequestImpl ;
-import org.apache.ldap.common.message.SearchRequestImpl ;
-import org.apache.ldap.common.message.ModifyRequestImpl ;
-import org.apache.ldap.common.message.AbandonRequestImpl ;
-import org.apache.ldap.common.message.CompareRequestImpl ;
-import org.apache.ldap.common.message.ExtendedRequestImpl ;
-import org.apache.ldap.common.message.ModifyDnRequestImpl ;
-import org.apache.ldap.common.message.LockableAttributesImpl ;
-
-
-/**
- * $todo$ doc me
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class LdapMessageTests extends AbstractDecoderTestCase
-{
- public LdapMessageTests()
- {
- super ( LdapMessageTests.class.getName() ) ;
- }
-
-
- public void testBindMessage() throws Exception
- {
- BindRequestImpl request = new BindRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- request.setSimple( true ) ;
- request.setCredentials( "password".getBytes() ) ;
- request.setVersion3( true ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testAddMessage() throws Exception
- {
- AddRequestImpl request = new AddRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
-
- Attributes attrs = new LockableAttributesImpl() ;
- attrs.put( "attr0", "val0" ) ;
- attrs.put( "attr0", "val1" ) ;
- attrs.put( "attr0", "val2" ) ;
- attrs.put( "attr1", "val0" ) ;
- attrs.put( "attr2", "val0" ) ;
- attrs.put( "attr2", "val1" ) ;
-
- request.setEntry( attrs ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testDeleteMessage() throws Exception
- {
- DeleteRequestImpl request = new DeleteRequestImpl( BigInteger.ONE ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testAbandonMessage() throws Exception
- {
- AbandonRequestImpl request = new AbandonRequestImpl( BigInteger.ONE ) ;
- request.setAbandoned( new BigInteger( "3" ) ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testCompareMessage() throws Exception
- {
- CompareRequestImpl request = new CompareRequestImpl( BigInteger.ONE ) ;
- request.setAssertionValue( "testvalue" ) ;
- request.setAttributeId( "testattr" ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testExtendedMessage() throws Exception
- {
- ExtendedRequestImpl request = new ExtendedRequestImpl( BigInteger.ONE ) ;
- request.setOid( "1234.1234.1324" ) ;
- request.setPayload( "Hello World".getBytes() ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testModifyDnMessage() throws Exception
- {
- ModifyDnRequestImpl request = new ModifyDnRequestImpl( BigInteger.ONE ) ;
- request.setDeleteOldRdn(true) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- request.setNewRdn( "uid=aok" ) ;
- request.setNewSuperior( "dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testModifyMessage() throws Exception
- {
- ModifyRequestImpl request =
- new ModifyRequestImpl( new BigInteger( "17" ) ) ;
- request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-
-
- public void testSearchMessage() throws Exception
- {
- SearchRequestImpl request = new SearchRequestImpl( BigInteger.ONE ) ;
- request.setBase( "uid=akarasulu,dc=example,dc=com" ) ;
- request.setDerefAliases( DerefAliasesEnum.DEREFALWAYS ) ;
- PresenceNode node = new PresenceNode( "attrib0" ) ;
- request.setFilter( node ) ;
- request.setScope( ScopeEnum.BASEOBJECT ) ;
- request.setSizeLimit( BigInteger.ZERO ) ;
- request.setTimeLimit( BigInteger.ZERO ) ;
- decode( request ) ;
- assertFalse( tlvList.isEmpty() ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.math.BigInteger ;
+
+import javax.naming.directory.Attributes ;
+
+import org.apache.ldap.common.message.ScopeEnum ;
+import org.apache.ldap.common.filter.PresenceNode ;
+import org.apache.ldap.common.message.AddRequestImpl ;
+import org.apache.ldap.common.message.BindRequestImpl ;
+import org.apache.ldap.common.message.DerefAliasesEnum ;
+import org.apache.ldap.common.message.DeleteRequestImpl ;
+import org.apache.ldap.common.message.SearchRequestImpl ;
+import org.apache.ldap.common.message.ModifyRequestImpl ;
+import org.apache.ldap.common.message.AbandonRequestImpl ;
+import org.apache.ldap.common.message.CompareRequestImpl ;
+import org.apache.ldap.common.message.ExtendedRequestImpl ;
+import org.apache.ldap.common.message.ModifyDnRequestImpl ;
+import org.apache.ldap.common.message.LockableAttributesImpl ;
+
+
+/**
+ * $todo$ doc me
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class LdapMessageTests extends AbstractDecoderTestCase
+{
+ public LdapMessageTests()
+ {
+ super ( LdapMessageTests.class.getName() ) ;
+ }
+
+
+ public void testBindMessage() throws Exception
+ {
+ BindRequestImpl request = new BindRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ request.setSimple( true ) ;
+ request.setCredentials( "password".getBytes() ) ;
+ request.setVersion3( true ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testAddMessage() throws Exception
+ {
+ AddRequestImpl request = new AddRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+
+ Attributes attrs = new LockableAttributesImpl() ;
+ attrs.put( "attr0", "val0" ) ;
+ attrs.put( "attr0", "val1" ) ;
+ attrs.put( "attr0", "val2" ) ;
+ attrs.put( "attr1", "val0" ) ;
+ attrs.put( "attr2", "val0" ) ;
+ attrs.put( "attr2", "val1" ) ;
+
+ request.setEntry( attrs ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testDeleteMessage() throws Exception
+ {
+ DeleteRequestImpl request = new DeleteRequestImpl( BigInteger.ONE ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testAbandonMessage() throws Exception
+ {
+ AbandonRequestImpl request = new AbandonRequestImpl( BigInteger.ONE ) ;
+ request.setAbandoned( new BigInteger( "3" ) ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testCompareMessage() throws Exception
+ {
+ CompareRequestImpl request = new CompareRequestImpl( BigInteger.ONE ) ;
+ request.setAssertionValue( "testvalue" ) ;
+ request.setAttributeId( "testattr" ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testExtendedMessage() throws Exception
+ {
+ ExtendedRequestImpl request = new ExtendedRequestImpl( BigInteger.ONE ) ;
+ request.setOid( "1234.1234.1324" ) ;
+ request.setPayload( "Hello World".getBytes() ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testModifyDnMessage() throws Exception
+ {
+ ModifyDnRequestImpl request = new ModifyDnRequestImpl( BigInteger.ONE ) ;
+ request.setDeleteOldRdn(true) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ request.setNewRdn( "uid=aok" ) ;
+ request.setNewSuperior( "dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testModifyMessage() throws Exception
+ {
+ ModifyRequestImpl request =
+ new ModifyRequestImpl( new BigInteger( "17" ) ) ;
+ request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+
+
+ public void testSearchMessage() throws Exception
+ {
+ SearchRequestImpl request = new SearchRequestImpl( BigInteger.ONE ) ;
+ request.setBase( "uid=akarasulu,dc=example,dc=com" ) ;
+ request.setDerefAliases( DerefAliasesEnum.DEREFALWAYS ) ;
+ PresenceNode node = new PresenceNode( "attrib0" ) ;
+ request.setFilter( node ) ;
+ request.setScope( ScopeEnum.BASEOBJECT ) ;
+ request.setSizeLimit( BigInteger.ZERO ) ;
+ request.setTimeLimit( BigInteger.ZERO ) ;
+ decode( request ) ;
+ assertFalse( tlvList.isEmpty() ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteLengthTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteLengthTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteLengthTests.java Sun Mar 14 14:02:18 2004
@@ -1,146 +1,146 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * Tests single byte length encodings in a BER TLV.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class MultiByteLengthTests extends AbstractDecoderTestCase
-{
- /**
- * Creates a single byte lenth test case.
- *
- * @param name the name of this test
- */
- public MultiByteLengthTests( String name )
- {
- super( name ) ;
- }
-
-
- public void testLength128() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 128, tlv.length ) ;
- }
-
-
- public void testLength129() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 129, tlv.length ) ;
- }
-
-
- public void testLength255() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 255, tlv.length ) ;
- }
-
-
- public void testLength32768() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000010" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "00000000" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 32768, tlv.length ) ;
- }
-
-
- public void testLength65535() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "10000010" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 65535, tlv.length ) ;
- }
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * Tests single byte length encodings in a BER TLV.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class MultiByteLengthTests extends AbstractDecoderTestCase
+{
+ /**
+ * Creates a single byte lenth test case.
+ *
+ * @param name the name of this test
+ */
+ public MultiByteLengthTests( String name )
+ {
+ super( name ) ;
+ }
+
+
+ public void testLength128() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 128, tlv.length ) ;
+ }
+
+
+ public void testLength129() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 129, tlv.length ) ;
+ }
+
+
+ public void testLength255() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 255, tlv.length ) ;
+ }
+
+
+ public void testLength32768() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000010" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "00000000" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 32768, tlv.length ) ;
+ }
+
+
+ public void testLength65535() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "10000010" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 65535, tlv.length ) ;
+ }
}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/MultiByteTagTests.java Sun Mar 14 14:02:18 2004
@@ -1,354 +1,354 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * Here we test simple 1 byte tag and length values to test the decoder's
- * ability to handle these most simple tlvs.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class MultiByteTagTests extends AbstractDecoderTestCase
-{
-
- /**
- * @param arg0
- */
- public MultiByteTagTests( String arg0 )
- {
- super( arg0 ) ;
- }
-
-
- public void testId31() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00011111" ) ;
- assertEquals( 31, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId100() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "01100100" ) ;
- assertEquals( 100, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId127() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "01111111" ) ;
- assertEquals( 127, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId128() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( 128, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId129() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( 129, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
-
-
- public void testIdShift14() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( Tuple.BIT_13, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift14Minus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "01111111" ) ;
- assertEquals( Tuple.BIT_13 - 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift14Plus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( Tuple.BIT_13 + 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift21() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( Tuple.BIT_20, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift21Minus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "01111111" ) ;
- assertEquals( Tuple.BIT_20 - 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift21Plus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( Tuple.BIT_20 + 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift28() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( Tuple.BIT_27, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift28Minus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "11111111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "01111111" ) ;
- assertEquals( Tuple.BIT_27 - 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdShift28Plus1() throws Exception
- {
- Tuple tlv = decode( "01011111" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000001" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "10000000" ) ;
- assertEquals( 0, tlv.id ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
-
- tlv = decode( "00000001" ) ;
- assertEquals( Tuple.BIT_27 + 1, tlv.id ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * Here we test simple 1 byte tag and length values to test the decoder's
+ * ability to handle these most simple tlvs.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class MultiByteTagTests extends AbstractDecoderTestCase
+{
+
+ /**
+ * @param arg0
+ */
+ public MultiByteTagTests( String arg0 )
+ {
+ super( arg0 ) ;
+ }
+
+
+ public void testId31() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00011111" ) ;
+ assertEquals( 31, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId100() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "01100100" ) ;
+ assertEquals( 100, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId127() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "01111111" ) ;
+ assertEquals( 127, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId128() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( 128, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId129() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( 129, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+
+
+ public void testIdShift14() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( Tuple.BIT_13, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift14Minus1() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "01111111" ) ;
+ assertEquals( Tuple.BIT_13 - 1, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift14Plus1() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( Tuple.BIT_13 + 1, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift21() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( Tuple.BIT_20, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift21Minus1() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "01111111" ) ;
+ assertEquals( Tuple.BIT_20 - 1, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift21Plus1() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( Tuple.BIT_20 + 1, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift28() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( Tuple.BIT_27, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift28Minus1() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "11111111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "01111111" ) ;
+ assertEquals( Tuple.BIT_27 - 1, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdShift28Plus1() throws Exception
+ {
+ Tuple tlv = decode( "01011111" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000001" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "10000000" ) ;
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+
+ tlv = decode( "00000001" ) ;
+ assertEquals( Tuple.BIT_27 + 1, tlv.id ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ObjectVersePrimitiveTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ObjectVersePrimitiveTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/ObjectVersePrimitiveTest.java Sun Mar 14 14:02:18 2004
@@ -1,158 +1,158 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.Stack;
-
-import org.apache.commons.lang.time.StopWatch;
-
-import junit.framework.TestCase ;
-
-
-/**
- * $todo$ doc me
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class ObjectVersePrimitiveTest extends TestCase
-{
- public static final int MEMBER_COUNT = 3 ;
- public static final int INSTANCE_COUNT = 1000000 ;
- public static final Class OBJECT_CLASS = Tuple.class ;
-
- long objTime = 0 ;
- double objTimePerInst = 0.0 ;
- long objTimeNew = 0 ;
- double objTimeNewPerInst = 0.0 ;
- long intTime = 0 ;
- double intTimePerInst = 0.0 ;
-
- IntStack[] intStacks = new IntStack[MEMBER_COUNT] ;
- Stack objStack = null ;
-
-
- public static void main( String[] args )
- {
- junit.textui.TestRunner.run( ObjectVersePrimitiveTest.class ) ;
- }
-
-
- /* (non-Javadoc)
- * @see junit.framework.TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp() ;
-
- objStack = new Stack() ;
- for ( int ii = 0; ii < intStacks.length; ii++ )
- {
- intStacks[ii] = new IntStack() ;
- }
- }
-
-
- /* (non-Javadoc)
- * @see junit.framework.TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
-
- objStack = null ;
- for ( int ii = 0; ii < intStacks.length; ii++ )
- {
- intStacks[ii] = null ;
- }
- }
-
-
- public void testObject()
- {
- StopWatch sw = new StopWatch() ;
- sw.start() ;
- for ( int ii = 0; ii < INSTANCE_COUNT; ii++ )
- {
- Object obj = new Tuple() ;
- objStack.push( obj ) ;
- objStack.pop() ;
- }
- sw.stop() ;
- objTime = sw.getTime() ;
- objTimePerInst = objTime/INSTANCE_COUNT ;
- System.out.println( "----------------------------------------------" ) ;
- System.out.println( "TEST: java.lang.Object create, push and pop" ) ;
- System.out.println( "----------------------------------------------" ) ;
- System.out.println( "# of Instances: " + INSTANCE_COUNT ) ;
- System.out.println( "Total Time: " + objTime ) ;
- System.out.println( "Per Instance Time: " + objTimePerInst ) ;
- System.out.println( "----------------------------------------------" ) ;
- }
-
-
- public void testObjectNewInstance() throws Exception
- {
- StopWatch sw = new StopWatch() ;
- sw.start() ;
- for ( int ii = 0; ii < INSTANCE_COUNT; ii++ )
- {
- Object obj = OBJECT_CLASS.newInstance() ;
- objStack.push( obj ) ;
- objStack.pop() ;
- }
- sw.stop() ;
- objTimeNew = sw.getTime() ;
- objTimeNewPerInst = objTimeNew/INSTANCE_COUNT ;
- System.out.println( "----------------------------------------------" ) ;
- System.out.println( "TEST: " + OBJECT_CLASS
- + ".newInstance create, push, pop" ) ;
- System.out.println( "----------------------------------------------" ) ;
- System.out.println( "# of Instances: " + INSTANCE_COUNT ) ;
- System.out.println( "Total Time: " + objTimeNew ) ;
- System.out.println( "Per Instance Time: " + objTimeNewPerInst ) ;
- System.out.println( "----------------------------------------------" ) ;
- }
-
-
- public void testPrimitive()
- {
- StopWatch sw = new StopWatch() ;
- sw.start() ;
- for ( int ii = 0; ii < INSTANCE_COUNT; ii++ )
- {
- for ( int jj = 0; jj < MEMBER_COUNT; jj++ )
- {
- intStacks[jj].push( jj ) ;
- intStacks[jj].pop() ;
- }
- }
- sw.stop() ;
- intTime = sw.getTime() ;
- intTimePerInst = intTime/INSTANCE_COUNT ;
- System.out.println( "----------------------------------------------" ) ;
- System.out.println( "TEST: push " + MEMBER_COUNT + " primitive ints "
- + "onto separate stacks then pop em" ) ;
- System.out.println( "----------------------------------------------" ) ;
- System.out.println( "# of Instances: " + INSTANCE_COUNT ) ;
- System.out.println( "Total Time: " + intTime ) ;
- System.out.println( "Per Instance Time: " + intTimePerInst ) ;
- System.out.println( "----------------------------------------------" ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.Stack;
+
+import org.apache.commons.lang.time.StopWatch;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * $todo$ doc me
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class ObjectVersePrimitiveTest extends TestCase
+{
+ public static final int MEMBER_COUNT = 3 ;
+ public static final int INSTANCE_COUNT = 1000000 ;
+ public static final Class OBJECT_CLASS = Tuple.class ;
+
+ long objTime = 0 ;
+ double objTimePerInst = 0.0 ;
+ long objTimeNew = 0 ;
+ double objTimeNewPerInst = 0.0 ;
+ long intTime = 0 ;
+ double intTimePerInst = 0.0 ;
+
+ IntStack[] intStacks = new IntStack[MEMBER_COUNT] ;
+ Stack objStack = null ;
+
+
+ public static void main( String[] args )
+ {
+ junit.textui.TestRunner.run( ObjectVersePrimitiveTest.class ) ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp() ;
+
+ objStack = new Stack() ;
+ for ( int ii = 0; ii < intStacks.length; ii++ )
+ {
+ intStacks[ii] = new IntStack() ;
+ }
+ }
+
+
+ /* (non-Javadoc)
+ * @see junit.framework.TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+
+ objStack = null ;
+ for ( int ii = 0; ii < intStacks.length; ii++ )
+ {
+ intStacks[ii] = null ;
+ }
+ }
+
+
+ public void testObject()
+ {
+ StopWatch sw = new StopWatch() ;
+ sw.start() ;
+ for ( int ii = 0; ii < INSTANCE_COUNT; ii++ )
+ {
+ Object obj = new Tuple() ;
+ objStack.push( obj ) ;
+ objStack.pop() ;
+ }
+ sw.stop() ;
+ objTime = sw.getTime() ;
+ objTimePerInst = objTime/INSTANCE_COUNT ;
+ System.out.println( "----------------------------------------------" ) ;
+ System.out.println( "TEST: java.lang.Object create, push and pop" ) ;
+ System.out.println( "----------------------------------------------" ) ;
+ System.out.println( "# of Instances: " + INSTANCE_COUNT ) ;
+ System.out.println( "Total Time: " + objTime ) ;
+ System.out.println( "Per Instance Time: " + objTimePerInst ) ;
+ System.out.println( "----------------------------------------------" ) ;
+ }
+
+
+ public void testObjectNewInstance() throws Exception
+ {
+ StopWatch sw = new StopWatch() ;
+ sw.start() ;
+ for ( int ii = 0; ii < INSTANCE_COUNT; ii++ )
+ {
+ Object obj = OBJECT_CLASS.newInstance() ;
+ objStack.push( obj ) ;
+ objStack.pop() ;
+ }
+ sw.stop() ;
+ objTimeNew = sw.getTime() ;
+ objTimeNewPerInst = objTimeNew/INSTANCE_COUNT ;
+ System.out.println( "----------------------------------------------" ) ;
+ System.out.println( "TEST: " + OBJECT_CLASS
+ + ".newInstance create, push, pop" ) ;
+ System.out.println( "----------------------------------------------" ) ;
+ System.out.println( "# of Instances: " + INSTANCE_COUNT ) ;
+ System.out.println( "Total Time: " + objTimeNew ) ;
+ System.out.println( "Per Instance Time: " + objTimeNewPerInst ) ;
+ System.out.println( "----------------------------------------------" ) ;
+ }
+
+
+ public void testPrimitive()
+ {
+ StopWatch sw = new StopWatch() ;
+ sw.start() ;
+ for ( int ii = 0; ii < INSTANCE_COUNT; ii++ )
+ {
+ for ( int jj = 0; jj < MEMBER_COUNT; jj++ )
+ {
+ intStacks[jj].push( jj ) ;
+ intStacks[jj].pop() ;
+ }
+ }
+ sw.stop() ;
+ intTime = sw.getTime() ;
+ intTimePerInst = intTime/INSTANCE_COUNT ;
+ System.out.println( "----------------------------------------------" ) ;
+ System.out.println( "TEST: push " + MEMBER_COUNT + " primitive ints "
+ + "onto separate stacks then pop em" ) ;
+ System.out.println( "----------------------------------------------" ) ;
+ System.out.println( "# of Instances: " + INSTANCE_COUNT ) ;
+ System.out.println( "Total Time: " + intTime ) ;
+ System.out.println( "Per Instance Time: " + intTimePerInst ) ;
+ System.out.println( "----------------------------------------------" ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SimplePrimitiveTLVTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SimplePrimitiveTLVTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SimplePrimitiveTLVTests.java Sun Mar 14 14:02:18 2004
@@ -1,162 +1,162 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * Performs simple primitive tlv tests.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class SimplePrimitiveTLVTests extends AbstractDecoderTestCase
-{
-
- /**
- * @param arg0
- */
- public SimplePrimitiveTLVTests( String arg0 )
- {
- super( arg0 ) ;
- }
-
-
- public void testSingleSimpleTLV() throws Exception
- {
- // decode tag
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 1, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
- }
-
-
- public void testMultipleSimpleTLV() throws Exception
- {
- // decode tag
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 1, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
-
-
- // decode tag
- tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 1, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 2, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
-
-
- // decode tag
- tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 2, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "00000001" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 3, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
- }
-
-
- public void testSingleSimpleLongTLV() throws Exception
- {
- // decode tag
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- // decode length
- tlv = decode( "10000001" ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
-
- tlv = decode( "00000111" ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 7, tlv.length ) ;
-
- // decode value
- tlv = decode( "01010101" + "01010101" + "01010101" + "01010101"
- + "01010101" + "01010101" + "01010101" ) ;
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- assertEquals( 1, tlvList.size() ) ;
- assertNotNull( tlv.value ) ;
- assertEquals( 7, ((byte[]) tlv.value).length) ;
-
- byte[] value = (byte[]) tlv.value ;
- for ( int ii = 0 ; ii < 7; ii++ )
- {
- assertEquals( 0x0055, 0x00ff & ( int ) value[ii] ) ;
- }
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * Performs simple primitive tlv tests.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class SimplePrimitiveTLVTests extends AbstractDecoderTestCase
+{
+
+ /**
+ * @param arg0
+ */
+ public SimplePrimitiveTLVTests( String arg0 )
+ {
+ super( arg0 ) ;
+ }
+
+
+ public void testSingleSimpleTLV() throws Exception
+ {
+ // decode tag
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 1, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+ }
+
+
+ public void testMultipleSimpleTLV() throws Exception
+ {
+ // decode tag
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 1, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+
+
+ // decode tag
+ tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 1, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 2, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+
+
+ // decode tag
+ tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 2, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "00000001" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 3, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 0x0055, 0x00ff & ( int ) ( (byte[]) tlv.value)[0] ) ;
+ }
+
+
+ public void testSingleSimpleLongTLV() throws Exception
+ {
+ // decode tag
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ // decode length
+ tlv = decode( "10000001" ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+
+ tlv = decode( "00000111" ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 7, tlv.length ) ;
+
+ // decode value
+ tlv = decode( "01010101" + "01010101" + "01010101" + "01010101"
+ + "01010101" + "01010101" + "01010101" ) ;
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ assertEquals( 1, tlvList.size() ) ;
+ assertNotNull( tlv.value ) ;
+ assertEquals( 7, ((byte[]) tlv.value).length) ;
+
+ byte[] value = (byte[]) tlv.value ;
+ for ( int ii = 0 ; ii < 7; ii++ )
+ {
+ assertEquals( 0x0055, 0x00ff & ( int ) value[ii] ) ;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteLengthTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteLengthTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteLengthTests.java Sun Mar 14 14:02:18 2004
@@ -1,86 +1,86 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * Tests single byte length encodings in a BER TLV.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class SingleByteLengthTests extends AbstractDecoderTestCase
-{
- /**
- * Creates a single byte lenth test case.
- *
- * @param name the name of this test
- */
- public SingleByteLengthTests( String name )
- {
- super( name ) ;
- }
-
-
- public void testLength0() throws Exception
- {
- Tuple tlv = decode( "00000000" + "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 0, tlv.length ) ;
- }
-
-
- public void testLength1() throws Exception
- {
- Tuple tlv = decode( "00000001" + "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 1, tlv.length ) ;
- }
-
-
- public void testLength3() throws Exception
- {
- Tuple tlv = decode( "00000011" + "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 3, tlv.length ) ;
- }
-
-
- public void testLength127() throws Exception
- {
- Tuple tlv = decode( "01111111" + "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
- assertEquals( 127, tlv.length ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * Tests single byte length encodings in a BER TLV.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class SingleByteLengthTests extends AbstractDecoderTestCase
+{
+ /**
+ * Creates a single byte lenth test case.
+ *
+ * @param name the name of this test
+ */
+ public SingleByteLengthTests( String name )
+ {
+ super( name ) ;
+ }
+
+
+ public void testLength0() throws Exception
+ {
+ Tuple tlv = decode( "00000000" + "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 0, tlv.length ) ;
+ }
+
+
+ public void testLength1() throws Exception
+ {
+ Tuple tlv = decode( "00000001" + "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 1, tlv.length ) ;
+ }
+
+
+ public void testLength3() throws Exception
+ {
+ Tuple tlv = decode( "00000011" + "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 3, tlv.length ) ;
+ }
+
+
+ public void testLength127() throws Exception
+ {
+ Tuple tlv = decode( "01111111" + "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.VALUE, decoder.getState() ) ;
+ assertEquals( 127, tlv.length ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteTagTests.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteTagTests.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/SingleByteTagTests.java Sun Mar 14 14:02:18 2004
@@ -1,450 +1,450 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-/**
- * Here we test simple 1 byte tag and length values to test the decoder's
- * ability to handle these most simple tlvs.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class SingleByteTagTests extends AbstractDecoderTestCase
-{
-
- /**
- * @param arg0
- */
- public SingleByteTagTests( String arg0 )
- {
- super( arg0 ) ;
- }
-
-
- public void testAppTypeClass() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testPrivTypeClass() throws Exception
- {
- Tuple tlv = decode( "11000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.PRIVATE, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testCtxTypeClass() throws Exception
- {
- Tuple tlv = decode( "10000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.CONTEXT_SPECIFIC, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testUniTypeClass() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
-
- }
-
- public void testIllegalStateWithUniTypeClass() throws Exception
- {
- try
- {
- Tuple tlv = decode( "00000001" ) ;
- }
- catch( IllegalStateException e )
- {
- assertNotNull( e ) ;
- }
- }
-
- public void testId1() throws Exception
- {
- Tuple tlv = decode( "01000001" ) ;
- assertEquals( 1, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId2() throws Exception
- {
- Tuple tlv = decode( "01000010" ) ;
- assertEquals( 2, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId3() throws Exception
- {
- Tuple tlv = decode( "01000011" ) ;
- assertEquals( 3, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId4() throws Exception
- {
- Tuple tlv = decode( "01000100" ) ;
- assertEquals( 4, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId5() throws Exception
- {
- Tuple tlv = decode( "01000101" ) ;
- assertEquals( 5, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId6() throws Exception
- {
- Tuple tlv = decode( "01000110" ) ;
- assertEquals( 6, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId7() throws Exception
- {
- Tuple tlv = decode( "01000111" ) ;
- assertEquals( 7, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId8() throws Exception
- {
- Tuple tlv = decode( "01001000" ) ;
- assertEquals( 8, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId9() throws Exception
- {
- Tuple tlv = decode( "01001001" ) ;
- assertEquals( 9, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId10() throws Exception
- {
- Tuple tlv = decode( "01001010" ) ;
- assertEquals( 10, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId11() throws Exception
- {
- Tuple tlv = decode( "01001011" ) ;
- assertEquals( 11, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId12() throws Exception
- {
- Tuple tlv = decode( "01001100" ) ;
- assertEquals( 12, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId13() throws Exception
- {
- Tuple tlv = decode( "01001101" ) ;
- assertEquals( 13, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId14() throws Exception
- {
- Tuple tlv = decode( "01001110" ) ;
- assertEquals( 14, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId15() throws Exception
- {
- Tuple tlv = decode( "01001111" ) ;
- assertEquals( 15, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId16() throws Exception
- {
- Tuple tlv = decode( "01010000" ) ;
- assertEquals( 16, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId17() throws Exception
- {
- Tuple tlv = decode( "01010001" ) ;
- assertEquals( 17, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId18() throws Exception
- {
- Tuple tlv = decode( "01010010" ) ;
- assertEquals( 18, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId19() throws Exception
- {
- Tuple tlv = decode( "01010011" ) ;
- assertEquals( 19, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId20() throws Exception
- {
- Tuple tlv = decode( "01010100" ) ;
- assertEquals( 20, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId21() throws Exception
- {
- Tuple tlv = decode( "01010101" ) ;
- assertEquals( 21, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId22() throws Exception
- {
- Tuple tlv = decode( "01010110" ) ;
- assertEquals( 22, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId23() throws Exception
- {
- Tuple tlv = decode( "01010111" ) ;
- assertEquals( 23, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId24() throws Exception
- {
- Tuple tlv = decode( "01011000" ) ;
- assertEquals( 24, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId25() throws Exception
- {
- Tuple tlv = decode( "01011001" ) ;
- assertEquals( 25, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId26() throws Exception
- {
- Tuple tlv = decode( "01011010" ) ;
- assertEquals( 26, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId27() throws Exception
- {
- Tuple tlv = decode( "01011011" ) ;
- assertEquals( 27, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId28() throws Exception
- {
- Tuple tlv = decode( "01011100" ) ;
- assertEquals( 28, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId29() throws Exception
- {
- Tuple tlv = decode( "01011101" ) ;
- assertEquals( 29, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testId30() throws Exception
- {
- Tuple tlv = decode( "01011110" ) ;
- assertEquals( 30, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-
-
- public void testIdOverLimit() throws Exception
- {
- // this is the long form
- Tuple tlv = decode( "01011111" ) ;
-
- assertEquals( 0, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( true, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
-
- // state did not switch since we are still reading the long tag
- assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
- }
-
-
- public void testIsConstructed() throws Exception
- {
- Tuple tlv = decode( "01111110" ) ;
- assertEquals( 30, tlv.id ) ;
- assertEquals( 0, tlvList.size() ) ;
- assertEquals( false, tlv.isPrimitive ) ;
- assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
- assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+/**
+ * Here we test simple 1 byte tag and length values to test the decoder's
+ * ability to handle these most simple tlvs.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class SingleByteTagTests extends AbstractDecoderTestCase
+{
+
+ /**
+ * @param arg0
+ */
+ public SingleByteTagTests( String arg0 )
+ {
+ super( arg0 ) ;
+ }
+
+
+ public void testAppTypeClass() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testPrivTypeClass() throws Exception
+ {
+ Tuple tlv = decode( "11000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.PRIVATE, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testCtxTypeClass() throws Exception
+ {
+ Tuple tlv = decode( "10000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.CONTEXT_SPECIFIC, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testUniTypeClass() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+
+ }
+
+ public void testIllegalStateWithUniTypeClass() throws Exception
+ {
+ try
+ {
+ Tuple tlv = decode( "00000001" ) ;
+ }
+ catch( IllegalStateException e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ public void testId1() throws Exception
+ {
+ Tuple tlv = decode( "01000001" ) ;
+ assertEquals( 1, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId2() throws Exception
+ {
+ Tuple tlv = decode( "01000010" ) ;
+ assertEquals( 2, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId3() throws Exception
+ {
+ Tuple tlv = decode( "01000011" ) ;
+ assertEquals( 3, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId4() throws Exception
+ {
+ Tuple tlv = decode( "01000100" ) ;
+ assertEquals( 4, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId5() throws Exception
+ {
+ Tuple tlv = decode( "01000101" ) ;
+ assertEquals( 5, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId6() throws Exception
+ {
+ Tuple tlv = decode( "01000110" ) ;
+ assertEquals( 6, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId7() throws Exception
+ {
+ Tuple tlv = decode( "01000111" ) ;
+ assertEquals( 7, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId8() throws Exception
+ {
+ Tuple tlv = decode( "01001000" ) ;
+ assertEquals( 8, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId9() throws Exception
+ {
+ Tuple tlv = decode( "01001001" ) ;
+ assertEquals( 9, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId10() throws Exception
+ {
+ Tuple tlv = decode( "01001010" ) ;
+ assertEquals( 10, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId11() throws Exception
+ {
+ Tuple tlv = decode( "01001011" ) ;
+ assertEquals( 11, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId12() throws Exception
+ {
+ Tuple tlv = decode( "01001100" ) ;
+ assertEquals( 12, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId13() throws Exception
+ {
+ Tuple tlv = decode( "01001101" ) ;
+ assertEquals( 13, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId14() throws Exception
+ {
+ Tuple tlv = decode( "01001110" ) ;
+ assertEquals( 14, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId15() throws Exception
+ {
+ Tuple tlv = decode( "01001111" ) ;
+ assertEquals( 15, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId16() throws Exception
+ {
+ Tuple tlv = decode( "01010000" ) ;
+ assertEquals( 16, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId17() throws Exception
+ {
+ Tuple tlv = decode( "01010001" ) ;
+ assertEquals( 17, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId18() throws Exception
+ {
+ Tuple tlv = decode( "01010010" ) ;
+ assertEquals( 18, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId19() throws Exception
+ {
+ Tuple tlv = decode( "01010011" ) ;
+ assertEquals( 19, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId20() throws Exception
+ {
+ Tuple tlv = decode( "01010100" ) ;
+ assertEquals( 20, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId21() throws Exception
+ {
+ Tuple tlv = decode( "01010101" ) ;
+ assertEquals( 21, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId22() throws Exception
+ {
+ Tuple tlv = decode( "01010110" ) ;
+ assertEquals( 22, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId23() throws Exception
+ {
+ Tuple tlv = decode( "01010111" ) ;
+ assertEquals( 23, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId24() throws Exception
+ {
+ Tuple tlv = decode( "01011000" ) ;
+ assertEquals( 24, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId25() throws Exception
+ {
+ Tuple tlv = decode( "01011001" ) ;
+ assertEquals( 25, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId26() throws Exception
+ {
+ Tuple tlv = decode( "01011010" ) ;
+ assertEquals( 26, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId27() throws Exception
+ {
+ Tuple tlv = decode( "01011011" ) ;
+ assertEquals( 27, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId28() throws Exception
+ {
+ Tuple tlv = decode( "01011100" ) ;
+ assertEquals( 28, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId29() throws Exception
+ {
+ Tuple tlv = decode( "01011101" ) ;
+ assertEquals( 29, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testId30() throws Exception
+ {
+ Tuple tlv = decode( "01011110" ) ;
+ assertEquals( 30, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+
+
+ public void testIdOverLimit() throws Exception
+ {
+ // this is the long form
+ Tuple tlv = decode( "01011111" ) ;
+
+ assertEquals( 0, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( true, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+
+ // state did not switch since we are still reading the long tag
+ assertEquals( BERDecoderState.TAG, decoder.getState() ) ;
+ }
+
+
+ public void testIsConstructed() throws Exception
+ {
+ Tuple tlv = decode( "01111110" ) ;
+ assertEquals( 30, tlv.id ) ;
+ assertEquals( 0, tlvList.size() ) ;
+ assertEquals( false, tlv.isPrimitive ) ;
+ assertEquals( TypeClass.APPLICATION, tlv.typeClass ) ;
+ assertEquals( BERDecoderState.LENGTH, decoder.getState() ) ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTest.java Sun Mar 14 14:02:18 2004
@@ -1,975 +1,975 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import org.apache.commons.lang.ArrayUtils ;
-import org.apache.commons.codec.binary.Binary ;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests Tuple class.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class TupleTest extends TestCase
-{
-
- public static void main(String[] args)
- {
- junit.textui.TestRunner.run(TupleTest.class);
- }
-
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
- }
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
- }
-
- /**
- * Constructor for TupleTest.
- * @param arg0
- */
- public TupleTest(String arg0)
- {
- super(arg0);
- }
-
- /*
- * Class to test for void Tuple()
- */
- public void testTuple()
- {
- assertNotNull( new Tuple() ) ;
- }
-
- /*
- * Class to test for void Tuple(int)
- */
- public void testTupleint()
- {
- Tuple t0 = new Tuple( 0, 0 ) ;
- assertEquals( 0, t0.id ) ;
- Tuple t1 = new Tuple( 1, 0 ) ;
- assertEquals( 1, t1.id ) ;
- assertFalse( t0.equals(t1) ) ;
- }
-
- /*
- * Class to test for void Tuple(int, int)
- */
- public void testTupleintint()
- {
- Tuple t0 = new Tuple( 0, 0 ) ;
- assertEquals( 0, t0.id ) ;
- assertEquals( 0, t0.length ) ;
- Tuple t1 = new Tuple( 0, 1 ) ;
- assertEquals( 0, t1.id ) ;
- assertEquals( 1, t1.length ) ;
- assertFalse( t0.equals(t1) ) ;
- }
-
- /*
- * Class to test for void Tuple(int, int, TypeClass)
- */
- public void testTupleintintTypeClass()
- {
- Tuple t0 = new Tuple( 0, 0, TypeClass.PRIVATE ) ;
- assertEquals( 0, t0.id ) ;
- assertEquals( 0, t0.length ) ;
- assertEquals( TypeClass.PRIVATE, t0.getTypeClass() ) ;
- Tuple t1 = new Tuple( 0, 1, null ) ;
- assertEquals( 0, t1.id ) ;
- assertEquals( 1, t1.length ) ;
- assertFalse( t0.equals(t1) ) ;
- assertEquals( TypeClass.APPLICATION, t1.getTypeClass() ) ;
- }
-
- /*
- * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
- */
- public void testTupleintTypeClassbooleanbyteArray()
- {
- Tuple t = new Tuple( 2, TypeClass.PRIVATE, true,
- ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
- assertEquals( true, t.isPrimitive() ) ;
- assertEquals( 0, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
-
- t = new Tuple( 2, TypeClass.PRIVATE, true, null ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
- assertEquals( true, t.isPrimitive() ) ;
- assertEquals( 0, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
-
- byte[] bites = new byte[7] ;
- t = new Tuple( 2, (TypeClass) null, false, bites ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( false, t.isPrimitive() ) ;
- assertEquals( 7, t.getLength() ) ;
- assertEquals( bites, t.getValue() ) ;
-
- t = new Tuple( 2, null, false, null ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( false, t.isPrimitive() ) ;
- assertEquals( 0, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
- }
-
- /*
- * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
- */
- public void testTupleintbyteArray()
- {
- Tuple t = new Tuple( 2, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( true, t.isPrimitive() ) ;
- assertEquals( 0, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
-
- byte[] bites = new byte[5] ;
- t = new Tuple( 2, bites ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( true, t.isPrimitive() ) ;
- assertEquals( 5, t.getLength() ) ;
- assertEquals( bites, t.getValue() ) ;
- }
-
- /*
- * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
- */
- public void testTupleintbooleanbyteArray()
- {
- Tuple t = new Tuple( 2, false, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( false, t.isPrimitive() ) ;
- assertEquals( 0, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
-
- byte[] bites = new byte[5] ;
- t = new Tuple( 2, false, bites ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( false, t.isPrimitive() ) ;
- assertEquals( 5, t.getLength() ) ;
- assertEquals( bites, t.getValue() ) ;
- }
-
- /*
- * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
- */
- public void testTupleintTypeClass()
- {
- Tuple t = new Tuple( 2, TypeClass.PRIVATE ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
- assertEquals( false, t.isPrimitive() ) ;
- assertEquals( Tuple.INDEFINATE, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
-
- t = new Tuple( 2, (TypeClass) null ) ;
- assertEquals( 2, t.getId() ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- assertEquals( false, t.isPrimitive() ) ;
- assertEquals( Tuple.INDEFINATE, t.getLength() ) ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
- }
-
- public void testGetId()
- {
- Tuple t = new Tuple() ;
- assertEquals( 0, t.getId() ) ;
- t = new Tuple( 2, 0 ) ;
- assertEquals( 2, t.getId() ) ;
- t.id = 21 ;
- assertEquals( 21, t.getId() ) ;
- }
-
-
- public void testSize()
- {
- Tuple t = new Tuple( 1, TypeClass.APPLICATION ) ;
- assertEquals( 2, t.size() ) ;
- t.id = 32 ;
- assertEquals( 3, t.size() ) ;
- t.id = 127 ;
- assertEquals( 3, t.size() ) ;
- t.id = 128 ;
- assertEquals( 4, t.size() ) ;
- t.id = 1 << 14 ;
- assertEquals( 5, t.size() ) ;
- t.id = 1 << 21 ;
- assertEquals( 6, t.size() ) ;
-
- t.length = 127 ;
- assertEquals( 6+127, t.size() ) ;
- t.length = 128 ;
- assertEquals( 7+128, t.size() ) ;
- t.length = 255 ;
- assertEquals( 7+255, t.size() ) ;
- t.length = 256 ;
- assertEquals( 8+256, t.size() ) ;
- }
-
-
- public void testIsIndefinate()
- {
- Tuple t = new Tuple() ;
- assertFalse( t.isIndefinate() ) ;
- t.length = Tuple.INDEFINATE ;
- assertTrue( t.isIndefinate() ) ;
- }
-
-
- public void testIsIndefinateTerminator()
- {
- Tuple t = new Tuple() ;
- assertFalse( t.isIndefinateTerminator() ) ;
- t.id = 0 ;
- t.length = 0 ;
- t.isPrimitive = true ;
- t.typeClass = TypeClass.UNIVERSAL ;
- assertTrue( t.isIndefinateTerminator() ) ;
- }
-
-
- public void testIsPrimitive()
- {
- Tuple t = new Tuple() ;
- assertTrue( t.isPrimitive() ) ;
- t.isPrimitive = false ;
- assertFalse( t.isPrimitive() ) ;
- }
-
- public void testGetLength()
- {
- Tuple t = new Tuple() ;
- assertEquals( 0, t.getLength() ) ;
- t = new Tuple( 1, 2 ) ;
- assertEquals( 2, t.getLength() ) ;
- t.length = 21 ;
- assertEquals( 21, t.getLength() ) ;
- }
-
- public void testGetTypeClass()
- {
- Tuple t = new Tuple() ;
- assertEquals( t.typeClass, TypeClass.APPLICATION ) ;
- t = new Tuple( 0, 0 ) ;
- assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
- t.typeClass = TypeClass.PRIVATE ;
- assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
- }
-
- public void testGetValue()
- {
- Tuple t = new Tuple() ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
- byte[] bites = {1, 2, 3, 45} ;
- t.value = bites ;
- assertEquals( bites, t.getValue() ) ;
- byte[] bites2 = {1, 2, 3, 45} ;
- assertFalse( bites2 == t.getValue() ) ;
- t.clear() ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
- }
-
- public void testClear()
- {
- Tuple t = new Tuple() ;
- t.id = 12 ;
- assertEquals( 12, t.id ) ;
- t.clear() ;
- assertEquals( 0, t.id ) ;
-
- t.length = 12 ;
- assertEquals( 12, t.length ) ;
- t.clear() ;
- assertEquals( Tuple.UNDEFINED, t.length ) ;
-
- t.index = 12 ;
- assertEquals( 12, t.index ) ;
- t.clear() ;
- assertEquals( 0, t.index ) ;
-
- t.isPrimitive = false ;
- assertEquals( false, t.isPrimitive ) ;
- t.clear() ;
- assertEquals( true, t.isPrimitive ) ;
-
- t.typeClass = TypeClass.CONTEXT_SPECIFIC ;
- assertEquals( TypeClass.CONTEXT_SPECIFIC, t.typeClass ) ;
- t.clear() ;
- assertEquals( TypeClass.APPLICATION, t.typeClass ) ;
-
- t.value = new byte[3] ;
- assertNotNull( t.value ) ;
- t.clear() ;
- assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.value ) ;
-
- t.valueIndex = 12 ;
- assertEquals( 12, t.valueIndex ) ;
- t.clear() ;
- assertEquals( Tuple.UNDEFINED, t.valueIndex ) ;
-
- }
-
- /*
- * Class to test for boolean equals(Object)
- */
- public void testEqualsObject()
- {
- Tuple tnull0 = new Tuple() ;
- tnull0.value = null ;
- Tuple tnull1 = new Tuple() ;
- tnull1.value = null ;
- tnull0.equals( tnull1 ) ;
-
- tnull1.equals( tnull1 ) ;
- tnull0.equals( tnull0 ) ;
-
- Tuple t0 = new Tuple() ;
- Tuple t1 = ( Tuple ) t0.clone() ;
-
- assertTrue( t0.equals( t1 ) ) ;
- t0.id = 23 ;
- assertFalse( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- // indices are not taken into account in Tuple.equals(Object)
- t0.index = 23 ;
- t1.index = 33 ;
- assertTrue( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- t0.isPrimitive = false ;
- t1.isPrimitive = true ;
- assertFalse( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- t0.length = 23 ;
- assertFalse( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- t0.typeClass = TypeClass.PRIVATE ;
- t1.typeClass = TypeClass.UNIVERSAL ;
- assertFalse( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- // indices are not taken into account in Tuple.equals(Object)
- t0.valueIndex = 23 ;
- t1.valueIndex = 3 ;
- assertTrue( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- t0.value = new byte[4] ;
- t1.value = null ;
- assertFalse( t0.equals( t1 ) ) ;
- t1 = ( Tuple ) t0.clone() ;
- assertTrue( t0.equals( t1 ) ) ;
-
- assertFalse( t0.equals( new Object() )) ;
- }
-
- /*
- * Class to test for Object clone()
- */
- public void testClone()
- {
- Tuple t = new Tuple() ;
- assertTrue( t.equals( t.clone() ) ) ;
- }
-
- public void testEncodeConstructed()
- {
- Tuple t = null ;
- byte[] encoded ;
- String binary ;
-
- t = new Tuple( 0, 0 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "01100000"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 2, 0 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "01100010"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 30, 0 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "01111110"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 31, 0 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "00011111" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 128, 0 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "00000001" +
- "10000000" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 128, 127 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "01111111" +
- "00000001" +
- "10000000" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 128, 128 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "10000000" +
- "10000001" +
- "00000001" +
- "10000000" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 128, 255 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "11111111" +
- "10000001" +
- "00000001" +
- "10000000" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( 128, 256 ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000001" +
- "00000000" +
- "10000010" +
- "00000001" +
- "10000000" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
-
- t = new Tuple( Tuple.BIT_27-1, Integer.MAX_VALUE ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals( Binary.toAsciiString( Integer.MAX_VALUE ) +
- "10000100" +
- "01111111" +
- "11111111" +
- "11111111" +
- "11111111" +
- "01111111"
- , Binary.toAsciiString( encoded ) ) ;
- }
-
- public void testEncodePrimitive()
- {
- Tuple t = null ;
- byte[] encoded ;
- byte[] data ;
- String binary ;
-
- data = new byte[0] ;
- t = new Tuple( 0, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "01000000"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[0] ;
- t = new Tuple( 2, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "01000010"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[0] ;
- t = new Tuple( 30, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "01011110"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[0] ;
- t = new Tuple( 31, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "00011111" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[0] ;
- t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "00000001" +
- "10000000" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[1] ;
- t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals(
- "00000000" +
- "00000001" +
- "00000001" +
- "10000000" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[127] ;
- t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals( Binary.toAsciiString( data ) +
- "01111111" +
- "00000001" +
- "10000000" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[128] ;
- t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals( Binary.toAsciiString( data ) +
- "10000000" +
- "10000001" +
- "00000001" +
- "10000000" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[255] ;
- t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals( Binary.toAsciiString( data ) +
- "11111111" +
- "10000001" +
- "00000001" +
- "10000000" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
-
- data = new byte[256] ;
- t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
- encoded = t.encode() ;
- binary = Binary.toAsciiString( encoded ) ;
- assertEquals( Binary.toAsciiString( data ) +
- "00000001" +
- "00000000" +
- "10000010" +
- "00000001" +
- "10000000" +
- "01011111"
- , Binary.toAsciiString( encoded ) ) ;
- }
-
- public void testSetTag()
- {
- byte[] bites = new byte[1] ;
- Tuple t = new Tuple( 0, 0 ) ;
- t.setTag( bites, 1 ) ;
- String binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01100000", binary ) ;
-
- bites = new byte[1] ;
- t = new Tuple( 30, 0 ) ;
- t.setTag( bites, 1 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01111110", binary ) ;
-
- bites = new byte[1] ;
- t = new Tuple( 30, 0 ) ;
- t.isPrimitive = true ;
- t.setTag( bites, 1 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01011110", binary ) ;
-
- bites = new byte[2] ;
- t = new Tuple( 31, 0 ) ;
- t.setTag( bites, 2 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00011111" + "01111111", binary ) ;
-
- bites = new byte[2] ;
- t = new Tuple( 127, 0 ) ;
- t.setTag( bites, 2 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01111111" + "01111111", binary ) ;
-
- bites = new byte[3] ;
- t = new Tuple( 128, 0 ) ;
- t.setTag( bites, 3 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" + "10000000" + "01111111", binary ) ;
-
- bites = new byte[3] ;
- t = new Tuple( Tuple.BIT_13 - 1, 0 ) ;
- t.setTag( bites, 3 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01111111" +
- "11111111" +
- "01111111", binary ) ;
-
- bites = new byte[4] ;
- t = new Tuple( Tuple.BIT_13, 0 ) ;
- t.setTag( bites, 4 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "10000000" +
- "10000000" +
- "01111111", binary ) ;
-
- bites = new byte[4] ;
- t = new Tuple( Tuple.BIT_13 + 1, 0 ) ;
- t.setTag( bites, 4 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "10000000" +
- "10000001" +
- "01111111", binary ) ;
-
- bites = new byte[4] ;
- t = new Tuple( Tuple.BIT_20 - 1, 0 ) ;
- t.setTag( bites, 4 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01111111" +
- "11111111" +
- "11111111" +
- "01111111", binary ) ;
-
- bites = new byte[5] ;
- t = new Tuple( Tuple.BIT_20, 0 ) ;
- t.setTag( bites, 5 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "10000000" +
- "10000000" +
- "10000000" +
- "01111111", binary ) ;
-
- bites = new byte[5] ;
- t = new Tuple( Tuple.BIT_20 + 1, 0 ) ;
- t.setTag( bites, 5 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "10000000" +
- "10000000" +
- "10000001" +
- "01111111", binary ) ;
-
- bites = new byte[5] ;
- t = new Tuple( Tuple.BIT_27 - 1, 0 ) ;
- t.setTag( bites, 5 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01111111" +
- "11111111" +
- "11111111" +
- "11111111" +
- "01111111", binary ) ;
-
- bites = new byte[6] ;
- t = new Tuple( Tuple.BIT_27, 0 ) ;
-
- try
- {
- t.setTag( bites, 6 ) ;
- fail( "should never reach this point due to thrown exception" ) ;
- }
- catch( IllegalArgumentException e )
- {
- assertNotNull( e ) ;
- }
- }
-
- public void testSetLength()
- {
- byte[] bites = new byte[1] ;
- Tuple t = new Tuple( 0, 0 ) ;
- t.setLength( bites, 0, 1 ) ;
- String binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000000", binary ) ;
-
- bites = new byte[1] ;
- t = new Tuple( 30, 15 ) ;
- t.setLength( bites, 0, 1 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00001111", binary ) ;
-
- bites = new byte[1] ;
- t = new Tuple( 30, 127 ) ;
- t.setLength( bites, 0, 1 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "01111111", binary ) ;
-
- bites = new byte[2] ;
- t = new Tuple( 30, 128 ) ;
- t.setLength( bites, 0, 2 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "10000000" +
- "10000001", binary ) ;
-
- bites = new byte[2] ;
- t = new Tuple( 30, 255 ) ;
- t.setLength( bites, 0, 2 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "11111111" +
- "10000001", binary ) ;
-
- bites = new byte[3] ;
- t = new Tuple( 30, 256 ) ;
- t.setLength( bites, 0, 3 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "00000000" +
- "10000010", binary ) ;
-
- bites = new byte[3] ;
- t = new Tuple( 30, Tuple.BIT_15 - 1 ) ;
- t.setLength( bites, 0, 3 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "11111111" +
- "11111111" +
- "10000010", binary ) ;
-
- bites = new byte[4] ;
- t = new Tuple( 30, Tuple.BIT_15 ) ;
- t.setLength( bites, 0, 4 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "00000000" +
- "00000000" +
- "10000011", binary ) ;
-
- bites = new byte[4] ;
- t = new Tuple( 30, Tuple.BIT_15 + 1 ) ;
- t.setLength( bites, 0, 4 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "00000000" +
- "00000001" +
- "10000011", binary ) ;
-
- bites = new byte[4] ;
- t = new Tuple( 30, Tuple.BIT_23 - 1 ) ;
- t.setLength( bites, 0, 4 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "11111111" +
- "11111111" +
- "11111111" +
- "10000011", binary ) ;
-
- bites = new byte[5] ;
- t = new Tuple( 30, Tuple.BIT_23 ) ;
- t.setLength( bites, 0, 5 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "00000000" +
- "00000000" +
- "00000000" +
- "10000100", binary ) ;
-
- bites = new byte[5] ;
- t = new Tuple( 30, Tuple.BIT_23 + 1 ) ;
- t.setLength( bites, 0, 5 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( "00000001" +
- "00000000" +
- "00000000" +
- "00000001" +
- "10000100", binary ) ;
-
- bites = new byte[5] ;
- t = new Tuple( 30, Integer.MAX_VALUE ) ;
- t.setLength( bites, 0, 5 ) ;
- t.setLength( bites, 0, 5 ) ;
- binary = Binary.toAsciiString( bites ) ;
- assertEquals( Binary.toAsciiString( Integer.MAX_VALUE ) +
- "10000100", binary ) ;
-
-
- bites = new byte[6] ;
- t = new Tuple( 30, Integer.MAX_VALUE + 1 ) ;
-
- try
- {
- t.setLength( bites, 0, 6 ) ;
- fail( "should never get here due to thrown exception" ) ;
- }
- catch( IllegalArgumentException e )
- {
- assertNotNull( e ) ;
- }
- }
-
- public void testGetTagLength()
- {
- Tuple t = new Tuple() ;
- assertEquals( 1, t.getTagLength() ) ;
- t.id = 30 ;
- assertEquals( 1, t.getTagLength() ) ;
- t.id = 31 ;
- assertEquals( 2, t.getTagLength() ) ;
- t.id = 100 ;
- assertEquals( 2, t.getTagLength() ) ;
- t.id = 127 ;
- assertEquals( 2, t.getTagLength() ) ;
- t.id = 128 ;
- assertEquals( 3, t.getTagLength() ) ;
- t.id = 129 ;
- assertEquals( 3, t.getTagLength() ) ;
-
- t.id = Tuple.BIT_13 - 1 ;
- assertEquals( 3, t.getTagLength() ) ;
- t.id = Tuple.BIT_13 ;
- assertEquals( 4, t.getTagLength() ) ;
- t.id = Tuple.BIT_13 + 100 ;
- assertEquals( 4, t.getTagLength() ) ;
-
- t.id = Tuple.BIT_20 - 1 ;
- assertEquals( 4, t.getTagLength() ) ;
- t.id = Tuple.BIT_20 ;
- assertEquals( 5, t.getTagLength() ) ;
- t.id = Tuple.BIT_20 + 100 ;
- assertEquals( 5, t.getTagLength() ) ;
-
- t.id = Tuple.BIT_27 - 1 ;
- assertEquals( 5, t.getTagLength() ) ;
-
- t.id = Tuple.BIT_27 ;
-
- try
- {
- assertEquals( 6, t.getTagLength() ) ;
- fail( "should throw an exception before getting here" ) ;
- }
- catch( IllegalArgumentException e )
- {
- assertNotNull( e ) ;
- }
- }
-
- public void testGetLengthLength()
- {
- Tuple t = new Tuple() ;
- assertEquals( 1, t.getLengthLength() ) ;
- t.length = 127 ;
- assertEquals( 1, t.getLengthLength() ) ;
- t.length = 128 ;
- assertEquals( 2, t.getLengthLength() ) ;
- t.length = 255 ;
- assertEquals( 2, t.getLengthLength() ) ;
- t.length = 256 ;
- assertEquals( 3, t.getLengthLength() ) ;
-
- t.length = Tuple.BIT_15 - 1 ;
- assertEquals( 3, t.getLengthLength() ) ;
- t.length = Tuple.BIT_15 ;
- assertEquals( 4, t.getLengthLength() ) ;
- t.length = Tuple.BIT_15 + 100 ;
- assertEquals( 4, t.getLengthLength() ) ;
-
- t.length = Tuple.BIT_23 - 1 ;
- assertEquals( 4, t.getLengthLength() ) ;
- t.length = Tuple.BIT_23 ;
- assertEquals( 5, t.getLengthLength() ) ;
- t.length = Tuple.BIT_23 + 100 ;
- assertEquals( 5, t.getLengthLength() ) ;
-
- t.length = Integer.MAX_VALUE ;
- assertEquals( 5, t.getLengthLength() ) ;
-
-
- t.length = Integer.MAX_VALUE + 1 ;
- try
- {
- assertEquals( 6, t.getLengthLength() ) ;
- fail( "should throw an exception before getting here" ) ;
- }
- catch( IllegalArgumentException e )
- {
- assertNotNull( e ) ;
- }
-
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import org.apache.commons.lang.ArrayUtils ;
+import org.apache.commons.codec.binary.Binary ;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests Tuple class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TupleTest extends TestCase
+{
+
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.run(TupleTest.class);
+ }
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Constructor for TupleTest.
+ * @param arg0
+ */
+ public TupleTest(String arg0)
+ {
+ super(arg0);
+ }
+
+ /*
+ * Class to test for void Tuple()
+ */
+ public void testTuple()
+ {
+ assertNotNull( new Tuple() ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int)
+ */
+ public void testTupleint()
+ {
+ Tuple t0 = new Tuple( 0, 0 ) ;
+ assertEquals( 0, t0.id ) ;
+ Tuple t1 = new Tuple( 1, 0 ) ;
+ assertEquals( 1, t1.id ) ;
+ assertFalse( t0.equals(t1) ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int, int)
+ */
+ public void testTupleintint()
+ {
+ Tuple t0 = new Tuple( 0, 0 ) ;
+ assertEquals( 0, t0.id ) ;
+ assertEquals( 0, t0.length ) ;
+ Tuple t1 = new Tuple( 0, 1 ) ;
+ assertEquals( 0, t1.id ) ;
+ assertEquals( 1, t1.length ) ;
+ assertFalse( t0.equals(t1) ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int, int, TypeClass)
+ */
+ public void testTupleintintTypeClass()
+ {
+ Tuple t0 = new Tuple( 0, 0, TypeClass.PRIVATE ) ;
+ assertEquals( 0, t0.id ) ;
+ assertEquals( 0, t0.length ) ;
+ assertEquals( TypeClass.PRIVATE, t0.getTypeClass() ) ;
+ Tuple t1 = new Tuple( 0, 1, null ) ;
+ assertEquals( 0, t1.id ) ;
+ assertEquals( 1, t1.length ) ;
+ assertFalse( t0.equals(t1) ) ;
+ assertEquals( TypeClass.APPLICATION, t1.getTypeClass() ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
+ */
+ public void testTupleintTypeClassbooleanbyteArray()
+ {
+ Tuple t = new Tuple( 2, TypeClass.PRIVATE, true,
+ ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
+ assertEquals( true, t.isPrimitive() ) ;
+ assertEquals( 0, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+
+ t = new Tuple( 2, TypeClass.PRIVATE, true, null ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
+ assertEquals( true, t.isPrimitive() ) ;
+ assertEquals( 0, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+
+ byte[] bites = new byte[7] ;
+ t = new Tuple( 2, (TypeClass) null, false, bites ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( false, t.isPrimitive() ) ;
+ assertEquals( 7, t.getLength() ) ;
+ assertEquals( bites, t.getValue() ) ;
+
+ t = new Tuple( 2, null, false, null ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( false, t.isPrimitive() ) ;
+ assertEquals( 0, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
+ */
+ public void testTupleintbyteArray()
+ {
+ Tuple t = new Tuple( 2, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( true, t.isPrimitive() ) ;
+ assertEquals( 0, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+
+ byte[] bites = new byte[5] ;
+ t = new Tuple( 2, bites ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( true, t.isPrimitive() ) ;
+ assertEquals( 5, t.getLength() ) ;
+ assertEquals( bites, t.getValue() ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
+ */
+ public void testTupleintbooleanbyteArray()
+ {
+ Tuple t = new Tuple( 2, false, ArrayUtils.EMPTY_BYTE_ARRAY ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( false, t.isPrimitive() ) ;
+ assertEquals( 0, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+
+ byte[] bites = new byte[5] ;
+ t = new Tuple( 2, false, bites ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( false, t.isPrimitive() ) ;
+ assertEquals( 5, t.getLength() ) ;
+ assertEquals( bites, t.getValue() ) ;
+ }
+
+ /*
+ * Class to test for void Tuple(int, int, TypeClass, boolean, byte[])
+ */
+ public void testTupleintTypeClass()
+ {
+ Tuple t = new Tuple( 2, TypeClass.PRIVATE ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
+ assertEquals( false, t.isPrimitive() ) ;
+ assertEquals( Tuple.INDEFINATE, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+
+ t = new Tuple( 2, (TypeClass) null ) ;
+ assertEquals( 2, t.getId() ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ assertEquals( false, t.isPrimitive() ) ;
+ assertEquals( Tuple.INDEFINATE, t.getLength() ) ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+ }
+
+ public void testGetId()
+ {
+ Tuple t = new Tuple() ;
+ assertEquals( 0, t.getId() ) ;
+ t = new Tuple( 2, 0 ) ;
+ assertEquals( 2, t.getId() ) ;
+ t.id = 21 ;
+ assertEquals( 21, t.getId() ) ;
+ }
+
+
+ public void testSize()
+ {
+ Tuple t = new Tuple( 1, TypeClass.APPLICATION ) ;
+ assertEquals( 2, t.size() ) ;
+ t.id = 32 ;
+ assertEquals( 3, t.size() ) ;
+ t.id = 127 ;
+ assertEquals( 3, t.size() ) ;
+ t.id = 128 ;
+ assertEquals( 4, t.size() ) ;
+ t.id = 1 << 14 ;
+ assertEquals( 5, t.size() ) ;
+ t.id = 1 << 21 ;
+ assertEquals( 6, t.size() ) ;
+
+ t.length = 127 ;
+ assertEquals( 6+127, t.size() ) ;
+ t.length = 128 ;
+ assertEquals( 7+128, t.size() ) ;
+ t.length = 255 ;
+ assertEquals( 7+255, t.size() ) ;
+ t.length = 256 ;
+ assertEquals( 8+256, t.size() ) ;
+ }
+
+
+ public void testIsIndefinate()
+ {
+ Tuple t = new Tuple() ;
+ assertFalse( t.isIndefinate() ) ;
+ t.length = Tuple.INDEFINATE ;
+ assertTrue( t.isIndefinate() ) ;
+ }
+
+
+ public void testIsIndefinateTerminator()
+ {
+ Tuple t = new Tuple() ;
+ assertFalse( t.isIndefinateTerminator() ) ;
+ t.id = 0 ;
+ t.length = 0 ;
+ t.isPrimitive = true ;
+ t.typeClass = TypeClass.UNIVERSAL ;
+ assertTrue( t.isIndefinateTerminator() ) ;
+ }
+
+
+ public void testIsPrimitive()
+ {
+ Tuple t = new Tuple() ;
+ assertTrue( t.isPrimitive() ) ;
+ t.isPrimitive = false ;
+ assertFalse( t.isPrimitive() ) ;
+ }
+
+ public void testGetLength()
+ {
+ Tuple t = new Tuple() ;
+ assertEquals( 0, t.getLength() ) ;
+ t = new Tuple( 1, 2 ) ;
+ assertEquals( 2, t.getLength() ) ;
+ t.length = 21 ;
+ assertEquals( 21, t.getLength() ) ;
+ }
+
+ public void testGetTypeClass()
+ {
+ Tuple t = new Tuple() ;
+ assertEquals( t.typeClass, TypeClass.APPLICATION ) ;
+ t = new Tuple( 0, 0 ) ;
+ assertEquals( TypeClass.APPLICATION, t.getTypeClass() ) ;
+ t.typeClass = TypeClass.PRIVATE ;
+ assertEquals( TypeClass.PRIVATE, t.getTypeClass() ) ;
+ }
+
+ public void testGetValue()
+ {
+ Tuple t = new Tuple() ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+ byte[] bites = {1, 2, 3, 45} ;
+ t.value = bites ;
+ assertEquals( bites, t.getValue() ) ;
+ byte[] bites2 = {1, 2, 3, 45} ;
+ assertFalse( bites2 == t.getValue() ) ;
+ t.clear() ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.getValue() ) ;
+ }
+
+ public void testClear()
+ {
+ Tuple t = new Tuple() ;
+ t.id = 12 ;
+ assertEquals( 12, t.id ) ;
+ t.clear() ;
+ assertEquals( 0, t.id ) ;
+
+ t.length = 12 ;
+ assertEquals( 12, t.length ) ;
+ t.clear() ;
+ assertEquals( Tuple.UNDEFINED, t.length ) ;
+
+ t.index = 12 ;
+ assertEquals( 12, t.index ) ;
+ t.clear() ;
+ assertEquals( 0, t.index ) ;
+
+ t.isPrimitive = false ;
+ assertEquals( false, t.isPrimitive ) ;
+ t.clear() ;
+ assertEquals( true, t.isPrimitive ) ;
+
+ t.typeClass = TypeClass.CONTEXT_SPECIFIC ;
+ assertEquals( TypeClass.CONTEXT_SPECIFIC, t.typeClass ) ;
+ t.clear() ;
+ assertEquals( TypeClass.APPLICATION, t.typeClass ) ;
+
+ t.value = new byte[3] ;
+ assertNotNull( t.value ) ;
+ t.clear() ;
+ assertEquals( ArrayUtils.EMPTY_BYTE_ARRAY, t.value ) ;
+
+ t.valueIndex = 12 ;
+ assertEquals( 12, t.valueIndex ) ;
+ t.clear() ;
+ assertEquals( Tuple.UNDEFINED, t.valueIndex ) ;
+
+ }
+
+ /*
+ * Class to test for boolean equals(Object)
+ */
+ public void testEqualsObject()
+ {
+ Tuple tnull0 = new Tuple() ;
+ tnull0.value = null ;
+ Tuple tnull1 = new Tuple() ;
+ tnull1.value = null ;
+ tnull0.equals( tnull1 ) ;
+
+ tnull1.equals( tnull1 ) ;
+ tnull0.equals( tnull0 ) ;
+
+ Tuple t0 = new Tuple() ;
+ Tuple t1 = ( Tuple ) t0.clone() ;
+
+ assertTrue( t0.equals( t1 ) ) ;
+ t0.id = 23 ;
+ assertFalse( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ // indices are not taken into account in Tuple.equals(Object)
+ t0.index = 23 ;
+ t1.index = 33 ;
+ assertTrue( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ t0.isPrimitive = false ;
+ t1.isPrimitive = true ;
+ assertFalse( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ t0.length = 23 ;
+ assertFalse( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ t0.typeClass = TypeClass.PRIVATE ;
+ t1.typeClass = TypeClass.UNIVERSAL ;
+ assertFalse( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ // indices are not taken into account in Tuple.equals(Object)
+ t0.valueIndex = 23 ;
+ t1.valueIndex = 3 ;
+ assertTrue( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ t0.value = new byte[4] ;
+ t1.value = null ;
+ assertFalse( t0.equals( t1 ) ) ;
+ t1 = ( Tuple ) t0.clone() ;
+ assertTrue( t0.equals( t1 ) ) ;
+
+ assertFalse( t0.equals( new Object() )) ;
+ }
+
+ /*
+ * Class to test for Object clone()
+ */
+ public void testClone()
+ {
+ Tuple t = new Tuple() ;
+ assertTrue( t.equals( t.clone() ) ) ;
+ }
+
+ public void testEncodeConstructed()
+ {
+ Tuple t = null ;
+ byte[] encoded ;
+ String binary ;
+
+ t = new Tuple( 0, 0 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "01100000"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 2, 0 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "01100010"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 30, 0 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "01111110"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 31, 0 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "00011111" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 128, 0 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "00000001" +
+ "10000000" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 128, 127 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "01111111" +
+ "00000001" +
+ "10000000" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 128, 128 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "10000000" +
+ "10000001" +
+ "00000001" +
+ "10000000" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 128, 255 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "11111111" +
+ "10000001" +
+ "00000001" +
+ "10000000" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( 128, 256 ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000001" +
+ "00000000" +
+ "10000010" +
+ "00000001" +
+ "10000000" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ t = new Tuple( Tuple.BIT_27-1, Integer.MAX_VALUE ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals( Binary.toAsciiString( Integer.MAX_VALUE ) +
+ "10000100" +
+ "01111111" +
+ "11111111" +
+ "11111111" +
+ "11111111" +
+ "01111111"
+ , Binary.toAsciiString( encoded ) ) ;
+ }
+
+ public void testEncodePrimitive()
+ {
+ Tuple t = null ;
+ byte[] encoded ;
+ byte[] data ;
+ String binary ;
+
+ data = new byte[0] ;
+ t = new Tuple( 0, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "01000000"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[0] ;
+ t = new Tuple( 2, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "01000010"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[0] ;
+ t = new Tuple( 30, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "01011110"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[0] ;
+ t = new Tuple( 31, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "00011111" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[0] ;
+ t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "00000001" +
+ "10000000" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[1] ;
+ t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals(
+ "00000000" +
+ "00000001" +
+ "00000001" +
+ "10000000" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[127] ;
+ t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals( Binary.toAsciiString( data ) +
+ "01111111" +
+ "00000001" +
+ "10000000" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[128] ;
+ t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals( Binary.toAsciiString( data ) +
+ "10000000" +
+ "10000001" +
+ "00000001" +
+ "10000000" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[255] ;
+ t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals( Binary.toAsciiString( data ) +
+ "11111111" +
+ "10000001" +
+ "00000001" +
+ "10000000" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+
+ data = new byte[256] ;
+ t = new Tuple( 128, TypeClass.APPLICATION, true, data ) ;
+ encoded = t.encode() ;
+ binary = Binary.toAsciiString( encoded ) ;
+ assertEquals( Binary.toAsciiString( data ) +
+ "00000001" +
+ "00000000" +
+ "10000010" +
+ "00000001" +
+ "10000000" +
+ "01011111"
+ , Binary.toAsciiString( encoded ) ) ;
+ }
+
+ public void testSetTag()
+ {
+ byte[] bites = new byte[1] ;
+ Tuple t = new Tuple( 0, 0 ) ;
+ t.setTag( bites, 1 ) ;
+ String binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01100000", binary ) ;
+
+ bites = new byte[1] ;
+ t = new Tuple( 30, 0 ) ;
+ t.setTag( bites, 1 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01111110", binary ) ;
+
+ bites = new byte[1] ;
+ t = new Tuple( 30, 0 ) ;
+ t.isPrimitive = true ;
+ t.setTag( bites, 1 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01011110", binary ) ;
+
+ bites = new byte[2] ;
+ t = new Tuple( 31, 0 ) ;
+ t.setTag( bites, 2 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00011111" + "01111111", binary ) ;
+
+ bites = new byte[2] ;
+ t = new Tuple( 127, 0 ) ;
+ t.setTag( bites, 2 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01111111" + "01111111", binary ) ;
+
+ bites = new byte[3] ;
+ t = new Tuple( 128, 0 ) ;
+ t.setTag( bites, 3 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" + "10000000" + "01111111", binary ) ;
+
+ bites = new byte[3] ;
+ t = new Tuple( Tuple.BIT_13 - 1, 0 ) ;
+ t.setTag( bites, 3 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01111111" +
+ "11111111" +
+ "01111111", binary ) ;
+
+ bites = new byte[4] ;
+ t = new Tuple( Tuple.BIT_13, 0 ) ;
+ t.setTag( bites, 4 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "10000000" +
+ "10000000" +
+ "01111111", binary ) ;
+
+ bites = new byte[4] ;
+ t = new Tuple( Tuple.BIT_13 + 1, 0 ) ;
+ t.setTag( bites, 4 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "10000000" +
+ "10000001" +
+ "01111111", binary ) ;
+
+ bites = new byte[4] ;
+ t = new Tuple( Tuple.BIT_20 - 1, 0 ) ;
+ t.setTag( bites, 4 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01111111" +
+ "11111111" +
+ "11111111" +
+ "01111111", binary ) ;
+
+ bites = new byte[5] ;
+ t = new Tuple( Tuple.BIT_20, 0 ) ;
+ t.setTag( bites, 5 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "10000000" +
+ "10000000" +
+ "10000000" +
+ "01111111", binary ) ;
+
+ bites = new byte[5] ;
+ t = new Tuple( Tuple.BIT_20 + 1, 0 ) ;
+ t.setTag( bites, 5 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "10000000" +
+ "10000000" +
+ "10000001" +
+ "01111111", binary ) ;
+
+ bites = new byte[5] ;
+ t = new Tuple( Tuple.BIT_27 - 1, 0 ) ;
+ t.setTag( bites, 5 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01111111" +
+ "11111111" +
+ "11111111" +
+ "11111111" +
+ "01111111", binary ) ;
+
+ bites = new byte[6] ;
+ t = new Tuple( Tuple.BIT_27, 0 ) ;
+
+ try
+ {
+ t.setTag( bites, 6 ) ;
+ fail( "should never reach this point due to thrown exception" ) ;
+ }
+ catch( IllegalArgumentException e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ public void testSetLength()
+ {
+ byte[] bites = new byte[1] ;
+ Tuple t = new Tuple( 0, 0 ) ;
+ t.setLength( bites, 0, 1 ) ;
+ String binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000000", binary ) ;
+
+ bites = new byte[1] ;
+ t = new Tuple( 30, 15 ) ;
+ t.setLength( bites, 0, 1 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00001111", binary ) ;
+
+ bites = new byte[1] ;
+ t = new Tuple( 30, 127 ) ;
+ t.setLength( bites, 0, 1 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "01111111", binary ) ;
+
+ bites = new byte[2] ;
+ t = new Tuple( 30, 128 ) ;
+ t.setLength( bites, 0, 2 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "10000000" +
+ "10000001", binary ) ;
+
+ bites = new byte[2] ;
+ t = new Tuple( 30, 255 ) ;
+ t.setLength( bites, 0, 2 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "11111111" +
+ "10000001", binary ) ;
+
+ bites = new byte[3] ;
+ t = new Tuple( 30, 256 ) ;
+ t.setLength( bites, 0, 3 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "00000000" +
+ "10000010", binary ) ;
+
+ bites = new byte[3] ;
+ t = new Tuple( 30, Tuple.BIT_15 - 1 ) ;
+ t.setLength( bites, 0, 3 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "11111111" +
+ "11111111" +
+ "10000010", binary ) ;
+
+ bites = new byte[4] ;
+ t = new Tuple( 30, Tuple.BIT_15 ) ;
+ t.setLength( bites, 0, 4 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "00000000" +
+ "00000000" +
+ "10000011", binary ) ;
+
+ bites = new byte[4] ;
+ t = new Tuple( 30, Tuple.BIT_15 + 1 ) ;
+ t.setLength( bites, 0, 4 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "00000000" +
+ "00000001" +
+ "10000011", binary ) ;
+
+ bites = new byte[4] ;
+ t = new Tuple( 30, Tuple.BIT_23 - 1 ) ;
+ t.setLength( bites, 0, 4 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "11111111" +
+ "11111111" +
+ "11111111" +
+ "10000011", binary ) ;
+
+ bites = new byte[5] ;
+ t = new Tuple( 30, Tuple.BIT_23 ) ;
+ t.setLength( bites, 0, 5 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "00000000" +
+ "00000000" +
+ "00000000" +
+ "10000100", binary ) ;
+
+ bites = new byte[5] ;
+ t = new Tuple( 30, Tuple.BIT_23 + 1 ) ;
+ t.setLength( bites, 0, 5 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( "00000001" +
+ "00000000" +
+ "00000000" +
+ "00000001" +
+ "10000100", binary ) ;
+
+ bites = new byte[5] ;
+ t = new Tuple( 30, Integer.MAX_VALUE ) ;
+ t.setLength( bites, 0, 5 ) ;
+ t.setLength( bites, 0, 5 ) ;
+ binary = Binary.toAsciiString( bites ) ;
+ assertEquals( Binary.toAsciiString( Integer.MAX_VALUE ) +
+ "10000100", binary ) ;
+
+
+ bites = new byte[6] ;
+ t = new Tuple( 30, Integer.MAX_VALUE + 1 ) ;
+
+ try
+ {
+ t.setLength( bites, 0, 6 ) ;
+ fail( "should never get here due to thrown exception" ) ;
+ }
+ catch( IllegalArgumentException e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ public void testGetTagLength()
+ {
+ Tuple t = new Tuple() ;
+ assertEquals( 1, t.getTagLength() ) ;
+ t.id = 30 ;
+ assertEquals( 1, t.getTagLength() ) ;
+ t.id = 31 ;
+ assertEquals( 2, t.getTagLength() ) ;
+ t.id = 100 ;
+ assertEquals( 2, t.getTagLength() ) ;
+ t.id = 127 ;
+ assertEquals( 2, t.getTagLength() ) ;
+ t.id = 128 ;
+ assertEquals( 3, t.getTagLength() ) ;
+ t.id = 129 ;
+ assertEquals( 3, t.getTagLength() ) ;
+
+ t.id = Tuple.BIT_13 - 1 ;
+ assertEquals( 3, t.getTagLength() ) ;
+ t.id = Tuple.BIT_13 ;
+ assertEquals( 4, t.getTagLength() ) ;
+ t.id = Tuple.BIT_13 + 100 ;
+ assertEquals( 4, t.getTagLength() ) ;
+
+ t.id = Tuple.BIT_20 - 1 ;
+ assertEquals( 4, t.getTagLength() ) ;
+ t.id = Tuple.BIT_20 ;
+ assertEquals( 5, t.getTagLength() ) ;
+ t.id = Tuple.BIT_20 + 100 ;
+ assertEquals( 5, t.getTagLength() ) ;
+
+ t.id = Tuple.BIT_27 - 1 ;
+ assertEquals( 5, t.getTagLength() ) ;
+
+ t.id = Tuple.BIT_27 ;
+
+ try
+ {
+ assertEquals( 6, t.getTagLength() ) ;
+ fail( "should throw an exception before getting here" ) ;
+ }
+ catch( IllegalArgumentException e )
+ {
+ assertNotNull( e ) ;
+ }
+ }
+
+ public void testGetLengthLength()
+ {
+ Tuple t = new Tuple() ;
+ assertEquals( 1, t.getLengthLength() ) ;
+ t.length = 127 ;
+ assertEquals( 1, t.getLengthLength() ) ;
+ t.length = 128 ;
+ assertEquals( 2, t.getLengthLength() ) ;
+ t.length = 255 ;
+ assertEquals( 2, t.getLengthLength() ) ;
+ t.length = 256 ;
+ assertEquals( 3, t.getLengthLength() ) ;
+
+ t.length = Tuple.BIT_15 - 1 ;
+ assertEquals( 3, t.getLengthLength() ) ;
+ t.length = Tuple.BIT_15 ;
+ assertEquals( 4, t.getLengthLength() ) ;
+ t.length = Tuple.BIT_15 + 100 ;
+ assertEquals( 4, t.getLengthLength() ) ;
+
+ t.length = Tuple.BIT_23 - 1 ;
+ assertEquals( 4, t.getLengthLength() ) ;
+ t.length = Tuple.BIT_23 ;
+ assertEquals( 5, t.getLengthLength() ) ;
+ t.length = Tuple.BIT_23 + 100 ;
+ assertEquals( 5, t.getLengthLength() ) ;
+
+ t.length = Integer.MAX_VALUE ;
+ assertEquals( 5, t.getLengthLength() ) ;
+
+
+ t.length = Integer.MAX_VALUE + 1 ;
+ try
+ {
+ assertEquals( 6, t.getLengthLength() ) ;
+ fail( "should throw an exception before getting here" ) ;
+ }
+ catch( IllegalArgumentException e )
+ {
+ assertNotNull( e ) ;
+ }
+
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTreeDecoderTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTreeDecoderTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TupleTreeDecoderTest.java Sun Mar 14 14:02:18 2004
@@ -1,115 +1,115 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.io.ByteArrayOutputStream ;
-
-import java.math.BigInteger ;
-
-import java.nio.ByteBuffer ;
-
-import org.apache.commons.codec.stateful.DecoderCallback ;
-import org.apache.commons.codec.stateful.DecoderMonitorAdapter;
-import org.apache.commons.codec.stateful.StatefulDecoder ;
-
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.commons.lang.time.StopWatch ;
-
-import org.apache.ldap.common.message.MessageEncoder ;
-import org.apache.ldap.common.message.BindRequestImpl ;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests the TupleTreeDecoder.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class TupleTreeDecoderTest extends TestCase implements DecoderCallback
-{
- DefaultMutableTupleNode root = null ;
-
- public static void main( String[] args)
- {
- TupleTreeDecoderTest test = new TupleTreeDecoderTest() ;
-
- try { test.testTTD() ; } catch ( Exception e ) { e.printStackTrace() ; }
- }
-
- public void testSetMonitor()
- {
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.setDecoderMonitor( null ) ;
- decoder.setDecoderMonitor( new DecoderMonitorAdapter() ) ;
- }
-
-
- public void testTTD2() throws Exception
- {
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.handleTuple(new Tuple( 1, ArrayUtils.EMPTY_BYTE_ARRAY )) ;
- decoder.decode( ByteBuffer.wrap( new Tuple( 1,
- ArrayUtils.EMPTY_BYTE_ARRAY ).encode() ) ) ;
- }
-
- public void testTTD() throws Exception
- {
- ByteArrayOutputStream out = new ByteArrayOutputStream() ;
-
- // Setup the bind request
- BindRequestImpl l_request = new BindRequestImpl( BigInteger.ONE ) ;
- l_request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
- l_request.setSimple( true ) ;
- l_request.setCredentials( "password".getBytes() ) ;
- l_request.setVersion3( true ) ;
-
- // Setup the ASN1 Enoder
- MessageEncoder l_encoder = new MessageEncoder();
-
- // Send encoded request to server
- l_encoder.encode( null, out, l_request );
-
- StopWatch watch = new StopWatch() ;
- watch.start() ;
- TupleTreeDecoder decoder = new TupleTreeDecoder() ;
- decoder.setCallback( this ) ;
- decoder.decode( ByteBuffer.wrap( out.toByteArray() ) ) ;
- watch.stop() ;
- System.out.println( "time for decode = " + watch.getTime() ) ;
-
- StringBuffer buf = new StringBuffer() ;
- root.printDepthFirst( buf, 0 ) ;
- System.out.println( "tuple tlv tree =\n" + buf.toString() ) ;
- TupleTreeAnalyzer analyzer = new TupleTreeAnalyzer( root ) ;
- analyzer.startup() ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderCallback#
- * decodeOccurred(org.apache.commons.codec.stateful.StatefulDecoder,
- * java.lang.Object)
- */
- public void decodeOccurred( StatefulDecoder decoder, Object decoded )
- {
- root = ( DefaultMutableTupleNode ) decoded ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.io.ByteArrayOutputStream ;
+
+import java.math.BigInteger ;
+
+import java.nio.ByteBuffer ;
+
+import org.apache.commons.codec.stateful.DecoderCallback ;
+import org.apache.commons.codec.stateful.DecoderMonitorAdapter;
+import org.apache.commons.codec.stateful.StatefulDecoder ;
+
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.time.StopWatch ;
+
+import org.apache.ldap.common.message.MessageEncoder ;
+import org.apache.ldap.common.message.BindRequestImpl ;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests the TupleTreeDecoder.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TupleTreeDecoderTest extends TestCase implements DecoderCallback
+{
+ DefaultMutableTupleNode root = null ;
+
+ public static void main( String[] args)
+ {
+ TupleTreeDecoderTest test = new TupleTreeDecoderTest() ;
+
+ try { test.testTTD() ; } catch ( Exception e ) { e.printStackTrace() ; }
+ }
+
+ public void testSetMonitor()
+ {
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.setDecoderMonitor( null ) ;
+ decoder.setDecoderMonitor( new DecoderMonitorAdapter() ) ;
+ }
+
+
+ public void testTTD2() throws Exception
+ {
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.handleTuple(new Tuple( 1, ArrayUtils.EMPTY_BYTE_ARRAY )) ;
+ decoder.decode( ByteBuffer.wrap( new Tuple( 1,
+ ArrayUtils.EMPTY_BYTE_ARRAY ).encode() ) ) ;
+ }
+
+ public void testTTD() throws Exception
+ {
+ ByteArrayOutputStream out = new ByteArrayOutputStream() ;
+
+ // Setup the bind request
+ BindRequestImpl l_request = new BindRequestImpl( BigInteger.ONE ) ;
+ l_request.setName( "uid=akarasulu,dc=example,dc=com" ) ;
+ l_request.setSimple( true ) ;
+ l_request.setCredentials( "password".getBytes() ) ;
+ l_request.setVersion3( true ) ;
+
+ // Setup the ASN1 Enoder
+ MessageEncoder l_encoder = new MessageEncoder();
+
+ // Send encoded request to server
+ l_encoder.encode( null, out, l_request );
+
+ StopWatch watch = new StopWatch() ;
+ watch.start() ;
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ decoder.setCallback( this ) ;
+ decoder.decode( ByteBuffer.wrap( out.toByteArray() ) ) ;
+ watch.stop() ;
+ System.out.println( "time for decode = " + watch.getTime() ) ;
+
+ StringBuffer buf = new StringBuffer() ;
+ root.printDepthFirst( buf, 0 ) ;
+ System.out.println( "tuple tlv tree =\n" + buf.toString() ) ;
+ TupleTreeAnalyzer analyzer = new TupleTreeAnalyzer( root ) ;
+ analyzer.startup() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderCallback#
+ * decodeOccurred(org.apache.commons.codec.stateful.StatefulDecoder,
+ * java.lang.Object)
+ */
+ public void decodeOccurred( StatefulDecoder decoder, Object decoded )
+ {
+ root = ( DefaultMutableTupleNode ) decoded ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TypeClassTest.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TypeClassTest.java (original)
+++ incubator/directory/snickers/branches/refactoring/ber/src/test/org/apache/snickers/ber/TypeClassTest.java Sun Mar 14 14:02:18 2004
@@ -1,146 +1,146 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.snickers.ber ;
-
-
-import java.util.List;
-import java.util.Map;
-
-import junit.framework.TestCase ;
-
-
-/**
- * Tests TypeClass class.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class TypeClassTest extends TestCase
-{
-
- public static void main(String[] args)
- {
- junit.textui.TestRunner.run(TypeClassTest.class);
- }
-
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
- }
-
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
- }
-
- /**
- * Constructor for TypeClassTest.
- * @param arg0
- */
- public TypeClassTest(String arg0)
- {
- super(arg0);
- }
-
- /*
- * Class to test for TypeClass getTypeClass(String)
- */
- public void testGetTypeClassString()
- {
- assertEquals( TypeClass.APPLICATION, TypeClass.getTypeClass(
- TypeClass.APPLICATION.getName() ) ) ;
- assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass(
- TypeClass.UNIVERSAL.getName() ) ) ;
- assertEquals( TypeClass.PRIVATE, TypeClass.getTypeClass(
- TypeClass.PRIVATE.getName() ) ) ;
- assertEquals( TypeClass.CONTEXT_SPECIFIC, TypeClass.getTypeClass(
- TypeClass.CONTEXT_SPECIFIC.getName() ) ) ;
-
- assertEquals( TypeClass.APPLICATION, TypeClass.getTypeClass(
- "application") ) ;
- assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass(
- "Universal" ) ) ;
- assertEquals( TypeClass.PRIVATE, TypeClass.getTypeClass(
- "PRivatE" ) ) ;
- assertEquals( TypeClass.CONTEXT_SPECIFIC, TypeClass.getTypeClass(
- "context_specific" ) ) ;
-
- try
- {
- TypeClass.getTypeClass( "asdf" ) ;
- fail( "exception should prevent this failure" ) ;
- }
- catch ( Throwable t )
- {
- assertNotNull( t ) ;
- }
- }
-
- public void testList()
- {
- List list = TypeClass.list() ;
- assertNotNull( list ) ;
- assertEquals( 4, list.size() ) ;
- assertTrue( list.contains( TypeClass.PRIVATE ) ) ;
- assertTrue( list.contains( TypeClass.UNIVERSAL ) ) ;
- assertTrue( list.contains( TypeClass.APPLICATION ) ) ;
- assertTrue( list.contains( TypeClass.CONTEXT_SPECIFIC ) ) ;
- }
-
- public void testMap()
- {
- Map map = TypeClass.map() ;
- assertNotNull( map ) ;
- assertEquals( 4, map.size() ) ;
- assertTrue( map.containsKey( TypeClass.PRIVATE.getName() ) ) ;
- assertTrue( map.containsKey( TypeClass.UNIVERSAL.getName() ) ) ;
- assertTrue( map.containsKey( TypeClass.APPLICATION.getName() ) ) ;
- assertTrue( map.containsKey( TypeClass.CONTEXT_SPECIFIC.getName() ) ) ;
- }
-
- /*
- * Class to test for TypeClass getTypeClass(int)
- */
- public void testGetTypeClassint()
- {
- assertEquals( TypeClass.APPLICATION, TypeClass.getTypeClass(
- TypeClass.APPLICATION_VAL ) ) ;
- assertEquals( TypeClass.PRIVATE, TypeClass.getTypeClass(
- TypeClass.PRIVATE_VAL ) ) ;
- assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass(
- TypeClass.UNIVERSAL_VAL ) ) ;
- assertEquals( TypeClass.CONTEXT_SPECIFIC, TypeClass.getTypeClass(
- TypeClass.CONTEXT_SPECIFIC_VAL ) ) ;
-
- try
- {
- TypeClass.getTypeClass( 35 ) ;
- fail( "exception should prevent this failure" ) ;
- }
- catch( Throwable t )
- {
- assertNotNull( t ) ;
- }
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.snickers.ber ;
+
+
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase ;
+
+
+/**
+ * Tests TypeClass class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class TypeClassTest extends TestCase
+{
+
+ public static void main(String[] args)
+ {
+ junit.textui.TestRunner.run(TypeClassTest.class);
+ }
+
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ }
+
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception
+ {
+ super.tearDown();
+ }
+
+ /**
+ * Constructor for TypeClassTest.
+ * @param arg0
+ */
+ public TypeClassTest(String arg0)
+ {
+ super(arg0);
+ }
+
+ /*
+ * Class to test for TypeClass getTypeClass(String)
+ */
+ public void testGetTypeClassString()
+ {
+ assertEquals( TypeClass.APPLICATION, TypeClass.getTypeClass(
+ TypeClass.APPLICATION.getName() ) ) ;
+ assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass(
+ TypeClass.UNIVERSAL.getName() ) ) ;
+ assertEquals( TypeClass.PRIVATE, TypeClass.getTypeClass(
+ TypeClass.PRIVATE.getName() ) ) ;
+ assertEquals( TypeClass.CONTEXT_SPECIFIC, TypeClass.getTypeClass(
+ TypeClass.CONTEXT_SPECIFIC.getName() ) ) ;
+
+ assertEquals( TypeClass.APPLICATION, TypeClass.getTypeClass(
+ "application") ) ;
+ assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass(
+ "Universal" ) ) ;
+ assertEquals( TypeClass.PRIVATE, TypeClass.getTypeClass(
+ "PRivatE" ) ) ;
+ assertEquals( TypeClass.CONTEXT_SPECIFIC, TypeClass.getTypeClass(
+ "context_specific" ) ) ;
+
+ try
+ {
+ TypeClass.getTypeClass( "asdf" ) ;
+ fail( "exception should prevent this failure" ) ;
+ }
+ catch ( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+ }
+
+ public void testList()
+ {
+ List list = TypeClass.list() ;
+ assertNotNull( list ) ;
+ assertEquals( 4, list.size() ) ;
+ assertTrue( list.contains( TypeClass.PRIVATE ) ) ;
+ assertTrue( list.contains( TypeClass.UNIVERSAL ) ) ;
+ assertTrue( list.contains( TypeClass.APPLICATION ) ) ;
+ assertTrue( list.contains( TypeClass.CONTEXT_SPECIFIC ) ) ;
+ }
+
+ public void testMap()
+ {
+ Map map = TypeClass.map() ;
+ assertNotNull( map ) ;
+ assertEquals( 4, map.size() ) ;
+ assertTrue( map.containsKey( TypeClass.PRIVATE.getName() ) ) ;
+ assertTrue( map.containsKey( TypeClass.UNIVERSAL.getName() ) ) ;
+ assertTrue( map.containsKey( TypeClass.APPLICATION.getName() ) ) ;
+ assertTrue( map.containsKey( TypeClass.CONTEXT_SPECIFIC.getName() ) ) ;
+ }
+
+ /*
+ * Class to test for TypeClass getTypeClass(int)
+ */
+ public void testGetTypeClassint()
+ {
+ assertEquals( TypeClass.APPLICATION, TypeClass.getTypeClass(
+ TypeClass.APPLICATION_VAL ) ) ;
+ assertEquals( TypeClass.PRIVATE, TypeClass.getTypeClass(
+ TypeClass.PRIVATE_VAL ) ) ;
+ assertEquals( TypeClass.UNIVERSAL, TypeClass.getTypeClass(
+ TypeClass.UNIVERSAL_VAL ) ) ;
+ assertEquals( TypeClass.CONTEXT_SPECIFIC, TypeClass.getTypeClass(
+ TypeClass.CONTEXT_SPECIFIC_VAL ) ) ;
+
+ try
+ {
+ TypeClass.getTypeClass( 35 ) ;
+ fail( "exception should prevent this failure" ) ;
+ }
+ catch( Throwable t )
+ {
+ assertNotNull( t ) ;
+ }
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/ber/todo.txt
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/todo.txt (original)
+++ incubator/directory/snickers/branches/refactoring/ber/todo.txt Sun Mar 14 14:02:18 2004
@@ -1,39 +1,39 @@
-
-
- T O D O L I S T
- =================
-
-* Need an equality test for TupleNodes hence trees.
-
-* For the mock decoder in Eve see if we can rig in a decoder that builds on this
- BERDecoder that can at a bare minimum detect when an LDAP message starts and
- ends. This way we can continue working on Eve while the snickers code
- progresses forward. In fact we could even capture a full buffer and feed it
- to the old synchronous SNACC provider just for now to get decodes working.
-
---o--
-
-* Add a value size protection feature to the decoder to either break up
- incomming massive tlv's into smaller tlv's or to stream them to disk,
- and providing a data reference rather than a byte[] to the callback's
- decodeOccurred method. This will be huge for both performance and the
- prevention of denial of service attacks where massive TLV's bombard the
- decoder. We need to look at the big picture to figure out which approach
- is best within the whole decoding processs.
-
---o--
-
-* Build a library of primitive ASN.1 data types mapping them to Java types.
-
-* Build a digester like tool on top of the BERDecoder, for now we'll call it a
- TLVDecoder. It is fed a train of TLV's and it statefully constructs ASN.1
- stubs based on the input. When an entire stub has been assembled it is
- emitted via the decodeOccurred callback.
-
-* It will be worth while taking a good look at the way digester works to get
- some ideas here.
-
-* Also we need to read the Sample Neufeld papper to make sure we're decoding
- appropriately.
-
-
+
+
+ T O D O L I S T
+ =================
+
+* Need an equality test for TupleNodes hence trees.
+
+* For the mock decoder in Eve see if we can rig in a decoder that builds on this
+ BERDecoder that can at a bare minimum detect when an LDAP message starts and
+ ends. This way we can continue working on Eve while the snickers code
+ progresses forward. In fact we could even capture a full buffer and feed it
+ to the old synchronous SNACC provider just for now to get decodes working.
+
+--o--
+
+* Add a value size protection feature to the decoder to either break up
+ incomming massive tlv's into smaller tlv's or to stream them to disk,
+ and providing a data reference rather than a byte[] to the callback's
+ decodeOccurred method. This will be huge for both performance and the
+ prevention of denial of service attacks where massive TLV's bombard the
+ decoder. We need to look at the big picture to figure out which approach
+ is best within the whole decoding processs.
+
+--o--
+
+* Build a library of primitive ASN.1 data types mapping them to Java types.
+
+* Build a digester like tool on top of the BERDecoder, for now we'll call it a
+ TLVDecoder. It is fed a train of TLV's and it statefully constructs ASN.1
+ stubs based on the input. When an entire stub has been assembled it is
+ emitted via the decodeOccurred callback.
+
+* It will be worth while taking a good look at the way digester works to get
+ some ideas here.
+
+* Also we need to read the Sample Neufeld papper to make sure we're decoding
+ appropriately.
+
+
Modified: incubator/directory/snickers/branches/refactoring/ber/xdocs/design.xml
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/xdocs/design.xml (original)
+++ incubator/directory/snickers/branches/refactoring/ber/xdocs/design.xml Sun Mar 14 14:02:18 2004
@@ -1,99 +1,99 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
- <properties>
- <author email="akarasulu@apache.org">Alex Karasulu</author>
- <title>Design Documentation</title>
- </properties>
- <body>
- <section name="Introduction">
- <p>
- We're designing the decoder peice using the stateful decoder interfaces
- that were carved up for the commons-codec API within their stateful
- package. The stateful decoder is designed to maintain state while
- processing arriving chunks of TLV data.
- </p>
-
- <p>
- There are several issues confronted by the decoder while decoding a
- stream of TLV trees where TLV tuples are nested within each other. In
- general this decoder is viewed as a simple line parser for TLV tuples
- notifying of their arrival via callbacks.
- </p>
- </section>
-
- <section name="Requirements">
- <p>
- The decoder must be fast, have a fixed memory footprint, and be simple.
- It should perform only one task: notifying content handlers via
- callbacks of the arrival of TLV tuples. While doing so it must maintain
- state in between calls to decode a chunk of arriving BER encoded data.
- </p>
-
- <p>
- It should not try to interpret the content of the TLV tuples. These
- aspects are left to be handled by higher level content based facilities
- that build on top of the BERDecoder. These higher facilities provide
- their own callbacks to build on TLV events.
- </p>
- </section>
-
- <section name="Object Reuse and Using Primitive Types">
- <p>
- The density of TLV tuples encountered during decoder operation will
- vary based on message characteristics. One of the most involved aspects
- to the decoder is to spit out TLV tuples when emitting events.
- </p>
-
- <p>
- We could just instantiate a new TLV tuple object for every tuple but
- this would slow the decoder down and increase the memory footprint
- making it less efficient. For this reason we decided to reuse the same
- TLV tuple to deliver TLV data via notification events on the callback.
- The callback implementation must copy the tuple's data if it intends to
- save the TLV for use later. Otherwise the decoder will overwrite the
- TLV members on the next event. We leave the option to copy the TLV
- upto the higher level facility that way only those TLV tuples of
- interest, known only to the content specific handler, can be copied.
- Why waste space and time within the decoder one those events that will
- not be of interest?
- </p>
-
- <p>
- The most complex part of the decoder deals with maintaining state while
- decoding. Data can arrive at any time to contain any part of a TLV or
- multiple TLVs along with parts of others. Often the fragmentation of
- the data will not be known. Furthermore the nesting of TLVs must be
- tracked while maintaining state. A stack is perhaps the best structure
- to use to track the nesting of TLV tuples within a TLV tree.
- </p>
-
- <p>
- We do not instantiate TLV tuple objects so pushing the one TLV instance
- we reuse is pointless. We could use two approaches here to handle this
- nuisance. First we could just create a new instance only for those TLV
- tuples that nest others and hence need to be pushed onto the stack. Or
- we can use multiple primitive stacks based on an int to store the set
- of values contained in the tuple. The second approach leads to greater
- complexity while the first leads to some overhead in extra instantiation
- time and memory which is negligable really. Which approach is best
- depends on the number of members in the tuple or in otherwords the
- number of primitive int stacks.
- </p>
-
- <p>
- We wrote a little test to figure out when one approach out performs the
- other in the ObjectVersePrimitiveTest unit test case. From tinkering
- with the parameters of the test case we found the use of primitives to
- out perform tuple object instantiation when the number of member stacks
- is less than or equal to 2. If the number of stacks used is 3 or more
- then instantiating an TLV object and pushing it onto one stack is best.
- In our case we have 3 peices of information that need to be pushed and
- poped together so from this data the choice is clear. We clone the TLV
- tuple or instantiate a new one for constructed TLVs that are pushed onto
- a single stack. This is faster and removes the need to manage multiple
- stacks making the code less complex.
- </p>
- </section>
-
- </body>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+ <properties>
+ <author email="akarasulu@apache.org">Alex Karasulu</author>
+ <title>Design Documentation</title>
+ </properties>
+ <body>
+ <section name="Introduction">
+ <p>
+ We're designing the decoder peice using the stateful decoder interfaces
+ that were carved up for the commons-codec API within their stateful
+ package. The stateful decoder is designed to maintain state while
+ processing arriving chunks of TLV data.
+ </p>
+
+ <p>
+ There are several issues confronted by the decoder while decoding a
+ stream of TLV trees where TLV tuples are nested within each other. In
+ general this decoder is viewed as a simple line parser for TLV tuples
+ notifying of their arrival via callbacks.
+ </p>
+ </section>
+
+ <section name="Requirements">
+ <p>
+ The decoder must be fast, have a fixed memory footprint, and be simple.
+ It should perform only one task: notifying content handlers via
+ callbacks of the arrival of TLV tuples. While doing so it must maintain
+ state in between calls to decode a chunk of arriving BER encoded data.
+ </p>
+
+ <p>
+ It should not try to interpret the content of the TLV tuples. These
+ aspects are left to be handled by higher level content based facilities
+ that build on top of the BERDecoder. These higher facilities provide
+ their own callbacks to build on TLV events.
+ </p>
+ </section>
+
+ <section name="Object Reuse and Using Primitive Types">
+ <p>
+ The density of TLV tuples encountered during decoder operation will
+ vary based on message characteristics. One of the most involved aspects
+ to the decoder is to spit out TLV tuples when emitting events.
+ </p>
+
+ <p>
+ We could just instantiate a new TLV tuple object for every tuple but
+ this would slow the decoder down and increase the memory footprint
+ making it less efficient. For this reason we decided to reuse the same
+ TLV tuple to deliver TLV data via notification events on the callback.
+ The callback implementation must copy the tuple's data if it intends to
+ save the TLV for use later. Otherwise the decoder will overwrite the
+ TLV members on the next event. We leave the option to copy the TLV
+ upto the higher level facility that way only those TLV tuples of
+ interest, known only to the content specific handler, can be copied.
+ Why waste space and time within the decoder one those events that will
+ not be of interest?
+ </p>
+
+ <p>
+ The most complex part of the decoder deals with maintaining state while
+ decoding. Data can arrive at any time to contain any part of a TLV or
+ multiple TLVs along with parts of others. Often the fragmentation of
+ the data will not be known. Furthermore the nesting of TLVs must be
+ tracked while maintaining state. A stack is perhaps the best structure
+ to use to track the nesting of TLV tuples within a TLV tree.
+ </p>
+
+ <p>
+ We do not instantiate TLV tuple objects so pushing the one TLV instance
+ we reuse is pointless. We could use two approaches here to handle this
+ nuisance. First we could just create a new instance only for those TLV
+ tuples that nest others and hence need to be pushed onto the stack. Or
+ we can use multiple primitive stacks based on an int to store the set
+ of values contained in the tuple. The second approach leads to greater
+ complexity while the first leads to some overhead in extra instantiation
+ time and memory which is negligable really. Which approach is best
+ depends on the number of members in the tuple or in otherwords the
+ number of primitive int stacks.
+ </p>
+
+ <p>
+ We wrote a little test to figure out when one approach out performs the
+ other in the ObjectVersePrimitiveTest unit test case. From tinkering
+ with the parameters of the test case we found the use of primitives to
+ out perform tuple object instantiation when the number of member stacks
+ is less than or equal to 2. If the number of stacks used is 3 or more
+ then instantiating an TLV object and pushing it onto one stack is best.
+ In our case we have 3 peices of information that need to be pushed and
+ poped together so from this data the choice is clear. We clone the TLV
+ tuple or instantiate a new one for constructed TLVs that are pushed onto
+ a single stack. This is faster and removes the need to manage multiple
+ stacks making the code less complex.
+ </p>
+ </section>
+
+ </body>
</document>
Modified: incubator/directory/snickers/branches/refactoring/ber/xdocs/empty/index.xml
==============================================================================
--- incubator/directory/snickers/branches/refactoring/ber/xdocs/empty/index.xml (original)
+++ incubator/directory/snickers/branches/refactoring/ber/xdocs/empty/index.xml Sun Mar 14 14:02:18 2004
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document>
- <properties>
- <author email="akarasulu@apache.org">Alex Karasulu</author>
- <title>Empty!</title>
- </properties>
- <body>
- <section name="Empty!">
- <p>This is an empty place holder for pages one directory above.</p>
- </section>
- </body>
-</document>
+<?xml version="1.0" encoding="UTF-8"?>
+<document>
+ <properties>
+ <author email="akarasulu@apache.org">Alex Karasulu</author>
+ <title>Empty!</title>
+ </properties>
+ <body>
+ <section name="Empty!">
+ <p>This is an empty place holder for pages one directory above.</p>
+ </section>
+ </body>
+</document>
Modified: incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/CallbackHistory.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/CallbackHistory.java (original)
+++ incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/CallbackHistory.java Sun Mar 14 14:02:18 2004
@@ -1,127 +1,127 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.commons.codec.stateful ;
-
-
-import java.util.LinkedList ;
-
-
-/**
- * A convenience callback which collects decoded objects to audit a decoder's
- * activity. The callback also comes in handy when data is to be pushed
- * through a decoder and grabed immediately afterwords.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public class CallbackHistory implements DecoderCallback
-{
- /** history of decoded objects in cronological order */
- private final LinkedList history ;
- /** the length of callback history stored */
- private final int length ;
-
-
- /**
- * Creates an auditing callback that manages a history of fixed or
- * indefinate length. If the length is fixed the history effectively
- * becomes a FIFO structure.
- *
- * @param length the maximum length of callback history to store before
- * dropping decoded items, a length of zero or 1 corresponds to indefinate
- * history
- */
- public CallbackHistory( int length )
- {
- this.length = length ;
- history = new LinkedList() ;
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
- */
- public void decodeOccurred( StatefulDecoder decoder, Object decoded )
- {
- if ( length > 0 )
- {
- while ( history.size() >= length )
- {
- history.removeLast() ;
- }
- }
-
- history.addFirst( decoded ) ;
- }
-
-
- /**
- * Gets the most recent decoded object if one exists.
- *
- * @return the most recent decoded object
- * @throws java.util.NoSuchElementException if the history is empty
- */
- public Object getMostRecent()
- {
- return history.getFirst() ;
- }
-
-
- /**
- * Gets the oldest decoded object if one exists.
- *
- * @return the oldest decoded object
- * @throws java.util.NoSuchElementException if the history is empty
- */
- public Object getOldest()
- {
- return history.getLast() ;
- }
-
-
- /**
- * Tests to see if the history is empty.
- *
- * @return true if the history is empty, false otherwise
- */
- public boolean isEmpty()
- {
- return history.isEmpty() ;
- }
-
-
- /**
- * Clears the history of decoded items.
- */
- public void clear()
- {
- history.clear() ;
- }
-
-
- /**
- * Gets the number of decoded items in the callback history.
- *
- * @return the number of decoded items in the callback history
- */
- public int size()
- {
- return history.size() ;
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.commons.codec.stateful ;
+
+
+import java.util.LinkedList ;
+
+
+/**
+ * A convenience callback which collects decoded objects to audit a decoder's
+ * activity. The callback also comes in handy when data is to be pushed
+ * through a decoder and grabed immediately afterwords.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class CallbackHistory implements DecoderCallback
+{
+ /** history of decoded objects in cronological order */
+ private final LinkedList history ;
+ /** the length of callback history stored */
+ private final int length ;
+
+
+ /**
+ * Creates an auditing callback that manages a history of fixed or
+ * indefinate length. If the length is fixed the history effectively
+ * becomes a FIFO structure.
+ *
+ * @param length the maximum length of callback history to store before
+ * dropping decoded items, a length of zero or 1 corresponds to indefinate
+ * history
+ */
+ public CallbackHistory( int length )
+ {
+ this.length = length ;
+ history = new LinkedList() ;
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderCallback#decodeOccurred(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Object)
+ */
+ public void decodeOccurred( StatefulDecoder decoder, Object decoded )
+ {
+ if ( length > 0 )
+ {
+ while ( history.size() >= length )
+ {
+ history.removeLast() ;
+ }
+ }
+
+ history.addFirst( decoded ) ;
+ }
+
+
+ /**
+ * Gets the most recent decoded object if one exists.
+ *
+ * @return the most recent decoded object
+ * @throws java.util.NoSuchElementException if the history is empty
+ */
+ public Object getMostRecent()
+ {
+ return history.getFirst() ;
+ }
+
+
+ /**
+ * Gets the oldest decoded object if one exists.
+ *
+ * @return the oldest decoded object
+ * @throws java.util.NoSuchElementException if the history is empty
+ */
+ public Object getOldest()
+ {
+ return history.getLast() ;
+ }
+
+
+ /**
+ * Tests to see if the history is empty.
+ *
+ * @return true if the history is empty, false otherwise
+ */
+ public boolean isEmpty()
+ {
+ return history.isEmpty() ;
+ }
+
+
+ /**
+ * Clears the history of decoded items.
+ */
+ public void clear()
+ {
+ history.clear() ;
+ }
+
+
+ /**
+ * Gets the number of decoded items in the callback history.
+ *
+ * @return the number of decoded items in the callback history
+ */
+ public int size()
+ {
+ return history.size() ;
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderCallback.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderCallback.java (original)
+++ incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderCallback.java Sun Mar 14 14:02:18 2004
@@ -1,34 +1,34 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.commons.codec.stateful ;
-
-/**
- * Callback interface for stateful decoder callbacks.
- *
- * @author <a href="mailto:commons-dev@jakarta.apache.org">Jakarta Commons</a>
- * @version $Rev$
- */
-public interface DecoderCallback
-{
- /**
- * Callback to deliver a fully decoded object.
- *
- * @param decoder the stateful decoder driving the callback
- * @param decoded the object that was decoded
- */
- void decodeOccurred( StatefulDecoder decoder, Object decoded ) ;
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.commons.codec.stateful ;
+
+/**
+ * Callback interface for stateful decoder callbacks.
+ *
+ * @author <a href="mailto:commons-dev@jakarta.apache.org">Jakarta Commons</a>
+ * @version $Rev$
+ */
+public interface DecoderCallback
+{
+ /**
+ * Callback to deliver a fully decoded object.
+ *
+ * @param decoder the stateful decoder driving the callback
+ * @param decoded the object that was decoded
+ */
+ void decodeOccurred( StatefulDecoder decoder, Object decoded ) ;
+}
Modified: incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitor.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitor.java (original)
+++ incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitor.java Sun Mar 14 14:02:18 2004
@@ -1,90 +1,90 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.commons.codec.stateful ;
-
-
-/**
- * Monitors decoder errors. This class borrowed some from the <code>
- * org.xml.sax.ErrorHandler</code> interface and its documentation.
- *
- * @author <a href="mailto:directory-dev@incubator.apache.org">
- * Apache Directory Project</a>
- * @version $Rev$
- */
-public interface DecoderMonitor
-{
- /**
- * Receive notification of a recoverable error. This callback is used to
- * denote a failure to handle a unit of data to be encoded or decoded. The
- * entire [en|de]codable unit is lost but the [en|de]coding operation can
- * still proceed.
- *
- * @param decoder the decoder that had the error
- * @param exception the error information encapsulated in an exception
- */
- void error( StatefulDecoder decoder, Exception exception ) ;
-
- /**
- * Receive notification of a warning. The decoder must continue to provide
- * normal callbacks after invoking this method: it should still be possible
- * for the application to process the encoded data through to the end.
- *
- * @param decoder the decoder that had the error
- * @param exception the warning information encapsulated in an exception
- */
- void fatalError( StatefulDecoder decoder, Exception exception ) ;
-
- /**
- * Receive notification of a non-recoverable error. The application must
- * assume that the stream data is unusable after the decoder has invoked
- * this method, and should continue (if at all) only for the sake of
- * collecting addition error messages: in fact, decoders are free to stop
- * reporting any other events once this method has been invoked.
- *
- * @param decoder the decoder that had the failure
- * @param exception the warning information encapsulated in an exception
- */
- void warning( StatefulDecoder decoder, Exception exception ) ;
-
- /**
- * Monitors callbacks that deliver a fully decoded object.
- *
- * @param decoder the stateful decoder driving the callback
- * @param decoded the object that was decoded
- */
- void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
- Object decoded ) ;
-
- /**
- * Monitors changes to the callback.
- *
- * @param decoder the decoder whose callback was set
- * @param oldcb the unset old callback, or null if none was set
- * @param newcb the newly set callback, or null if callback is cleared
- */
- void callbackSet( StatefulDecoder decoder, DecoderCallback oldcb,
- DecoderCallback newcb ) ;
-
- /**
- * Monitors changes to the the monitor for the decoder. Note that the
- * object being called is the new monitor.
- *
- * @param decoder the decoder whose monitor was set
- * @param oldmon the old monitor or null if none was set
- */
- void monitorSet( StatefulDecoder decoder, DecoderMonitor oldmon ) ;
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.commons.codec.stateful ;
+
+
+/**
+ * Monitors decoder errors. This class borrowed some from the <code>
+ * org.xml.sax.ErrorHandler</code> interface and its documentation.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">
+ * Apache Directory Project</a>
+ * @version $Rev$
+ */
+public interface DecoderMonitor
+{
+ /**
+ * Receive notification of a recoverable error. This callback is used to
+ * denote a failure to handle a unit of data to be encoded or decoded. The
+ * entire [en|de]codable unit is lost but the [en|de]coding operation can
+ * still proceed.
+ *
+ * @param decoder the decoder that had the error
+ * @param exception the error information encapsulated in an exception
+ */
+ void error( StatefulDecoder decoder, Exception exception ) ;
+
+ /**
+ * Receive notification of a warning. The decoder must continue to provide
+ * normal callbacks after invoking this method: it should still be possible
+ * for the application to process the encoded data through to the end.
+ *
+ * @param decoder the decoder that had the error
+ * @param exception the warning information encapsulated in an exception
+ */
+ void fatalError( StatefulDecoder decoder, Exception exception ) ;
+
+ /**
+ * Receive notification of a non-recoverable error. The application must
+ * assume that the stream data is unusable after the decoder has invoked
+ * this method, and should continue (if at all) only for the sake of
+ * collecting addition error messages: in fact, decoders are free to stop
+ * reporting any other events once this method has been invoked.
+ *
+ * @param decoder the decoder that had the failure
+ * @param exception the warning information encapsulated in an exception
+ */
+ void warning( StatefulDecoder decoder, Exception exception ) ;
+
+ /**
+ * Monitors callbacks that deliver a fully decoded object.
+ *
+ * @param decoder the stateful decoder driving the callback
+ * @param decoded the object that was decoded
+ */
+ void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
+ Object decoded ) ;
+
+ /**
+ * Monitors changes to the callback.
+ *
+ * @param decoder the decoder whose callback was set
+ * @param oldcb the unset old callback, or null if none was set
+ * @param newcb the newly set callback, or null if callback is cleared
+ */
+ void callbackSet( StatefulDecoder decoder, DecoderCallback oldcb,
+ DecoderCallback newcb ) ;
+
+ /**
+ * Monitors changes to the the monitor for the decoder. Note that the
+ * object being called is the new monitor.
+ *
+ * @param decoder the decoder whose monitor was set
+ * @param oldmon the old monitor or null if none was set
+ */
+ void monitorSet( StatefulDecoder decoder, DecoderMonitor oldmon ) ;
+}
Modified: incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitorAdapter.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitorAdapter.java (original)
+++ incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/DecoderMonitorAdapter.java Sun Mar 14 14:02:18 2004
@@ -1,87 +1,87 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.commons.codec.stateful ;
-
-
-/**
- * A do nothing decoder monitor adapter.
- *
- * @author Apache Software Foundation
- * @version $Rev$
- */
-public class DecoderMonitorAdapter implements DecoderMonitor
-{
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#error(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void error( StatefulDecoder decoder, Exception exception )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#fatalError(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void fatalError( StatefulDecoder decoder, Exception exception )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#warning(
- * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
- */
- public void warning( StatefulDecoder decoder, Exception exception )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackOccured(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderCallback, java.lang.Object)
- */
- public void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
- Object decoded )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackSet(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderCallback,
- * org.apache.commons.codec.stateful.DecoderCallback)
- */
- public void callbackSet( StatefulDecoder decoder, DecoderCallback oldcb,
- DecoderCallback newcb )
- {
- }
-
-
- /* (non-Javadoc)
- * @see org.apache.commons.codec.stateful.DecoderMonitor#monitorSet(
- * org.apache.commons.codec.stateful.StatefulDecoder,
- * org.apache.commons.codec.stateful.DecoderMonitor)
- */
- public void monitorSet( StatefulDecoder decoder, DecoderMonitor oldmon )
- {
- }
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.commons.codec.stateful ;
+
+
+/**
+ * A do nothing decoder monitor adapter.
+ *
+ * @author Apache Software Foundation
+ * @version $Rev$
+ */
+public class DecoderMonitorAdapter implements DecoderMonitor
+{
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#error(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void error( StatefulDecoder decoder, Exception exception )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#fatalError(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void fatalError( StatefulDecoder decoder, Exception exception )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#warning(
+ * org.apache.commons.codec.stateful.StatefulDecoder, java.lang.Exception)
+ */
+ public void warning( StatefulDecoder decoder, Exception exception )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackOccured(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderCallback, java.lang.Object)
+ */
+ public void callbackOccured( StatefulDecoder decoder, DecoderCallback cb,
+ Object decoded )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#callbackSet(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderCallback,
+ * org.apache.commons.codec.stateful.DecoderCallback)
+ */
+ public void callbackSet( StatefulDecoder decoder, DecoderCallback oldcb,
+ DecoderCallback newcb )
+ {
+ }
+
+
+ /* (non-Javadoc)
+ * @see org.apache.commons.codec.stateful.DecoderMonitor#monitorSet(
+ * org.apache.commons.codec.stateful.StatefulDecoder,
+ * org.apache.commons.codec.stateful.DecoderMonitor)
+ */
+ public void monitorSet( StatefulDecoder decoder, DecoderMonitor oldmon )
+ {
+ }
+}
Modified: incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/StatefulDecoder.java
==============================================================================
--- incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/StatefulDecoder.java (original)
+++ incubator/directory/snickers/branches/refactoring/codec-stateful/src/java/org/apache/commons/codec/stateful/StatefulDecoder.java Sun Mar 14 14:02:18 2004
@@ -1,60 +1,60 @@
-/*
- * Copyright 2004 The Apache Software Foundation
- *
- * 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.
- *
- */
-package org.apache.commons.codec.stateful ;
-
-
-import org.apache.commons.codec.DecoderException ;
-
-
-/**
- * A statful decoder which decodes encoded data as it arrives in peices.
- * As chunks of encoded data arrive the decoder processes each chunk of encoded
- * data and maintains decoding state in between arrivals: it is hence stateful
- * and should be associated with a single channel or encoded data producer.
- * When an arbitrary unit of encoding, to be determined by the encoding scheme,
- * has been decoded, a registered DecoderCallback is called.
- *
- * @author <a href="mailto:commons-dev@jakarta.apache.org">Jakarta Commons</a>
- * @version $Rev$
- */
-public interface StatefulDecoder
-{
- /**
- * Decodes a peice of encoded data. The nature of this call, synchronous
- * verses asynchonous, with respect to driving the actual decoding of the
- * encoded data argument is determined by an implementation. A return from
- * this method does not guarrantee any callbacks: zero or more callbacks
- * may occur during this call.
- *
- * @param encode an object representing a peice of encoded data
- */
- void decode( Object encoded ) throws DecoderException ;
-
- /**
- * Sets the callback for this StatefulDecoder.
- *
- * @param cb the callback to inform of a complete decode operation
- */
- void setCallback( DecoderCallback cb ) ;
-
- /**
- * Monitors all kinds of events that occur during processing.
- *
- * @param monitor to set for this StatefulDecoder
- */
- void setDecoderMonitor( DecoderMonitor monitor ) ;
-}
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * 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.
+ *
+ */
+package org.apache.commons.codec.stateful ;
+
+
+import org.apache.commons.codec.DecoderException ;
+
+
+/**
+ * A statful decoder which decodes encoded data as it arrives in peices.
+ * As chunks of encoded data arrive the decoder processes each chunk of encoded
+ * data and maintains decoding state in between arrivals: it is hence stateful
+ * and should be associated with a single channel or encoded data producer.
+ * When an arbitrary unit of encoding, to be determined by the encoding scheme,
+ * has been decoded, a registered DecoderCallback is called.
+ *
+ * @author <a href="mailto:commons-dev@jakarta.apache.org">Jakarta Commons</a>
+ * @version $Rev$
+ */
+public interface StatefulDecoder
+{
+ /**
+ * Decodes a peice of encoded data. The nature of this call, synchronous
+ * verses asynchonous, with respect to driving the actual decoding of the
+ * encoded data argument is determined by an implementation. A return from
+ * this method does not guarrantee any callbacks: zero or more callbacks
+ * may occur during this call.
+ *
+ * @param encode an object representing a peice of encoded data
+ */
+ void decode( Object encoded ) throws DecoderException ;
+
+ /**
+ * Sets the callback for this StatefulDecoder.
+ *
+ * @param cb the callback to inform of a complete decode operation
+ */
+ void setCallback( DecoderCallback cb ) ;
+
+ /**
+ * Monitors all kinds of events that occur during processing.
+ *
+ * @param monitor to set for this StatefulDecoder
+ */
+ void setDecoderMonitor( DecoderMonitor monitor ) ;
+}
Modified: incubator/directory/snickers/branches/refactoring/project.xml
==============================================================================
--- incubator/directory/snickers/branches/refactoring/project.xml (original)
+++ incubator/directory/snickers/branches/refactoring/project.xml Sun Mar 14 14:02:18 2004
@@ -1,214 +1,214 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<project>
- <groupId>directory</groupId>
- <id>snickers</id>
- <name>Snickers ASN.1 Tools</name>
- <package>org.apache.snickers</package>
-
- <inceptionYear>2003</inceptionYear>
- <url>http://directory.apache.org/snickers</url>
- <issueTrackingUrl>
- http://nagoya.apache.org/scarab/servlet/scarab
- </issueTrackingUrl>
- <siteAddress>directory.apache.org</siteAddress>
- <siteDirectory>/home/akarasulu/public_html</siteDirectory>
- <distributionDirectory>
- /home/akarasulu/public_html/dist
- </distributionDirectory>
-
- <repository>
- <connection>
- scm:svn:http://cvs.apache.org/repos/asf/incubator/directory/snickers/trunk
- </connection>
-
- <url>
- http://cvs.apache.org/viewcvs.cgi/incubator/directory/snickers/trunk?root=Apache-SVN
- </url>
-
- <developerConnection>
- http://cvs.apache.org/repos/asf/incubator/directory/snickers/trunk
- </developerConnection>
- </repository>
-
- <shortDescription>Snickers ASN.1 Tools</shortDescription>
-
- <description>
- The snickers subproject attempts to isolate the ASN.1 tools used to
- build Basic Encoding Rule (BER) codecs for any ASN.1 based network
- protocol. The LDAP and X.500 aspects of the directory project impose
- the need for ASN.1 tools and BER codecs. Rather than implement highly
- specific and britle code for these needs we decided to separate out
- the APIs and implementations used for dealing with BER codecs for any
- ASN.1 defined protocol.
- </description>
-
- <mailingLists>
- <mailingList>
- <name>Apache Directory Developement - use [snickers] prefix</name>
- <subscribe>
- directory-dev-subscribe@incubator.apache.org
- </subscribe>
- <unsubscribe>
- directory-dev-unsubscribe@incubator.apache.org
- </unsubscribe>
- <archive>
- http://nagoya.apache.org/eyebrowse/SummarizeList?listId=181
- </archive>
- </mailingList>
- </mailingLists>
-
- <developers>
- <developer>
- <name>Alex Karasulu</name>
- <id>akarasulu</id>
- <email>akarasulu at apache.org</email>
- <roles>
- <role>Founder</role>
- <role>Developer</role>
- <role>Architect</role>
- <role>Lead Developer</role>
- </roles>
- </developer>
- <developer>
- <name>Robb Penoyer</name>
- <id>rpenoyer</id>
- <email>rpenoyer at apache.org</email>
- <roles>
- <role>Developer</role>
- </roles>
- </developer>
- <developer>
- <name>Jeff Machols</name>
- <id>jmachols</id>
- <email>jmachols at apache.org</email>
- <roles>
- <role>Developer</role>
- <role>Infrastructure Support</role>
- </roles>
- </developer>
- <developer>
- <name>Wes McKean</name>
- <id>wesmckean</id>
- <email>wesmckean at apache.org</email>
- <roles>
- <role>Developer</role>
- </roles>
- </developer>
- <developer>
- <name>Noel Bergman</name>
- <id>noeljb</id>
- <email>noeljb at apache.org</email>
- <roles>
- <role>Mentor</role>
- <role>Advisor</role>
- <role>Sponsor</role>
- </roles>
- </developer>
- <developer>
- <name>Stephen McConnell</name>
- <id>mcconnell</id>
- <email>mcconnell at apache.org</email>
- <roles>
- <role>Mentor</role>
- <role>Sponsor</role>
- <role>Advisor</role>
- </roles>
- </developer>
- </developers>
-
- <licenses>
- <license>
- <name>Apache 1.1 License</name>
- <url>
-http://cvs.apache.org/viewcvs.cgi/incubator/directory/LICENSE.txt?rev=1369&root=Apache-SVN&view=markup
- </url>
- <distribution>repo</distribution>
- </license>
- </licenses>
-
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <url>http://junit.org</url>
- </dependency>
- </dependencies>
-
- <build>
- <nagEmailAddress>directory-dev@incubator.apache.org</nagEmailAddress>
- <sourceDirectory>${basedir}/src/java</sourceDirectory>
- <unitTestSourceDirectory>${basedir}/src/test</unitTestSourceDirectory>
- <integrationUnitTestSourceDirectory/>
- <aspectSourceDirectory/>
-
- <unitTest>
- <includes>
- <include>**/*Test*</include>
- <include>**/*TestCase*</include>
- </includes>
-
- <excludes>
- <exclude></exclude>
- </excludes>
-
- <resources>
- <resource>
- <directory>${basedir}/src/test</directory>
- <includes>
- <include>**/*.dtd</include>
- <include>**/*.ldif</include>
- <include>**/*.properties</include>
- <include>**/*.x*</include>
- <include>**/*.mf</include>
- <include>**/*.jar</include>
- </includes>
- </resource>
-
- <resource>
- <directory>${basedir}/src/test</directory>
- <includes>
- <include>**/*.dtd</include>
- <include>**/*.ldif</include>
- <include>**/*.properties</include>
- <include>**/*.x*</include>
- <include>**/*.mf</include>
- <include>**/*.jar</include>
- </includes>
- </resource>
- </resources>
- </unitTest>
-
- <resources>
- <resource>
- <directory>${basedir}/src/java</directory>
- <includes>
- <include>**/*.dtd</include>
- <include>**/*.properties</include>
- <include>**/*.x*</include>
- </includes>
- </resource>
-
- <resource>
- <directory>${basedir}/conf</directory>
- <targetPath>BLOCK-INF</targetPath>
- <includes>
- <include>block.xml</include>
- </includes>
- </resource>
- </resources>
- <jars></jars>
- </build>
-
- <reports>
- <report>maven-jxr-plugin</report>
- <report>maven-license-plugin</report>
- <!-- report>maven-changelog-plugin</report -->
- <report>maven-javadoc-plugin</report>
- <report>maven-clover-plugin</report>
- <report>maven-tasklist-plugin</report>
- </reports>
-</project>
-
-
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<project>
+ <groupId>directory</groupId>
+ <id>snickers</id>
+ <name>Snickers ASN.1 Tools</name>
+ <package>org.apache.snickers</package>
+
+ <inceptionYear>2003</inceptionYear>
+ <url>http://directory.apache.org/snickers</url>
+ <issueTrackingUrl>
+ http://nagoya.apache.org/scarab/servlet/scarab
+ </issueTrackingUrl>
+ <siteAddress>directory.apache.org</siteAddress>
+ <siteDirectory>/home/akarasulu/public_html</siteDirectory>
+ <distributionDirectory>
+ /home/akarasulu/public_html/dist
+ </distributionDirectory>
+
+ <repository>
+ <connection>
+ scm:svn:http://cvs.apache.org/repos/asf/incubator/directory/snickers/trunk
+ </connection>
+
+ <url>
+ http://cvs.apache.org/viewcvs.cgi/incubator/directory/snickers/trunk?root=Apache-SVN
+ </url>
+
+ <developerConnection>
+ http://cvs.apache.org/repos/asf/incubator/directory/snickers/trunk
+ </developerConnection>
+ </repository>
+
+ <shortDescription>Snickers ASN.1 Tools</shortDescription>
+
+ <description>
+ The snickers subproject attempts to isolate the ASN.1 tools used to
+ build Basic Encoding Rule (BER) codecs for any ASN.1 based network
+ protocol. The LDAP and X.500 aspects of the directory project impose
+ the need for ASN.1 tools and BER codecs. Rather than implement highly
+ specific and britle code for these needs we decided to separate out
+ the APIs and implementations used for dealing with BER codecs for any
+ ASN.1 defined protocol.
+ </description>
+
+ <mailingLists>
+ <mailingList>
+ <name>Apache Directory Developement - use [snickers] prefix</name>
+ <subscribe>
+ directory-dev-subscribe@incubator.apache.org
+ </subscribe>
+ <unsubscribe>
+ directory-dev-unsubscribe@incubator.apache.org
+ </unsubscribe>
+ <archive>
+ http://nagoya.apache.org/eyebrowse/SummarizeList?listId=181
+ </archive>
+ </mailingList>
+ </mailingLists>
+
+ <developers>
+ <developer>
+ <name>Alex Karasulu</name>
+ <id>akarasulu</id>
+ <email>akarasulu at apache.org</email>
+ <roles>
+ <role>Founder</role>
+ <role>Developer</role>
+ <role>Architect</role>
+ <role>Lead Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Robb Penoyer</name>
+ <id>rpenoyer</id>
+ <email>rpenoyer at apache.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Jeff Machols</name>
+ <id>jmachols</id>
+ <email>jmachols at apache.org</email>
+ <roles>
+ <role>Developer</role>
+ <role>Infrastructure Support</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Wes McKean</name>
+ <id>wesmckean</id>
+ <email>wesmckean at apache.org</email>
+ <roles>
+ <role>Developer</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Noel Bergman</name>
+ <id>noeljb</id>
+ <email>noeljb at apache.org</email>
+ <roles>
+ <role>Mentor</role>
+ <role>Advisor</role>
+ <role>Sponsor</role>
+ </roles>
+ </developer>
+ <developer>
+ <name>Stephen McConnell</name>
+ <id>mcconnell</id>
+ <email>mcconnell at apache.org</email>
+ <roles>
+ <role>Mentor</role>
+ <role>Sponsor</role>
+ <role>Advisor</role>
+ </roles>
+ </developer>
+ </developers>
+
+ <licenses>
+ <license>
+ <name>Apache 1.1 License</name>
+ <url>
+http://cvs.apache.org/viewcvs.cgi/incubator/directory/LICENSE.txt?rev=1369&root=Apache-SVN&view=markup
+ </url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <url>http://junit.org</url>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <nagEmailAddress>directory-dev@incubator.apache.org</nagEmailAddress>
+ <sourceDirectory>${basedir}/src/java</sourceDirectory>
+ <unitTestSourceDirectory>${basedir}/src/test</unitTestSourceDirectory>
+ <integrationUnitTestSourceDirectory/>
+ <aspectSourceDirectory/>
+
+ <unitTest>
+ <includes>
+ <include>**/*Test*</include>
+ <include>**/*TestCase*</include>
+ </includes>
+
+ <excludes>
+ <exclude></exclude>
+ </excludes>
+
+ <resources>
+ <resource>
+ <directory>${basedir}/src/test</directory>
+ <includes>
+ <include>**/*.dtd</include>
+ <include>**/*.ldif</include>
+ <include>**/*.properties</include>
+ <include>**/*.x*</include>
+ <include>**/*.mf</include>
+ <include>**/*.jar</include>
+ </includes>
+ </resource>
+
+ <resource>
+ <directory>${basedir}/src/test</directory>
+ <includes>
+ <include>**/*.dtd</include>
+ <include>**/*.ldif</include>
+ <include>**/*.properties</include>
+ <include>**/*.x*</include>
+ <include>**/*.mf</include>
+ <include>**/*.jar</include>
+ </includes>
+ </resource>
+ </resources>
+ </unitTest>
+
+ <resources>
+ <resource>
+ <directory>${basedir}/src/java</directory>
+ <includes>
+ <include>**/*.dtd</include>
+ <include>**/*.properties</include>
+ <include>**/*.x*</include>
+ </includes>
+ </resource>
+
+ <resource>
+ <directory>${basedir}/conf</directory>
+ <targetPath>BLOCK-INF</targetPath>
+ <includes>
+ <include>block.xml</include>
+ </includes>
+ </resource>
+ </resources>
+ <jars></jars>
+ </build>
+
+ <reports>
+ <report>maven-jxr-plugin</report>
+ <report>maven-license-plugin</report>
+ <!-- report>maven-changelog-plugin</report -->
+ <report>maven-javadoc-plugin</report>
+ <report>maven-clover-plugin</report>
+ <report>maven-tasklist-plugin</report>
+ </reports>
+</project>
+
+