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 2008/08/05 06:08:57 UTC

svn commit: r682578 - /directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/add/AddIT.java

Author: akarasulu
Date: Mon Aug  4 21:08:57 2008
New Revision: 682578

URL: http://svn.apache.org/viewvc?rev=682578&view=rev
Log:
adding more referral handling tests on add operations

Modified:
    directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/add/AddIT.java

Modified: directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/add/AddIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/add/AddIT.java?rev=682578&r1=682577&r2=682578&view=diff
==============================================================================
--- directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/add/AddIT.java (original)
+++ directory/apacheds/branches/bigbang/server-integ/src/test/java/org/apache/directory/server/operations/add/AddIT.java Mon Aug  4 21:08:57 2008
@@ -22,6 +22,7 @@
 
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
+import javax.naming.ReferralException;
 import javax.naming.directory.Attribute;
 import javax.naming.directory.Attributes;
 import javax.naming.directory.DirContext;
@@ -29,25 +30,37 @@
 import javax.naming.directory.SchemaViolationException;
 import javax.naming.directory.SearchControls;
 import javax.naming.directory.SearchResult;
+import javax.naming.ldap.LdapContext;
 
 import netscape.ldap.LDAPAttribute;
 import netscape.ldap.LDAPAttributeSet;
 import netscape.ldap.LDAPConnection;
+import netscape.ldap.LDAPConstraints;
+import netscape.ldap.LDAPControl;
 import netscape.ldap.LDAPEntry;
 import netscape.ldap.LDAPException;
+import netscape.ldap.LDAPResponse;
+import netscape.ldap.LDAPResponseListener;
+import netscape.ldap.LDAPSearchConstraints;
 
 import org.apache.directory.server.core.integ.Level;
 import org.apache.directory.server.core.integ.annotations.ApplyLdifs;
 import org.apache.directory.server.core.integ.annotations.CleanupLevel;
 
 import org.apache.directory.server.integ.SiRunner;
-import org.apache.directory.server.integ.ServerIntegrationUtils;
+import static org.apache.directory.server.integ.ServerIntegrationUtils.getWiredConnection;
+import static org.apache.directory.server.integ.ServerIntegrationUtils.getWiredContext;
+import static org.apache.directory.server.integ.ServerIntegrationUtils.getWiredContextThrowOnRefferal;
+
 import org.apache.directory.server.newldap.LdapServer;
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.message.AttributeImpl;
 import org.apache.directory.shared.ldap.message.AttributesImpl;
+import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static org.junit.Assert.fail;
 import static org.junit.Assert.assertTrue;
