You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2018/01/27 05:49:07 UTC

[directory-ldap-api] branch master updated (7390752 -> dc76a22)

This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/directory-ldap-api.git.


    from 7390752  Added the EndTransactionRequest decoder
     new ff794cc  o Added tests for the EndTransactionRequest class o Added the encoding for that operation
     new dc76a22  o Fix failing tests (ByteBuffer was not flipped) o Fix a checkstyle error o Minor typo

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../EndTransactionRequestContainer.java            |   2 +-
 .../EndTransactionRequestDecorator.java            |  68 ++++++
 .../EndTransactionResponseDecorator.java           |   3 +
 .../endTransaction/EndTransactionRequestTest.java  | 227 +++++++++++++++++++++
 .../pwdModify/PasswordModifyResponseTest.java      |   1 -
 5 files changed, 299 insertions(+), 2 deletions(-)
 create mode 100644 ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java

-- 
To stop receiving notification emails like this one, please contact
elecharny@apache.org.

[directory-ldap-api] 02/02: o Fix failing tests (ByteBuffer was not flipped) o Fix a checkstyle error o Minor typo

Posted by el...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-ldap-api.git

commit dc76a2250fad5925f592a15cfa60cba537e3f340
Author: Emmanuel Lécharny <el...@symas.com>
AuthorDate: Sat Jan 27 06:43:47 2018 +0100

    o Fix failing tests (ByteBuffer was not flipped)
    o Fix a checkstyle error
    o Minor typo
---
 .../ads_impl/endTransaction/EndTransactionRequestContainer.java       | 2 +-
 .../ads_impl/endTransaction/EndTransactionRequestDecorator.java       | 2 +-
 .../extended/ads_impl/endTransaction/EndTransactionRequestTest.java   | 4 ++++
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestContainer.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestContainer.java
index 58d6765..14b48cf 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestContainer.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestContainer.java
@@ -35,7 +35,7 @@ public class EndTransactionRequestContainer extends AbstractContainer
 
 
     /**
-     * Creates a new EndTransactionContainer object. We will store one
+     * Creates a new EndTransactionRequestContainer object. We will store one
      * grammar, it's enough ...
      */
     public EndTransactionRequestContainer()
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
index 68bc709..4e4768c 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
@@ -188,7 +188,7 @@ public class EndTransactionRequestDecorator extends ExtendedRequestDecorator<End
         bb.put( TLV.getBytes( requestLength ) );
         
         // The commit flag, if it's not true
-        if ( ! getCommit() )
+        if ( !getCommit() )
         {
             BerValue.encode( bb, false );
         }
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
index 7f03d4a..eeff245 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
@@ -59,6 +59,8 @@ public class EndTransactionRequestTest
         bb.put( new byte[]
             { 0x30, 0x00, // EndTransactionRequest ::= SEQUENCE {
             } );
+        
+        bb.flip();
 
         EndTransactionRequestContainer container = new EndTransactionRequestContainer();
 
@@ -79,6 +81,8 @@ public class EndTransactionRequestTest
                 0x01, 0x01, 0x00       // Commit, TRUE
         } );
 
+        bb.flip();
+
         EndTransactionRequestContainer container = new EndTransactionRequestContainer();
 
         decoder.decode( bb, container );

-- 
To stop receiving notification emails like this one, please contact
elecharny@apache.org.

[directory-ldap-api] 01/02: o Added tests for the EndTransactionRequest class o Added the encoding for that operation

Posted by el...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

elecharny pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/directory-ldap-api.git

commit ff794ccc60ce46ee293652c02f493d5dbb4c01ef
Author: Emmanuel Lécharny <el...@symas.com>
AuthorDate: Sat Jan 27 06:21:17 2018 +0100

    o Added tests for the EndTransactionRequest class
    o Added the encoding for that operation
---
 .../EndTransactionRequestDecorator.java            |  68 +++++++
 .../EndTransactionResponseDecorator.java           |   3 +
 .../endTransaction/EndTransactionRequestTest.java  | 223 +++++++++++++++++++++
 .../pwdModify/PasswordModifyResponseTest.java      |   1 -
 4 files changed, 294 insertions(+), 1 deletion(-)

diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
index 985ff84..68bc709 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestDecorator.java
@@ -20,7 +20,13 @@
 package org.apache.directory.api.ldap.extras.extended.ads_impl.endTransaction;
 
 
+import java.nio.ByteBuffer;
+
 import org.apache.directory.api.asn1.DecoderException;
+import org.apache.directory.api.asn1.EncoderException;
+import org.apache.directory.api.asn1.ber.tlv.BerValue;
+import org.apache.directory.api.asn1.ber.tlv.TLV;
+import org.apache.directory.api.asn1.ber.tlv.UniversalTag;
 import org.apache.directory.api.i18n.I18n;
 import org.apache.directory.api.ldap.codec.api.ExtendedRequestDecorator;
 import org.apache.directory.api.ldap.codec.api.LdapApiService;
@@ -43,6 +49,9 @@ public class EndTransactionRequestDecorator extends ExtendedRequestDecorator<End
     /** The internal EndTransaction request */
     private EndTransactionRequest endTransactionRequest;
 
+    /** stores the length of the request*/
+    private int requestLength = 0;
+
 
     /**
      * Creates a new instance of EndTransactionRequestDecorator.
@@ -135,4 +144,63 @@ public class EndTransactionRequestDecorator extends ExtendedRequestDecorator<End
             throw new RuntimeException( e );
         }
     }
+
+
+    /**
+     * Compute the EndTransactionRequest extended operation length
+     * <pre>
+     * 0x30 L1 
+     *   | 
+     *   +-- 0x01 0x01 commit 
+     *   +-- 0x04 L2 identifier] 
+     * </pre>
+     */
+    /* No qualifier */int computeLengthInternal()
+    {
+        requestLength = 0;
+        
+        if ( !endTransactionRequest.getCommit() )
+        {
+            requestLength = 1 + 1 + 1; // Commit
+        }
+
+        if ( endTransactionRequest.getTransactionId() != null )
+        {
+            int len = endTransactionRequest.getTransactionId().length;
+            requestLength += 1 + TLV.getNbBytes( len ) + len;
+        }
+
+        return 1 + TLV.getNbBytes( requestLength ) + requestLength;
+    }
+
+
+    /**
+     * Encodes the EndTransactionRequest extended operation.
+     * 
+     * @return A ByteBuffer that contains the encoded PDU
+     * @throws org.apache.directory.api.asn1.EncoderException If anything goes wrong.
+     */
+    /* No qualifier */ByteBuffer encodeInternal() throws EncoderException
+    {
+        ByteBuffer bb = ByteBuffer.allocate( computeLengthInternal() );
+
+        bb.put( UniversalTag.SEQUENCE.getValue() );
+        bb.put( TLV.getBytes( requestLength ) );
+        
+        // The commit flag, if it's not true
+        if ( ! getCommit() )
+        {
+            BerValue.encode( bb, false );
+        }
+
+        // The identifier
+        byte[] identifier = endTransactionRequest.getTransactionId();
+
+        if ( identifier != null )
+        {
+            BerValue.encode( bb, identifier  );
+        }
+
+        return bb;
+    }
 }
diff --git a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java
index 860c225..0d194c2 100644
--- a/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java
+++ b/ldap/extras/codec/src/main/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionResponseDecorator.java
@@ -39,6 +39,9 @@ public class EndTransactionResponseDecorator extends ExtendedResponseDecorator<E
     /** The endTransaction response */
     private EndTransactionResponse endTransactionResponse;
 
