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/11/02 23:00:19 UTC
svn commit: rev 56426 - in incubator/directory/snickers/trunk/ldap-ber-provider/src: java/org/apache/snickers/ldap test/org/apache/snickers/ldap test/org/apache/snickers/ldap/decoder/testutils test/org/apache/snickers/ldap/encoder test/org/apache/snickers/ldap/encoder/add
Author: akarasulu
Date: Tue Nov 2 14:00:18 2004
New Revision: 56426
Modified:
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersEncoder.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersProvider.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/SnickersDecoderTest.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/RuleTestCase.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/TestUtils.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/AbstractEncoderTestCase.java
incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/add/AddRequestEncoderTest.java
Log:
fixed bugs and changed out interfaces on encoder
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersEncoder.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersEncoder.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersEncoder.java Tue Nov 2 14:00:18 2004
@@ -16,11 +16,12 @@
*/
package org.apache.snickers.ldap;
-import org.apache.ldap.common.message.spi.EncoderSpi;
import org.apache.ldap.common.message.spi.ProviderException;
import org.apache.ldap.common.message.spi.Provider;
+import org.apache.ldap.common.message.spi.ProviderEncoder;
import org.apache.commons.codec.stateful.EncoderCallback;
import org.apache.commons.codec.stateful.StatefulEncoder;
+import org.apache.commons.codec.stateful.EncoderMonitor;
import org.apache.commons.codec.EncoderException;
import org.apache.snickers.ldap.encoder.SnickersLdapEncoder;
import org.apache.snickers.ber.digester.rules.ByteAccumulator;
@@ -35,10 +36,10 @@
/**
* Snickers LDAP BER provider's encoder.
*
- * @author <a href="mailto:directory-dev@incubator.apache.org"> Apache Directory
- * Project</a> $Rev$
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev$
*/
-public class SnickersEncoder implements EncoderSpi
+public class SnickersEncoder implements ProviderEncoder
{
private final Provider provider;
private final OutputCallback outCb;
@@ -56,7 +57,7 @@
}
- public void encode( Object lock, OutputStream out, Object obj )
+ public void encodeBlocking( Object lock, OutputStream out, Object obj )
throws ProviderException
{
synchronized( encoder )
@@ -78,7 +79,29 @@
}
- public byte[] encode( Object obj ) throws ProviderException
+ public ByteBuffer encodeBlocking( Object obj ) throws ProviderException
+ {
+ synchronized( encoder )
+ {
+ encoder.setCallback( accCb );
+
+ try
+ {
+ encoder.encode( obj );
+ }
+ catch ( EncoderException e )
+ {
+ ProviderException pe = new ProviderException( provider,
+ "Snickers encoder failed to encode object: " + obj );
+ throw pe;
+ }
+
+ return accCb.getEncoded() ;
+ }
+ }
+
+
+ public byte[] encodeToArray( Object obj ) throws ProviderException
{
synchronized( encoder )
{
@@ -108,6 +131,24 @@
public Provider getProvider()
{
return provider;
+ }
+
+
+ public void encode( Object obj ) throws EncoderException
+ {
+ this.encoder.encode( obj );
+ }
+
+
+ public void setCallback( EncoderCallback cb )
+ {
+ this.encoder.setCallback( cb );
+ }
+
+
+ public void setEncoderMonitor( EncoderMonitor monitor )
+ {
+ encoder.setEncoderMonitor( monitor );
}
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersProvider.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersProvider.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/SnickersProvider.java Tue Nov 2 14:00:18 2004
@@ -74,7 +74,7 @@
* @throws org.apache.ldap.common.message.spi.ProviderException
* if the provider or its encoder cannot be found
*/
- public EncoderSpi getEncoder() throws ProviderException
+ public ProviderEncoder getEncoder() throws ProviderException
{
return encoder;
}
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/SnickersDecoderTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/SnickersDecoderTest.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/SnickersDecoderTest.java Tue Nov 2 14:00:18 2004
@@ -21,6 +21,7 @@
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.util.Properties;
+import java.nio.ByteBuffer;
import org.apache.ldap.common.message.Message;
import org.apache.ldap.common.message.MessageEncoder;
@@ -86,6 +87,9 @@
env.setProperty( Provider.BERLIB_PROVIDER,
"org.apache.ldap.common.berlib.snacc.SnaccProvider" );
MessageEncoder encoder = new MessageEncoder( env );
- return new ByteArrayInputStream( encoder.encode( msg ) );
+ ByteBuffer buf = encoder.encodeBlocking( msg );
+ byte[] bites = new byte[buf.remaining()];
+ buf.get( bites );
+ return new ByteArrayInputStream( bites );
}
}
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/RuleTestCase.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/RuleTestCase.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/RuleTestCase.java Tue Nov 2 14:00:18 2004
@@ -72,16 +72,12 @@
public ByteBuffer snaccEncode( Message req )
{
- ByteBuffer buf = null ;
-
// @todo replace this with the Snickers encoder or use serialized
// PDUs stubs for test cases rather than decoding live.
Properties env = new Properties();
env.setProperty( Provider.BERLIB_PROVIDER,
"org.apache.ldap.common.berlib.snacc.SnaccProvider" );
MessageEncoder encoder = new MessageEncoder( env );
- buf = ByteBuffer.wrap( encoder.encode( req ) ) ;
-
- return buf ;
+ return encoder.encodeBlocking( req );
}
}
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/TestUtils.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/TestUtils.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/testutils/TestUtils.java Tue Nov 2 14:00:18 2004
@@ -57,7 +57,7 @@
env.setProperty( Provider.BERLIB_PROVIDER,
"org.apache.ldap.common.berlib.snacc.SnaccProvider" );
MessageEncoder encoder = new MessageEncoder( env );
- ByteBuffer buf = ByteBuffer.wrap( encoder.encode( pdu ) ) ;
+ ByteBuffer buf = encoder.encodeBlocking( pdu ) ;
TupleTreeDecoder decoder = new TupleTreeDecoder() ;
CallbackHistory cb = new CallbackHistory() ;
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/AbstractEncoderTestCase.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/AbstractEncoderTestCase.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/AbstractEncoderTestCase.java Tue Nov 2 14:00:18 2004
@@ -137,7 +137,7 @@
MessageDecoder decoder = new MessageDecoder( env );
ByteArrayInputStream in = new ByteArrayInputStream( accumulator.array(),
0, accumulator.position() );
- return decoder.decode( null, in );
+ return ( Message ) decoder.decode( null, in );
}
Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/add/AddRequestEncoderTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/add/AddRequestEncoderTest.java (original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/encoder/add/AddRequestEncoderTest.java Tue Nov 2 14:00:18 2004
@@ -17,6 +17,9 @@
package org.apache.snickers.ldap.encoder.add;
+import javax.naming.directory.Attribute;
+import javax.naming.NamingException;
+
import org.apache.snickers.ldap.encoder.AbstractEncoderTestCase;
import org.apache.snickers.ber.TupleNode;
@@ -36,7 +39,7 @@
/**
* Tests the encode method.
*/
- public void testEncode()
+ public void testEncode() throws NamingException
{
AddRequestImpl request = new AddRequestImpl( 33 );
request.setName( "dc=apache,dc=org" );
@@ -51,6 +54,25 @@
encode( ( DefaultMutableTupleNode ) node );
// Test to see if original stub equals the round trip generated stub
- assertTrue( request.equals( decode() ) );
+ AddRequest decoded = ( AddRequest ) super.decode();
+
+ /*
+ * Snacc is not preserving attribute order for some reason when building
+ * attributes so we are going to manually test things instead.
+ */
+ assertEquals( request.getName(), decoded.getName() );
+ assertEquals( request.getResponseType(), decoded.getResponseType() );
+ assertEquals( request.getType(), decoded.getType() );
+
+ // when there is one attribute we do not see the bug in snacc4j
+ assertEquals( request.getEntry().get( "dc" ), decoded.getEntry().get( "dc" ) );
+ Attribute objectClass = request.getEntry().get( "objectClass" );
+ Attribute decodedObjectClass = decoded.getEntry().get( "objectClass" );
+
+ assertEquals( objectClass.size(), decodedObjectClass.size() );
+ for ( int ii = 0; ii < objectClass.size(); ii++ )
+ {
+ assertTrue( decodedObjectClass.contains( objectClass.get( ii ) ) );
+ }
}
}