@@ -65,24 +78,45 @@
 @RunWith ( SiRunner.class ) 
 @CleanupLevel ( Level.SUITE )
 @ApplyLdifs( {
-    // Entry # 1
+    // Entry # 0
     "dn: cn=The Person,ou=system\n" +
     "objectClass: person\n" +
     "objectClass: top\n" +
     "cn: The Person\n" +
     "description: this is a person\n" +
-    "sn: Person\n\n" 
+    "sn: Person\n\n" + 
+    // Entry # 1
+    "dn: uid=akarasulu,ou=users,ou=system\n" +
+    "objectClass: uidObject\n" +
+    "objectClass: person\n" +
+    "objectClass: top\n" +
+    "uid: akarasulu\n" +
+    "cn: Alex Karasulu\n" +
+    "sn: karasulu\n\n" + 
+    // Entry # 2
+    "dn: ou=Computers,uid=akarasulu,ou=users,ou=system\n" +
+    "objectClass: organizationalUnit\n" +
+    "objectClass: top\n" +
+    "ou: computers\n" +
+    "description: Computers for Alex\n" +
+    "seeAlso: ou=Machines,uid=akarasulu,ou=users,ou=system\n\n" + 
+    // Entry # 3
+    "dn: uid=akarasuluref,ou=users,ou=system\n" +
+    "objectClass: uidObject\n" +
+    "objectClass: referral\n" +
+    "objectClass: top\n" +
+    "uid: akarasuluref\n" +
+    "ref: ldap://localhost:10389/uid=akarasulu,ou=users,ou=system\n" + 
+    "ref: ldap://foo:10389/uid=akarasulu,ou=users,ou=system\n" +
+    "ref: ldap://bar:10389/uid=akarasulu,ou=users,ou=system\n\n"
     }
 )
 public class AddIT
 {
+    private static final Logger LOG = LoggerFactory.getLogger( AddIT.class );
     private static final String RDN = "cn=The Person";
 
-    static final String HOST = "localhost";
-    static final String USER = "uid=admin,ou=system";
-    static final String PASSWORD = "secret";
-    static final String BASE = "ou=system";
-
+    private static final String BASE = "ou=system";
 
 
     public static LdapServer ldapServer;
@@ -96,7 +130,7 @@
     @Test
     public void testAddObjectClasses() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
 
         // modify object classes, add two more
         Attributes attributes = new AttributesImpl( true );
@@ -129,7 +163,7 @@
     @Test
     public void testModifyDescription() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
 
         String newDescription = "More info on the user ...";
 
@@ -158,7 +192,7 @@
     @Test
     public void testAddWithMissingRequiredAttributes() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
 
         // person without sn
         Attributes attrs = new AttributesImpl();
@@ -190,7 +224,7 @@
     @Test
     public void testAddEntryWithTwoDescriptions() throws Exception
     {
-        LDAPConnection con = ServerIntegrationUtils.getWiredConnection( ldapServer );
+        LDAPConnection con = getWiredConnection( ldapServer );
         LDAPAttributeSet attrs = new LDAPAttributeSet();
         LDAPAttribute ocls = new LDAPAttribute( "objectclass", new String[]
             { "top", "person" } );
@@ -232,7 +266,7 @@
     @Test
     public void testAddEntryWithTwoDescriptionsVariant() throws Exception
     {
-        LDAPConnection con = ServerIntegrationUtils.getWiredConnection( ldapServer );
+        LDAPConnection con = getWiredConnection( ldapServer );
         LDAPAttributeSet attrs = new LDAPAttributeSet();
         LDAPAttribute ocls = new LDAPAttribute( "objectclass", new String[]
             { "top", "person" } );
@@ -275,7 +309,7 @@
     @Test
     public void testAddEntryWithTwoDescriptionsSecondVariant() throws Exception
     {
-        LDAPConnection con = ServerIntegrationUtils.getWiredConnection( ldapServer );
+        LDAPConnection con = getWiredConnection( ldapServer );
         LDAPAttributeSet attrs = new LDAPAttributeSet();
         LDAPAttribute ocls = new LDAPAttribute( "objectclass", new String[]
             { "top", "person" } );
@@ -309,7 +343,7 @@
 
     
     /**
-     * Try to add entry with invalid number of values for a single-valued atribute
+     * Try to add entry with invalid number of values for a single-valued attribute
      * 
      * @throws NamingException if we fail to connect and add entries
      * @see <a href="http://issues.apache.org/jira/browse/DIRSERVER-614">DIRSERVER-614</a>
@@ -317,7 +351,7 @@
     @Test
     public void testAddWithInvalidNumberOfAttributeValues() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
         
         // add inetOrgPerson with two displayNames
         Attributes attrs = new AttributesImpl();
@@ -351,7 +385,7 @@
     @Test
     public void testAddAlias() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
 
         // Create entry
         Attributes entry = new AttributesImpl();
@@ -391,7 +425,7 @@
     @Test
     public void testAddAliasInContainer() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
 
         // Create container
         Attributes container = new AttributesImpl();
@@ -480,7 +514,7 @@
     @Test
     public void testAddDeleteAlias() throws Exception
     {
-        DirContext ctx = ( DirContext ) ServerIntegrationUtils.getWiredContext( ldapServer ).lookup( "ou=system" );
+        DirContext ctx = ( DirContext ) getWiredContext( ldapServer ).lookup( BASE );
 
         // Create entry ou=favorite,dc=example,dc=com
         Attributes entry = new AttributesImpl();
@@ -509,4 +543,131 @@
         ctx.destroySubcontext( rdnAlias ); //Waiting for Connection.reply()
         ctx.destroySubcontext( entryRdn );
     }
+    
+    
+    /**
+     * Tests add operation on referral entry with the ManageDsaIT control.
+     */
+    @Test
+    public void testOnReferralWithManageDsaITControl() throws Exception
+    {
+        LDAPConnection conn = getWiredConnection( ldapServer );
+        LDAPConstraints constraints = new LDAPSearchConstraints();
+        constraints.setClientControls( new LDAPControl( LDAPControl.MANAGEDSAIT, true, new byte[0] ) );
+        constraints.setServerControls( new LDAPControl( LDAPControl.MANAGEDSAIT, true, new byte[0] ) );
+        conn.setConstraints( constraints );
+        
+        // add success
+        LDAPAttributeSet attrSet = new LDAPAttributeSet();
+        attrSet.add( new LDAPAttribute( "objectClass", "organizationalUnit" ) );
+        attrSet.add( new LDAPAttribute( "ou", "UnderReferral" ) );
+        LDAPEntry entry = new LDAPEntry( "ou=UnderReferral,uid=akarasuluref,ou=users,ou=system", attrSet );
+        
+        conn.add( entry, constraints );
+        
+        LDAPEntry reread = conn.read( "ou=UnderReferral,uid=akarasuluref,ou=users,ou=system", 
+            ( LDAPSearchConstraints ) constraints );
+        assertEquals( "ou=UnderReferral,uid=akarasuluref,ou=users,ou=system", reread.getDN() );
+        
+        conn.disconnect();
+    }
+    
+    
+    /**
+     * Tests referral handling when an ancestor is a referral.
+     */
+    @Test 
+    public void testAncestorReferral() throws Exception
+    {
+        LOG.debug( "" );
+
+        LDAPConnection conn = getWiredConnection( ldapServer );
+        LDAPConstraints constraints = new LDAPConstraints();
+        conn.setConstraints( constraints );
+
+        // referrals failure
+        LDAPAttributeSet attrSet = new LDAPAttributeSet();
+        attrSet.add( new LDAPAttribute( "objectClass", "organizationalUnit" ) );
+        attrSet.add( new LDAPAttribute( "ou", "UnderReferral" ) );
+        LDAPEntry entry = new LDAPEntry( "ou=UnderReferral,ou=Computers,uid=akarasuluref,ou=users,ou=system", attrSet );
+        
+        LDAPResponseListener listener = conn.add( entry, null, constraints );
+        LDAPResponse response = listener.getResponse();
+        assertEquals( ResultCodeEnum.REFERRAL.getValue(), response.getResultCode() );
+
+        assertEquals( "ldap://localhost:10389/ou=UnderReferral,ou=Computers,uid=akarasulu,ou=users,ou=system", 
+            response.getReferrals()[0] );
+        assertEquals( "ldap://foo:10389/ou=UnderReferral,ou=Computers,uid=akarasulu,ou=users,ou=system", 
+            response.getReferrals()[1] );
+        assertEquals( "ldap://bar:10389/ou=UnderReferral,ou=Computers,uid=akarasulu,ou=users,ou=system", 
+            response.getReferrals()[2] );
+
+        conn.disconnect();
+    }
+
+    
+    /**
+     * Tests add operation on normal and referral entries without the 
+     * ManageDsaIT control. Referrals are sent back to the client with a
+     * non-success result code.
+     */
+    @Test
+    public void testOnReferral() throws Exception
+    {
+        LDAPConnection conn = getWiredConnection( ldapServer );
+        LDAPConstraints constraints = new LDAPConstraints();
+        constraints.setReferrals( false );
+        conn.setConstraints( constraints );
+        
+        // referrals failure
+
+        LDAPAttributeSet attrSet = new LDAPAttributeSet();
+        attrSet.add( new LDAPAttribute( "objectClass", "organizationalUnit" ) );
+        attrSet.add( new LDAPAttribute( "ou", "UnderReferral" ) );
+        LDAPEntry entry = new LDAPEntry( "ou=UnderReferral,uid=akarasuluref,ou=users,ou=system", attrSet );
+        
+        LDAPResponseListener listener = null;
+        LDAPResponse response = null;
+        listener = conn.add( entry, null, constraints );
+        response = listener.getResponse();
+
+        assertEquals( ResultCodeEnum.REFERRAL.getValue(), response.getResultCode() );
+
+        assertEquals( "ldap://localhost:10389/ou=UnderReferral,uid=akarasulu,ou=users,ou=system", response.getReferrals()[0] );
+        assertEquals( "ldap://foo:10389/ou=UnderReferral,uid=akarasulu,ou=users,ou=system", response.getReferrals()[1] );
+        assertEquals( "ldap://bar:10389/ou=UnderReferral,uid=akarasulu,ou=users,ou=system", response.getReferrals()[2] );
+
+        conn.disconnect();
+    }
+    
+    
+    /**
+     * Tests add operation on normal and referral entries without the 
+     * ManageDsaIT control using JNDI instead of the Netscape API. Referrals 
+     * are sent back to the client with a non-success result code.
+     */
+    @Test
+    public void testThrowOnReferralWithJndi() throws Exception
+    {
+        LdapContext ctx = getWiredContextThrowOnRefferal( ldapServer );
+        SearchControls controls = new SearchControls();
+        controls.setReturningAttributes( new String[0] );
+        controls.setSearchScope( SearchControls.OBJECT_SCOPE );
+        
+        // add failure
+        Attributes attrs = new AttributesImpl( "objectClass", "organizationalUnit" );
+        attrs.put( "ou", "UnderReferral" );
+        
+        try
+        {
+            ctx.createSubcontext( "ou=UnderReferral,uid=akarasuluref,ou=users,ou=system", attrs );
+            fail( "Should never get here: add should fail with ReferralExcpetion" );
+        }
+        catch( ReferralException e )
+        {
+            assertEquals( "ldap://localhost:10389/ou=UnderReferral,uid=akarasulu,ou=users,ou=system", e.getReferralInfo() );
+        }
+
+        ctx.close();
+    }
 }