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/05/30 05:56:36 UTC
svn commit: rev 20627 - in incubator/directory/snickers/trunk: . ber-codec/src/java/org/apache/snickers/ber ber-codec/src/java/org/apache/snickers/ber/primitives ber-codec/src/test/org/apache/snickers/ber codec-stateful/src/docbook codec-stateful/src/images ldap-ber-provider/src/docbook ldap-ber-provider/src/images ldap-ber-provider/src/java/org/apache/snickers/ldap ldap-ber-provider/src/test/org/apache/snickers/ldap ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils
Author: akarasulu
Date: Sat May 29 20:56:35 2004
New Revision: 20627
Added:
incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/primitives/ContextSpecificTag.java (contents, props changed)
incubator/directory/snickers/trunk/codec-stateful/src/docbook/
incubator/directory/snickers/trunk/codec-stateful/src/images/
incubator/directory/snickers/trunk/ldap-ber-provider/src/docbook/
incubator/directory/snickers/trunk/ldap-ber-provider/src/images/
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/CompareRequestRule.java (contents, props changed)
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/CompareRequestRuleTest.java (contents, props changed)
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java (contents, props changed)
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/RuleTestCase.java (contents, props changed)
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/TestUtils.java (contents, props changed)
Modified:
incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/Tag.java
incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/TagEnum.java
incubator/directory/snickers/trunk/ber-codec/src/test/org/apache/snickers/ber/TagTest.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapTag.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/BindResponseRuleTest.java
incubator/directory/snickers/trunk/project.xml
Log:
Commit changes ...
o added some directories that maven wanted
o added Tag method to create a int encoded tag using our scheme
o added a tag type for context specific tags
o added digester factory for registering all the ldap rules in one place
o added test utility classes
o added req/resp rule pair for compare
Modified: incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/Tag.java
==============================================================================
--- incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/Tag.java (original)
+++ incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/Tag.java Sat May 29 20:56:35 2004
@@ -29,8 +29,11 @@
*/
public class Tag
{
- /** tag mask for the primitive/constructed bit - 0010 0000 - 0x20 */
- private static final int PRIMITIVE_MASK = 0x20 ;
+ /** tag flag for the primitive/constructed bit - 0010 0000 - 0x20 */
+ private static final int CONSTRUCTED_FLAG = 0x20 ;
+ /** tag mask for the primitive/constructed bit - 1101 1111 - 0xDF */
+ // private static final int CONSTRUCTED_MASK = ~CONSTRUCTED_FLAG ;
+
/** tag mask for the short tag format - 0001 1111 - 0x1F */
static final int SHORT_MASK = 0x1F ;
/** tag mask for the long tag format - 0111 1111 - 0x7F */
@@ -38,6 +41,15 @@
/** tag flag indicating the use of the long tag encoding form */
private static final int LONG_FLAG = 0x80 ;
+ /** the max id size with one tag octet */
+ private static final int ONE_OCTET_IDMAX = 30 ;
+ /** the max id size with two tag octets */
+ private static final int TWO_OCTET_IDMAX = (1<<7)-1 ;
+ /** the max id size with three tag octets */
+ private static final int THREE_OCTET_IDMAX = (1<<14)-1 ;
+ /** the max id size with four tag octets */
+ private static final int FOUR_OCTET_IDMAX = (1<<21)-1 ;
+
/** tag id */
private int id = 0 ;
/** whether or not this tag represents a primitive type */
@@ -195,6 +207,66 @@
}
+ // ------------------------------------------------------------------------
+ // Utility Methods For Dealing With Tags and Tag Octets
+ // ------------------------------------------------------------------------
+
+
+ /**
+ *
+ *
+ * @param type
+ * @param id
+ * @param isConstructed
+ * @return
+ */
+ public final static int
+ getIntEncodedTag( TypeClass type, int id, boolean isConstructed )
+ {
+ int value = type.getValue() << 24 ;
+
+ if ( isConstructed )
+ {
+ value |= ( CONSTRUCTED_FLAG << 24 ) ;
+ }
+
+ if ( id <= ONE_OCTET_IDMAX )
+ {
+ value |= ( id << 24 ) ;
+ }
+ else if ( id <= TWO_OCTET_IDMAX )
+ {
+ value |= ( SHORT_MASK << 24 ) ;
+ value |= ( id & 0x0000007F ) << 16 ;
+ }
+ else if ( id <= THREE_OCTET_IDMAX )
+ {
+ value |= ( SHORT_MASK << 24 ) ;
+ value |= ( id & 0x00003F80 ) << 9 ;
+ value |= ( id & 0x0000007F ) << 8 ;
+ value |= 0x00800000 ;
+ }
+ else if ( id <= FOUR_OCTET_IDMAX )
+ {
+ value |= ( SHORT_MASK << 24 ) ;
+ value |= ( id & 0x001FC000 ) << 2 ;
+ value |= ( id & 0x00003F80 ) << 1 ;
+ value |= ( id & 0x0000007F ) ;
+ value |= 0x00808000 ;
+ }
+ else
+ {
+ String msg = "Id argument value of " + id
+ + " was greater than the maximum supported id of "
+ + FOUR_OCTET_IDMAX ;
+ throw new IllegalArgumentException( msg ) ;
+ }
+
+ return value ;
+ }
+
+
+
/**
* Gets the tag id of a TLV from tag octets.
*
@@ -278,7 +350,7 @@
*/
public final static boolean isPrimitive( int octet )
{
- return ( octet & PRIMITIVE_MASK ) == 0 ;
+ return ( octet & CONSTRUCTED_FLAG ) == 0 ;
}
@@ -290,6 +362,6 @@
*/
public final static boolean isConstructed( int octet )
{
- return ( octet & PRIMITIVE_MASK ) == PRIMITIVE_MASK ;
+ return ( octet & CONSTRUCTED_FLAG ) == CONSTRUCTED_FLAG ;
}
}
Modified: incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/TagEnum.java
==============================================================================
--- incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/TagEnum.java (original)
+++ incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/TagEnum.java Sat May 29 20:56:35 2004
@@ -52,4 +52,26 @@
{
return this.id ;
}
+
+
+ /**
+ * Gets the primitive version of a tag.
+ *
+ * @return the primitive version of a tag with the P/C bit set to 0
+ */
+ public final int getPrimitiveTag()
+ {
+ return getValue() & 0xDFFFFFFF ;
+ }
+
+
+ /**
+ * Gets the constructed version of a tag.
+ *
+ * @return the constructed version of a tag with the P/C bit set to 1
+ */
+ public final int getConstructedTag()
+ {
+ return getValue() | 0x20000000 ;
+ }
}
Added: incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/primitives/ContextSpecificTag.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ber-codec/src/java/org/apache/snickers/ber/primitives/ContextSpecificTag.java Sat May 29 20:56:35 2004
@@ -0,0 +1,40 @@
+/*
+ * 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.primitives ;
+
+
+import org.apache.snickers.ber.TagEnum ;
+import org.apache.snickers.ber.Tag;
+import org.apache.snickers.ber.TypeClass;
+
+
+/**
+ * Easy to use tag with public constructor for the CONTEXT_SPECIFIC type class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ * Project</a>
+ * @version $Rev$
+ */
+public class ContextSpecificTag extends TagEnum
+{
+ public ContextSpecificTag( int id, boolean isConstructed )
+ {
+ super( ( isConstructed ? "constructed " : "primitive " )
+ + "[" + id + "]", Tag.getIntEncodedTag( TypeClass.CONTEXT_SPECIFIC,
+ id, isConstructed ), id ) ;
+ }
+}
Modified: incubator/directory/snickers/trunk/ber-codec/src/test/org/apache/snickers/ber/TagTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ber-codec/src/test/org/apache/snickers/ber/TagTest.java (original)
+++ incubator/directory/snickers/trunk/ber-codec/src/test/org/apache/snickers/ber/TagTest.java Sat May 29 20:56:35 2004
@@ -18,6 +18,7 @@
import org.apache.commons.lang.ArrayUtils ;
+import org.apache.snickers.ber.primitives.UniversalTag;
import junit.framework.TestCase ;
@@ -281,6 +282,66 @@
catch ( Throwable t )
{
assertNotNull( t ) ;
+ }
+ }
+
+
+ public void testGetIntEncodedTag()
+ {
+ assertEquals( UniversalTag.INTEGER.getPrimitiveTag(),
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL,
+ UniversalTag.INTEGER.getTagId(), false ) ) ;
+
+ assertEquals( 0x01000000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 1, false ) ) ;
+
+ assertEquals( 0x0F000000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 15, false ) ) ;
+
+ assertEquals( 0x1E000000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 30, false ) ) ;
+
+ assertEquals( 0x1F1F0000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 31, false ) ) ;
+
+ assertEquals( 0x1F7E0000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 126, false ) ) ;
+
+ assertEquals( 0x1F7F0000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 127, false ) ) ;
+
+ assertEquals( 0x1F810000,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 128, false ) ) ;
+
+ assertEquals( 0x1F810100,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, 129, false ) ) ;
+
+ assertEquals( 0x3FFF7E00,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, (1<<14)-2, true ) ) ;
+
+ assertEquals( 0x1FFF7F00,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, (1<<14)-1, false ) ) ;
+
+ assertEquals( 0xDF818000,
+ Tag.getIntEncodedTag( TypeClass.PRIVATE, (1<<14), false ) ) ;
+
+ assertEquals( 0x5F818001,
+ Tag.getIntEncodedTag( TypeClass.APPLICATION, (1<<14)+1, false ) ) ;
+
+ assertEquals( 0x9FFFFF7E,
+ Tag.getIntEncodedTag( TypeClass.CONTEXT_SPECIFIC,
+ (1<<21)-2, false ) ) ;
+
+ assertEquals( 0x1FFFFF7F,
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, (1<<21)-1, false ) ) ;
+
+ try
+ {
+ Tag.getIntEncodedTag( TypeClass.UNIVERSAL, (1<<21), false ) ;
+ fail( "should never get here due to an exception" ) ;
+ }
+ catch( IllegalArgumentException e )
+ {
}
}
}
Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/CompareRequestRule.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/CompareRequestRule.java Sat May 29 20:56:35 2004
@@ -0,0 +1,29 @@
+/*
+ * 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.ldap ;
+
+
+/**
+ * Document this class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ * Project</a>
+ * @version $Rev$
+ */
+public class CompareRequestRule
+{
+}
Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/CompareRequestRuleTest.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/CompareRequestRuleTest.java Sat May 29 20:56:35 2004
@@ -0,0 +1,67 @@
+/*
+ * 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.ldap ;
+
+
+import java.nio.ByteBuffer ;
+
+import org.apache.ldap.common.message.* ;
+import org.apache.snickers.ber.TupleTreeDecoder ;
+import org.apache.snickers.ber.DefaultMutableTupleNode ;
+import org.apache.commons.codec.stateful.CallbackHistory ;
+
+
+/**
+ * Document this class.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ * Project</a>
+ * @version $Rev$
+ */
+public class CompareRequestRuleTest
+{
+
+ public void testBindResponseOutput() throws Exception
+ {
+ // build the PDU
+ BindResponseImpl resp = new BindResponseImpl( 540 ) ;
+ resp.setServerSaslCreds( "hello".getBytes() ) ;
+ LdapResultImpl result = new LdapResultImpl( resp ) ;
+ result.setResultCode( ResultCodeEnum.BUSY ) ;
+ result.setErrorMessage( "An Error Message!" ) ;
+ result.setMatchedDn( "uid=akarasulu,dc=example,dc=com" ) ;
+ ReferralImpl referral = new ReferralImpl( result ) ;
+ referral.addLdapUrl( "hello" ) ;
+ referral.addLdapUrl( "world" ) ;
+ result.setReferral( referral ) ;
+ resp.setLdapResult( result ) ;
+ MessageEncoder encoder = new MessageEncoder() ;
+ byte[] pdu = encoder.encode( resp ) ;
+ ByteBuffer buf = ByteBuffer.wrap( pdu ) ;
+
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ CallbackHistory cb = new CallbackHistory() ;
+ decoder.setCallback( cb ) ;
+ decoder.decode( buf ) ;
+ DefaultMutableTupleNode node = ( DefaultMutableTupleNode ) cb.getMostRecent() ;
+ StringBuffer sb = new StringBuffer() ;
+ node.printDepthFirst( sb, 0 ) ;
+ System.out.println( sb.toString() ) ;
+ }
+
+
+}
Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapDigesterFactory.java Sat May 29 20:56:35 2004
@@ -0,0 +1,45 @@
+/*
+ * 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.ldap ;
+
+
+import org.apache.snickers.ber.digester.BERDigester;
+
+
+/**
+ * A factory that creates a digester for processing LDAPv3 message PDUs.
+ *
+ * @todo extract a protocol independent DigesterFactory interface from this and
+ * put it back into the ber-codec then have this class implement that interface.
+ * Determine if we want to have factories instantiate and configure (build?)
+ * digesters using configuration files?
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ * Project</a>
+ * @version $Rev$
+ */
+public class LdapDigesterFactory
+{
+ public BERDigester create()
+ {
+ BERDigester digester = new BERDigester() ;
+
+
+
+ return digester ;
+ }
+}
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapTag.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapTag.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/LdapTag.java Sat May 29 20:56:35 2004
@@ -23,6 +23,7 @@
import java.util.List ;
import org.apache.snickers.ber.TagEnum ;
+import org.apache.snickers.ber.primitives.ContextSpecificTag;
/**
@@ -36,7 +37,7 @@
/** the bind request tag encoded as an integer */
private static final int BIND_REQUEST_TAG = 0x60000000 ;
/** the bind response tag encoded as an integer */
- private static final int BIND_RESPONSE_TAG = 0x61000000 ;
+ private static final int BIND_RESPONSE_TAG = 0x41000000 ;
/** the unbind request tag encoded as an integer */
private static final int UNBIND_REQUEST_TAG = 0x42000000 ;
@@ -199,6 +200,14 @@
public static final LdapTag EXTENDED_RESPONSE = new LdapTag(
"EXTENDED_RESPONSE", EXTENDED_RESPONSE_TAG,
EXTENDED_RESPONSE_ID ) ;
+
+ /** Context specific tag used for LDAPResult referrals */
+ public static final ContextSpecificTag REFERRAL_TAG =
+ new ContextSpecificTag( 3, true ) ;
+
+ /** Context specific tag used for BindResponse serverSaslCreds */
+ public static final ContextSpecificTag SERVER_SASL_CREDS_TAG =
+ new ContextSpecificTag( 7, true ) ;
// -----------------------------------------------------------------------
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/BindResponseRuleTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/BindResponseRuleTest.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/BindResponseRuleTest.java Sat May 29 20:56:35 2004
@@ -25,6 +25,7 @@
import org.apache.snickers.ber.digester.BERDigester ;
import org.apache.snickers.ber.* ;
+import org.apache.snickers.ber.primitives.UniversalTag;
import org.apache.snickers.ber.digester.rules.PrimitiveIntDecodeRule ;
import org.apache.snickers.ber.digester.rules.PrimitiveOctetStringRule ;
@@ -94,42 +95,52 @@
{
int[] pattern = new int[2] ;
- pattern[0] = 0x10000000 ;
- pattern[1] = 0x02000000 ;
+
+ // -------------------------------------------
+ // build pattern and addRule for the messageId
+ // -------------------------------------------
+ pattern[0] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag() ;
+ pattern[1] = UniversalTag.INTEGER.getPrimitiveTag() ;
digester.addRule( pattern, new PrimitiveIntDecodeRule() ) ;
- // for the BindResponse and the LdapResult
- pattern[1] = 0x41000000 ;
+
+ // -----------------------------------------------
+ // modify pattern and addRule for the BindResponse
+ // -----------------------------------------------
+ pattern[1] = LdapTag.BIND_RESPONSE.getPrimitiveTag() ;
digester.addRule( pattern, new BindResponseRule() ) ;
+
+ // -----------------------------------------------
+ // modify pattern and addRule for the BindResponse
+ // -----------------------------------------------
pattern = new int[3] ;
- pattern[0] = 0x10000000 ;
- pattern[1] = 0x41000000 ;
+ pattern[0] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag() ;
+ pattern[1] = LdapTag.BIND_RESPONSE.getPrimitiveTag() ;
// for the resultCode
- pattern[2] = 0x0a000000 ;
- digester.addRule( pattern, new ResultCodeRule() ) ;
+ pattern[2] = UniversalTag.ENUMERATED.getPrimitiveTag() ;
// for matchedDN and errorMessage
- pattern[2] = 0x04000000 ;
+ pattern[2] = UniversalTag.OCTET_STRING.getPrimitiveTag() ;
digester.addRule( pattern, new ResultMatchedDNRule() ) ;
digester.addRule( pattern, new ErrorMessageRule() ) ;
// for referral
- pattern[2] = 0x83000000 ;
+ pattern[2] = LdapTag.REFERRAL_TAG.getPrimitiveTag() ;
digester.addRule( pattern, new ReferralRule() ) ;
// for serverSaslCreds
- pattern[2] = 0x87000000 ;
+ pattern[2] = LdapTag.SERVER_SASL_CREDS_TAG.getPrimitiveTag() ;
TagEnum tag = new TagEnum( "ServerSaslCreds", 0x87000000, 7 ) {} ;
digester.addRule( pattern, new PrimitiveOctetStringRule( tag ) ) ;
// for LDAPURLs of referral
pattern = new int[4] ;
- pattern[0] = 0x10000000 ;
- pattern[1] = 0x41000000 ;
- pattern[2] = 0x83000000 ;
- pattern[3] = 0x04000000 ;
+ pattern[0] = UniversalTag.SEQUENCE_SEQUENCE_OF.getPrimitiveTag() ;
+ pattern[1] = LdapTag.BIND_RESPONSE.getPrimitiveTag() ;
+ pattern[2] = LdapTag.REFERRAL_TAG.getPrimitiveTag() ;
+ pattern[3] = UniversalTag.OCTET_STRING.getPrimitiveTag() ;
digester.addRule( pattern, new ReferralUrlRule() ) ;
// build the PDU
Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/RuleTestCase.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/RuleTestCase.java Sat May 29 20:56:35 2004
@@ -0,0 +1,36 @@
+/*
+ * 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.ldap.testutils ;
+
+
+import java.nio.ByteBuffer ;
+
+import junit.framework.TestCase ;
+import org.apache.ldap.common.message.Message ;
+
+
+/**
+ * Base test case used for testing the operation of digester rules.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ * Project</a>
+ * @version $Rev$
+ */
+public abstract class RuleTestCase extends TestCase
+{
+ protected abstract Message getTestMessage( Object[] args ) ;
+}
Added: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/TestUtils.java
==============================================================================
--- (empty file)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/testutils/TestUtils.java Sat May 29 20:56:35 2004
@@ -0,0 +1,79 @@
+/*
+ * 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.ldap.testutils ;
+
+
+import java.nio.ByteBuffer ;
+
+import org.apache.commons.codec.stateful.CallbackHistory ;
+
+import org.apache.ldap.common.message.Message ;
+import org.apache.ldap.common.message.MessageEncoder ;
+
+import org.apache.snickers.ber.TupleTreeDecoder ;
+import org.apache.snickers.ber.DefaultMutableTupleNode ;
+
+
+/**
+ * Utilities functions for use by test cases and for debugging.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory
+ * Project</a>
+ * @version $Rev$
+ */
+public class TestUtils
+{
+ /**
+ * Generates the tuple tree for an LDAP Message PDU.
+ *
+ * @param pdu the LDAP message PDU to generate the tree for
+ * @return the root node of the tuple tree
+ * @throws Exception if there are any problems generating the Tuple tree
+ */
+ public static DefaultMutableTupleNode getTupleTree( Message pdu )
+ throws Exception
+ {
+ DefaultMutableTupleNode node = null ;
+ MessageEncoder encoder = new MessageEncoder() ;
+ ByteBuffer buf = ByteBuffer.wrap( encoder.encode( pdu ) ) ;
+ TupleTreeDecoder decoder = new TupleTreeDecoder() ;
+ CallbackHistory cb = new CallbackHistory() ;
+
+ decoder.setCallback( cb ) ;
+ decoder.decode( buf ) ;
+ node = ( DefaultMutableTupleNode ) cb.getMostRecent() ;
+ return node ;
+ }
+
+
+ /**
+ * Generates a string containing the pretty printed and nested tuple tree
+ * for an LDAP Message PDU.
+ *
+ * @param pdu the LDAP message PDU to print the tree for
+ * @return a string containing the pretty printed and nested tuple tree
+ * @throws Exception if there are any problems generating the Tuple tree
+ */
+ public static String printTupleTree( Message pdu ) throws Exception
+ {
+ DefaultMutableTupleNode node = null ;
+ StringBuffer sb = new StringBuffer() ;
+ node = getTupleTree( pdu ) ;
+ node.printDepthFirst( sb, 0 ) ;
+ return sb.toString() ;
+ }
+}
Modified: incubator/directory/snickers/trunk/project.xml
==============================================================================
--- incubator/directory/snickers/trunk/project.xml (original)
+++ incubator/directory/snickers/trunk/project.xml Sat May 29 20:56:35 2004
@@ -159,7 +159,7 @@
</includes>
<excludes>
- <exclude></exclude>
+ <exclude>**/testutils/*</exclude>
</excludes>
<resources>