+    /** stores the length of the request*/
+    private int requestLength = 0;
+
     /**
      * Creates a new instance of EndTransactionResponseDecorator.
      *
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
new file mode 100644
index 0000000..7f03d4a
--- /dev/null
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/endTransaction/EndTransactionRequestTest.java
@@ -0,0 +1,223 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.directory.api.ldap.extras.extended.ads_impl.endTransaction;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.nio.ByteBuffer;
+
+import org.apache.directory.api.asn1.DecoderException;
+import org.apache.directory.api.asn1.EncoderException;
+import org.apache.directory.api.asn1.ber.Asn1Decoder;
+import org.apache.directory.api.ldap.extras.extended.endTransaction.EndTransactionRequest;
+import org.apache.directory.api.util.Strings;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import com.mycila.junit.concurrent.Concurrency;
+import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+
+
+/**
+ * Test the EndTransactionRequest codec
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@RunWith(ConcurrentJunitRunner.class)
+@Concurrency()
+public class EndTransactionRequestTest
+{
+    /**
+     * Test the decoding of a EndTransactionRequest with nothing in it
+     */
+    @Test( expected=DecoderException.class)
+    public void testDecodeEndTransactionRequestEmpty() throws DecoderException
+    {
+        Asn1Decoder decoder = new Asn1Decoder();
+        ByteBuffer bb = ByteBuffer.allocate( 0x02 );
+        bb.put( new byte[]
+            { 0x30, 0x00, // EndTransactionRequest ::= SEQUENCE {
+            } );
+
+        EndTransactionRequestContainer container = new EndTransactionRequestContainer();
+
+        decoder.decode( bb, container );
+    }
+
+
+    /**
+     * Test the decoding of a EndTransactionRequest with an commit but no identifier
+     */
+    @Test( expected=DecoderException.class )
+    public void testEndTransactionRequestCommitNoIdentifier() throws DecoderException
+    {
+        Asn1Decoder decoder = new Asn1Decoder();
+        ByteBuffer bb = ByteBuffer.allocate( 0x05 );
+        bb.put( new byte[]
+            { 0x30, 0x03,              // EndTransactionRequest ::= SEQUENCE {
+                0x01, 0x01, 0x00       // Commit, TRUE
+        } );
+
+        EndTransactionRequestContainer container = new EndTransactionRequestContainer();
+
+        decoder.decode( bb, container );
+    }
+
+
+    /**
+     * Test the decoding of a EndTransactionRequest with an identifier but no commit
+     * @throws EncoderException 
+     */
+    @Test
+    public void testEndTransactionRequestNoCommitIdentifier() throws EncoderException
+    {
+        Asn1Decoder decoder = new Asn1Decoder();
+        ByteBuffer bb = ByteBuffer.allocate( 0x08 );
+        bb.put( new byte[]
+            { 0x30, 0x06,                       // EndTransactionRequest ::= SEQUENCE {
+                0x04, 0x04, 't', 'e', 's', 't'  // identifier (test)
+        } );
+
+        String decodedPdu = Strings.dumpBytes( bb.array() );
+        bb.flip();
+
+        EndTransactionRequestContainer container = new EndTransactionRequestContainer();
+
+        try
+        {
+            decoder.decode( bb, container );
+        }
+        catch ( DecoderException de )
+        {
+            de.printStackTrace();
+            fail( de.getMessage() );
+        }
+        
+        EndTransactionRequest endTransactionRequest = container.getEndTransactionRequest();
+        assertTrue( endTransactionRequest.getCommit() );
+        assertEquals( "test", Strings.utf8ToString( endTransactionRequest.getTransactionId() ) );
+
+        // Check the length
+        assertEquals( 0x08, ( ( EndTransactionRequestDecorator ) endTransactionRequest ).computeLengthInternal() );
+
+        // Check the encoding
+        ByteBuffer bb1 = ( ( EndTransactionRequestDecorator ) endTransactionRequest ).encodeInternal();
+
+        String encodedPdu = Strings.dumpBytes( bb1.array() );
+
+        assertEquals( encodedPdu, decodedPdu );
+    }
+
+
+    /**
+     * Test the decoding of a EndTransactionRequest with an identifier and a commit
+     * @throws EncoderException 
+     */
+    @Test
+    public void testEndTransactionRequesoCommitIdentifier() throws EncoderException
+    {
+        Asn1Decoder decoder = new Asn1Decoder();
+        ByteBuffer bb = ByteBuffer.allocate( 0x0B );
+        bb.put( new byte[]
+            { 0x30, 0x09,                       // EndTransactionRequest ::= SEQUENCE {
+                0x01, 0x01, 0x00,               // Commit, FALSE
+                0x04, 0x04, 't', 'e', 's', 't'  // identifier (test)
+        } );
+
+        String decodedPdu = Strings.dumpBytes( bb.array() );
+        bb.flip();
+
+        EndTransactionRequestContainer container = new EndTransactionRequestContainer();
+
+        try
+        {
+            decoder.decode( bb, container );
+        }
+        catch ( DecoderException de )
+        {
+            de.printStackTrace();
+            fail( de.getMessage() );
+        }
+        
+        EndTransactionRequest endTransactionRequest = container.getEndTransactionRequest();
+        assertFalse( endTransactionRequest.getCommit() );
+        assertEquals( "test", Strings.utf8ToString( endTransactionRequest.getTransactionId() ) );
+
+        // Check the length
+        assertEquals( 0x0B, ( ( EndTransactionRequestDecorator ) endTransactionRequest ).computeLengthInternal() );
+
+        // Check the encoding
+        ByteBuffer bb1 = ( ( EndTransactionRequestDecorator ) endTransactionRequest ).encodeInternal();
+
+        String encodedPdu = Strings.dumpBytes( bb1.array() );
+
+        assertEquals( encodedPdu, decodedPdu );
+    }
+
+
+    /**
+     * Test the decoding of a EndTransactionRequest with an empty identifier and a commit
+     * @throws EncoderException 
+     */
+    @Test
+    public void testEndTransactionRequesoCommitEmptyIdentifier() throws EncoderException
+    {
+        Asn1Decoder decoder = new Asn1Decoder();
+        ByteBuffer bb = ByteBuffer.allocate( 0x07 );
+        bb.put( new byte[]
+            { 0x30, 0x05,                       // EndTransactionRequest ::= SEQUENCE {
+                0x01, 0x01, 0x00,               // Commit, FALSE
+                0x04, 0x00                      // identifier (empty)
+        } );
+
+        String decodedPdu = Strings.dumpBytes( bb.array() );
+        bb.flip();
+
+        EndTransactionRequestContainer container = new EndTransactionRequestContainer();
+
+        try
+        {
+            decoder.decode( bb, container );
+        }
+        catch ( DecoderException de )
+        {
+            de.printStackTrace();
+            fail( de.getMessage() );
+        }
+        
+        EndTransactionRequest endTransactionRequest = container.getEndTransactionRequest();
+        assertFalse( endTransactionRequest.getCommit() );
+        assertEquals( 0, endTransactionRequest.getTransactionId().length );
+
+        // Check the length
+        assertEquals( 0x07, ( ( EndTransactionRequestDecorator ) endTransactionRequest ).computeLengthInternal() );
+
+        // Check the encoding
+        ByteBuffer bb1 = ( ( EndTransactionRequestDecorator ) endTransactionRequest ).encodeInternal();
+
+        String encodedPdu = Strings.dumpBytes( bb1.array() );
+
+        assertEquals( encodedPdu, decodedPdu );
+    }
+}
diff --git a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java
index 3f8767e..baec9e3 100644
--- a/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java
+++ b/ldap/extras/codec/src/test/java/org/apache/directory/api/ldap/extras/extended/ads_impl/pwdModify/PasswordModifyResponseTest.java
@@ -28,7 +28,6 @@ import static org.junit.Assert.fail;
 import java.nio.ByteBuffer;
 
 import org.apache.directory.api.asn1.DecoderException;
-import org.apache.directory.api.asn1.EncoderException;
 import org.apache.directory.api.asn1.ber.Asn1Decoder;
 import org.apache.directory.api.ldap.extras.extended.ads_impl.pwdModify.PasswordModifyResponseContainer;
 import org.apache.directory.api.ldap.extras.extended.ads_impl.pwdModify.PasswordModifyResponseDecorator;

-- 
To stop receiving notification emails like this one, please contact
elecharny@apache.org.