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/12/12 05:25:08 UTC
svn commit: r111633 - in incubator/directory/eve/trunk: . dib/src/java/org/apache/eve dib/src/java/org/apache/eve/jndi/ibs dib/src/test/org/apache/eve/jndi/ibs
Author: akarasulu
Date: Sat Dec 11 20:25:07 2004
New Revision: 111633
URL: http://svn.apache.org/viewcvs?view=rev&rev=111633
Log:
Changes ...
o added checks for entry existance and other things to make sure operations
can proceed or throw the right exception within the exception interceptor
o added property to prevent junit test forks to see if that lowers test time
but it had no effect
o added some serious amounts of tests to make sure everything worked as it
should for exception generation
Note ...
o there are several other checks that need to go in here such as checking to
see if a target entry on a move exists and denying operation because move
to existing entry name is not possible et. cetera.
Added:
incubator/directory/eve/trunk/dib/src/test/org/apache/eve/jndi/ibs/EveExceptionServiceTest.java
Modified:
incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java
incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java
incubator/directory/eve/trunk/project.properties
Modified: incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java?view=diff&rev=111633&p1=incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java&r1=111632&p2=incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java&r2=111633
==============================================================================
--- incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java (original)
+++ incubator/directory/eve/trunk/dib/src/java/org/apache/eve/RootNexus.java Sat Dec 11 20:25:07 2004
@@ -143,7 +143,19 @@
*/
public Name getMatchedDn( Name dn, boolean normalized ) throws NamingException
{
- throw new NotImplementedException();
+ dn = ( Name ) dn.clone();
+
+ while ( dn.size() > 0 )
+ {
+ if ( hasEntry( dn ) )
+ {
+ return dn;
+ }
+
+ dn = dn.getSuffix( 1 );
+ }
+
+ return dn;
}
Modified: incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java?view=diff&rev=111633&p1=incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java&r1=111632&p2=incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java&r2=111633
==============================================================================
--- incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java (original)
+++ incubator/directory/eve/trunk/dib/src/java/org/apache/eve/jndi/ibs/EveExceptionService.java Sat Dec 11 20:25:07 2004
@@ -17,9 +17,14 @@
package org.apache.eve.jndi.ibs;
+import java.util.Map;
import javax.naming.Name;
import javax.naming.NamingException;
+import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
+import javax.naming.directory.ModificationItem;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.Attribute;
import org.apache.eve.jndi.*;
@@ -27,6 +32,9 @@
import org.apache.eve.exception.EveInterceptorException;
import org.apache.ldap.common.exception.LdapException;
import org.apache.ldap.common.exception.*;
+import org.apache.ldap.common.filter.ExprNode;
+import org.apache.ldap.common.name.LdapName;
+import org.apache.ldap.common.message.ResultCodeEnum;
/**
@@ -59,6 +67,12 @@
}
+ /**
+ * Before calling super method which delegates to specific method invocation
+ * analogs we make sure the exception for the before failure or after
+ * failure states is one that implements LdapException interface so we
+ * have something that associates an LDAP error code.
+ */
public void invoke( Invocation invocation ) throws NamingException
{
if ( invocation.getState() == InvocationStateEnum.FAILUREHANDLING )
@@ -122,17 +136,93 @@
if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
{
+ // check if the entry already exists
if ( nexus.hasEntry( normName ) )
{
NamingException ne = new LdapNameAlreadyBoundException();
invocation.setBeforeFailure( ne );
+ ne.setResolvedName( new LdapName( upName ) );
throw ne;
}
+
+ Name parentDn = new LdapName( upName );
+ parentDn = parentDn.getSuffix( 1 );
+
+ // check if we don't have the parent to add to
+ assertHasEntry( "Attempt to add under non-existant parent: ", parentDn, invocation );
+
+ // check if we're trying to add to a parent that is an alias
+ Attributes attrs = nexus.lookup( normName.getSuffix( 1 ) );
+ Attribute objectClass = attrs.get( "objectClass" );
+ if ( objectClass.contains( "alias" ) )
+ {
+ String msg = "Attempt to add entry to alias '" + upName
+ + "' not allowed.";
+ ResultCodeEnum rc = ResultCodeEnum.ALIASPROBLEM;
+ NamingException e = new LdapNamingException( msg, rc );
+ e.setResolvedName( parentDn );
+ invocation.setBeforeFailure( e );
+ throw e;
+ }
+ }
+ }
+
+
+ /**
+ * Checks to make sure the entry being deleted exists, and has no children,
+ * otherwise throws the appropriate LdapException.
+ */
+ protected void delete( Name name ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if entry to delete exists
+ String msg = "Attempt to delete non-existant entry: ";
+ assertHasEntry( msg, name, invocation );
+
+ // check if entry to delete has children (only leaves can be deleted)
+ boolean hasChildren = false;
+ NamingEnumeration list = nexus.list( name );
+ if ( list.hasMore() )
+ {
+ hasChildren = true;
+ }
+
+ list.close();
+ if ( hasChildren )
+ {
+ LdapContextNotEmptyException e = new LdapContextNotEmptyException();
+ e.setResolvedName( name );
+ invocation.setBeforeFailure( e );
+ throw e;
+ }
+ }
+ }
+
+
+ /**
+ * Checks to see the base being searched exists, otherwise throws the
+ * appropriate LdapException.
+ */
+ protected void list( Name base ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if entry to search exists
+ String msg = "Attempt to search under non-existant entry: ";
+ assertHasEntry( msg, base, invocation );
}
}
/**
+ * Checks to make sure the entry being looked up exists other wise throws
+ * the appropriate LdapException.
+ *
* @see BaseInterceptor#lookup(javax.naming.Name)
*/
protected void lookup( Name dn ) throws NamingException
@@ -141,12 +231,167 @@
if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
{
- if ( ! nexus.hasEntry( dn ) )
+ String msg = "Attempt to lookup non-existant entry: ";
+ assertHasEntry( msg, dn, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the base being searched exists, otherwise throws the
+ * appropriate LdapException.
+ */
+ protected void lookup( Name dn, String[] attrIds ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if entry to lookup exists
+ String msg = "Attempt to lookup non-existant entry: ";
+ assertHasEntry( msg, dn, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the entry being modified exists, otherwise throws the
+ * appropriate LdapException.
+ */
+ protected void modify( Name dn, int modOp, Attributes mods ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if entry to modify exists
+ String msg = "Attempt to modify non-existant entry: ";
+ assertHasEntry( msg, dn, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the entry being modified exists, otherwise throws the
+ * appropriate LdapException.
+ */
+ protected void modify( Name dn, ModificationItem[] mods ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if entry to modify exists
+ String msg = "Attempt to modify non-existant entry: ";
+ assertHasEntry( msg, dn, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the entry being renamed exists, otherwise throws the
+ * appropriate LdapException.
+ */
+ protected void modifyRdn( Name dn, String newRdn, boolean deleteOldRdn ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if entry to rename exists
+ String msg = "Attempt to rename non-existant entry: ";
+ assertHasEntry( msg, dn, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the entry being moved exists, and so does its parent,
+ * otherwise throws the appropriate LdapException.
+ */
+ protected void move( Name oriChildName, Name newParentName ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if child to move exists
+ String msg = "Attempt to move to non-existant parent: ";
+ assertHasEntry( msg, oriChildName, invocation );
+
+ // check if parent to move to exists
+ msg = "Attempt to move to non-existant parent: ";
+ assertHasEntry( msg, newParentName, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the entry being moved exists, and so does its parent,
+ * otherwise throws the appropriate LdapException.
+ */
+ protected void move( Name oriChildName, Name newParentName, String newRdn, boolean deleteOldRdn ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ // check if child to move exists
+ String msg = "Attempt to move to non-existant parent: ";
+ assertHasEntry( msg, oriChildName, invocation );
+
+ // check if parent to move to exists
+ msg = "Attempt to move to non-existant parent: ";
+ assertHasEntry( msg, newParentName, invocation );
+ }
+ }
+
+
+ /**
+ * Checks to see the entry being searched exists, otherwise throws the
+ * appropriate LdapException.
+ */
+ protected void search( Name base, Map env, ExprNode filter,
+ SearchControls searchControls ) throws NamingException
+ {
+ Invocation invocation = getInvocation();
+
+ if ( invocation.getState() == InvocationStateEnum.PREINVOCATION )
+ {
+ String msg = "Attempt to search under non-existant entry: ";
+ assertHasEntry( msg, base, invocation );
+ }
+ }
+
+
+ /**
+ * Asserts that an entry is present and as a side effect if it is not,
+ * creates a LdapNameNotFoundException, which is used to set the before
+ * exception on the invocation - eventually the exception is thrown.
+ *
+ * @param msg the message to prefix to the distinguished name for explanation
+ * @param dn the distinguished name of the entry that is asserted
+ * @param invocation the invocation object to alter if the entry does not exist
+ * @throws NamingException if the entry does not exist
+ */
+ private void assertHasEntry( String msg, Name dn, Invocation invocation ) throws NamingException
+ {
+ if ( ! nexus.hasEntry( dn ) )
+ {
+ LdapNameNotFoundException e = null;
+
+ if ( msg != null )
{
- NamingException ne = new LdapNameNotFoundException();
- invocation.setBeforeFailure( ne );
- throw ne;
+ e = new LdapNameNotFoundException( msg + dn );
}
+ else
+ {
+ e = new LdapNameNotFoundException( dn.toString() );
+ }
+
+ e.setResolvedName( nexus.getMatchedDn( dn, false ) );
+ invocation.setBeforeFailure( e );
+ throw e;
}
}
}
Added: incubator/directory/eve/trunk/dib/src/test/org/apache/eve/jndi/ibs/EveExceptionServiceTest.java
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/dib/src/test/org/apache/eve/jndi/ibs/EveExceptionServiceTest.java?view=auto&rev=111633
==============================================================================
--- (empty file)
+++ incubator/directory/eve/trunk/dib/src/test/org/apache/eve/jndi/ibs/EveExceptionServiceTest.java Sat Dec 11 20:25:07 2004
@@ -0,0 +1,485 @@
+/*
+ * 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.eve.jndi.ibs;
+
+
+import javax.naming.NamingException;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.ldap.LdapContext;
+import javax.naming.directory.*;
+
+import org.apache.eve.jndi.AbstractJndiTest;
+import org.apache.ldap.common.exception.LdapNameNotFoundException;
+import org.apache.ldap.common.exception.LdapContextNotEmptyException;
+import org.apache.ldap.common.exception.LdapNameAlreadyBoundException;
+import org.apache.ldap.common.exception.LdapNamingException;
+import org.apache.ldap.common.message.ResultCodeEnum;
+
+
+/**
+ * Tests the correct operation of the EveExceptionService.
+ *
+ * @author <a href="mailto:directory-dev@incubator.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class EveExceptionServiceTest extends AbstractJndiTest
+{
+ // ------------------------------------------------------------------------
+ // Search Operation Tests
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Test search operation failure when the search base is non-existant.
+ */
+ public void testFailSearchNoSuchObject() throws NamingException
+ {
+ SearchControls ctls = new SearchControls();
+ try
+ {
+ sysRoot.search( "ou=blah", "(objectClass=*)", ctls );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Search operation control to test if normal search operations occur
+ * correctly.
+ */
+ public void testSearchControl() throws NamingException
+ {
+ SearchControls ctls = new SearchControls();
+ NamingEnumeration list = sysRoot.search( "ou=users", "(objectClass=*)", ctls );
+
+ if ( list.hasMore() )
+ {
+ SearchResult result = ( SearchResult ) list.next();
+ assertNotNull( result.getAttributes() );
+ assertEquals( "uid=akarasulu,ou=users,ou=system", result.getName().toString() );
+ }
+
+ assertFalse( list.hasMore() );
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Move Operation Tests
+ // ------------------------------------------------------------------------
+
+ /**
+ * Test move operation failure when the object moved is non-existant.
+ */
+ public void testFailMoveNoSuchObject() throws NamingException
+ {
+ try
+ {
+ sysRoot.rename( "ou=blah", "ou=blah,ou=groups" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+
+ try
+ {
+ sysRoot.addToEnvironment( "java.naming.ldap.deleteRDN", "false" );
+ sysRoot.rename( "ou=blah", "ou=blah2,ou=groups" );
+ sysRoot.removeFromEnvironment( "java.naming.ldap.deleteRDN" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Move operation control to test if normal move operations occur
+ * correctly.
+ */
+ public void testMoveControl() throws NamingException
+ {
+ sysRoot.rename( "ou=users", "ou=users,ou=groups" );
+ assertNotNull( sysRoot.lookup( "ou=users,ou=groups" ) );
+
+ try
+ {
+ sysRoot.lookup( "ou=users" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( NamingException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertTrue( e instanceof LdapNameNotFoundException );
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // ModifyRdn Operation Tests
+ // ------------------------------------------------------------------------
+
+ /**
+ * Test modifyRdn operation failure when the object renamed is non-existant.
+ */
+ public void testFailModifyRdnNoSuchObject() throws NamingException
+ {
+ try
+ {
+ sysRoot.rename( "ou=blah", "ou=asdf" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Modify operation control to test if normal modify operations occur
+ * correctly.
+ */
+ public void testModifyRdnControl() throws NamingException
+ {
+ sysRoot.rename( "ou=users", "ou=asdf" );
+ assertNotNull( sysRoot.lookup( "ou=asdf" ) );
+
+ try
+ {
+ sysRoot.lookup( "ou=users" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( NamingException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertTrue( e instanceof LdapNameNotFoundException );
+ }
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Modify Operation Tests
+ // ------------------------------------------------------------------------
+
+ /**
+ * Test modify operation failure when the object modified is non-existant.
+ */
+ public void testFailModifyNoSuchObject() throws NamingException
+ {
+ Attributes attrs = new BasicAttributes();
+ Attribute ou = new BasicAttribute( "ou" );
+ ou.add( "users" );
+ ou.add( "dummyValue" );
+ attrs.put( ou );
+
+ try
+ {
+ sysRoot.modifyAttributes( "ou=blah", DirContext.ADD_ATTRIBUTE, attrs );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+
+
+ ModificationItem[] mods = new ModificationItem[] {
+ new ModificationItem( DirContext.ADD_ATTRIBUTE, ou )
+ };
+
+ try
+ {
+ sysRoot.modifyAttributes( "ou=blah", mods );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Modify operation control to test if normal modify operations occur
+ * correctly.
+ */
+ public void testModifyControl() throws NamingException
+ {
+ Attributes attrs = new BasicAttributes();
+ Attribute attr = new BasicAttribute( "ou" );
+ attr.add( "users" );
+ attr.add( "dummyValue" );
+ attrs.put( attr );
+ sysRoot.modifyAttributes( "ou=users", DirContext.ADD_ATTRIBUTE, attrs );
+ Attribute ou = sysRoot.getAttributes( "ou=users" ).get( "ou" );
+ assertTrue( ou.contains( "users" ) );
+ assertTrue( ou.contains( "dummyValue" ) );
+
+ attr.add( "another" );
+ ModificationItem[] mods = new ModificationItem[] {
+ new ModificationItem( DirContext.ADD_ATTRIBUTE, attr )
+ };
+
+ sysRoot.modifyAttributes( "ou=users", mods );
+ ou = sysRoot.getAttributes( "ou=users" ).get( "ou" );
+ assertTrue( ou.contains( "users" ) );
+ assertTrue( ou.contains( "dummyValue" ) );
+ assertTrue( ou.contains( "another" ) );
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Lookup Operation Tests
+ // ------------------------------------------------------------------------
+
+ /**
+ * Test lookup operation failure when the object looked up is non-existant.
+ */
+ public void testFailLookupNoSuchObject() throws NamingException
+ {
+ try
+ {
+ sysRoot.lookup( "ou=blah" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Lookup operation control to test if normal lookup operations occur
+ * correctly.
+ */
+ public void testLookupControl() throws NamingException
+ {
+ LdapContext ctx = ( LdapContext ) sysRoot.lookup( "ou=users" );
+ assertNotNull( ctx );
+ assertEquals( "users", ctx.getAttributes("").get( "ou" ).get() );
+ }
+
+
+ // ------------------------------------------------------------------------
+ // List Operation Tests
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Test list operation failure when the base searched is non-existant.
+ */
+ public void testFailListNoSuchObject() throws NamingException
+ {
+ try
+ {
+ sysRoot.list( "ou=blah" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * List operation control to test if normal list operations occur correctly.
+ */
+ public void testListControl() throws NamingException
+ {
+ NamingEnumeration list = sysRoot.list( "ou=users" );
+
+ if ( list.hasMore() )
+ {
+ SearchResult result = ( SearchResult ) list.next();
+ assertNotNull( result.getAttributes() );
+ assertEquals( "uid=akarasulu,ou=users,ou=system", result.getName().toString() );
+ }
+
+ assertFalse( list.hasMore() );
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Add Operation Tests
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Tests for add operation failure when the parent of the entry to add does
+ * not exist.
+ */
+ public void testFailAddOnAlias() throws NamingException
+ {
+ Attributes attrs = new BasicAttributes();
+ Attribute attr = new BasicAttribute( "objectClass" );
+ attr.add( "top" );
+ attr.add( "alias" );
+ attrs.put( attr );
+ attrs.put( "aliasedObjectName", "ou=users,ou=system" );
+
+ sysRoot.createSubcontext( "cn=toanother", attrs );
+
+ try
+ {
+ sysRoot.createSubcontext( "ou=blah,cn=toanother" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNamingException e )
+ {
+ assertEquals( "cn=toanother,ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.ALIASPROBLEM, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Tests for add operation failure when the parent of the entry to add does
+ * not exist.
+ */
+ public void testFailAddNoSuchEntry() throws NamingException
+ {
+ try
+ {
+ sysRoot.createSubcontext( "ou=blah,ou=abc" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Tests for add operation failure when the entry to add already exists.
+ */
+ public void testFailAddEntryAlreadyExists() throws NamingException
+ {
+ sysRoot.createSubcontext( "ou=blah" );
+
+ try
+ {
+ sysRoot.createSubcontext( "ou=blah" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameAlreadyBoundException e )
+ {
+ assertEquals( "ou=blah,ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.ENTRYALREADYEXISTS, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Add operation control to test if normal add operations occur correctly.
+ */
+ public void testAddControl() throws NamingException
+ {
+ Context ctx = sysRoot.createSubcontext( "ou=blah" );
+ ctx.createSubcontext( "ou=subctx" );
+ Object obj = sysRoot.lookup( "ou=subctx,ou=blah" );
+ assertNotNull( obj );
+ }
+
+
+ // ------------------------------------------------------------------------
+ // Delete Operation Tests
+ // ------------------------------------------------------------------------
+
+
+ /**
+ * Tests for delete failure when the entry to be deleted has child entires.
+ */
+ public void testFailDeleteNotAllowedOnNonLeaf() throws NamingException
+ {
+ Context ctx = sysRoot.createSubcontext( "ou=blah" );
+ ctx.createSubcontext( "ou=subctx" );
+
+ try
+ {
+ sysRoot.destroySubcontext( "ou=blah" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapContextNotEmptyException e )
+ {
+ assertEquals( "ou=blah,ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOTALLOWEDONNONLEAF, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Tests delete to make sure it fails when we try to delete an entry that
+ * does not exist.
+ */
+ public void testFailDeleteNoSuchObject() throws NamingException
+ {
+ try
+ {
+ sysRoot.destroySubcontext( "ou=blah" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+
+
+ /**
+ * Delete operation control to test if normal delete operations occur.
+ */
+ public void testDeleteControl() throws NamingException
+ {
+ sysRoot.createSubcontext( "ou=blah" );
+ Object obj = sysRoot.lookup( "ou=blah" );
+ assertNotNull( obj );
+ sysRoot.destroySubcontext( "ou=blah" );
+
+ try
+ {
+ sysRoot.lookup( "ou=blah" );
+ fail( "Execution should never get here due to exception!" );
+ }
+ catch( LdapNameNotFoundException e )
+ {
+ assertEquals( "ou=system", e.getResolvedName().toString() );
+ assertEquals( ResultCodeEnum.NOSUCHOBJECT, e.getResultCode() );
+ }
+ }
+}
Modified: incubator/directory/eve/trunk/project.properties
Url: http://svn.apache.org/viewcvs/incubator/directory/eve/trunk/project.properties?view=diff&rev=111633&p1=incubator/directory/eve/trunk/project.properties&r1=111632&p2=incubator/directory/eve/trunk/project.properties&r2=111633
==============================================================================
--- incubator/directory/eve/trunk/project.properties (original)
+++ incubator/directory/eve/trunk/project.properties Sat Dec 11 20:25:07 2004
@@ -4,6 +4,7 @@
maven.xdoc.date=left
maven.xdoc.includeProjectDocumentation=yes
maven.xdoc.poweredby.image=
+maven.junit.fork=false
#
# remote repository properties