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 2015/10/14 00:17:24 UTC
svn commit: r1708527 [3/3] - in /directory/apacheds/trunk:
core-api/src/main/java/org/apache/directory/server/core/api/authn/ppolicy/
core-api/src/main/java/org/apache/directory/server/core/api/schema/registries/synchronizers/
core-integ/src/main/java/...
Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java?rev=1708527&r1=1708526&r2=1708527&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java Tue Oct 13 22:17:22 2015
@@ -28,7 +28,6 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-
import javax.naming.NameNotFoundException;
import javax.naming.NamingEnumeration;
import javax.naming.NoPermissionException;
@@ -39,10 +38,10 @@ import javax.naming.directory.SchemaViol
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
-
import org.apache.directory.api.ldap.model.entry.DefaultEntry;
import org.apache.directory.api.ldap.model.entry.Entry;
import org.apache.directory.api.ldap.model.ldif.LdifUtils;
+import org.apache.directory.api.util.Strings;
import org.apache.directory.ldap.client.api.LdapConnection;
import org.apache.directory.server.annotations.CreateLdapServer;
import org.apache.directory.server.annotations.CreateTransport;
@@ -178,6 +177,100 @@ public class ModifyRdnIT extends Abstrac
/**
+<<<<<<<
+ * Modify Rdn of an entry, without deleting its old rdn value.
+=======
+ * Modify Rdn of an entry, delete its old rdn value and search before and
+ * after rename.
+ */
+ @Ignore
+ public void testModifyRdnAndDeleteOldWithSearchInBetween() throws Exception
+ {
+ LdapConnection connection = ServerIntegrationUtils.getAdminConnection( getLdapServer() );
+ // connection.setTimeOut( 0L );
+ connection.loadSchema();
+
+ // Create a person, cn value is rdn
+ String oldCn = "Myra Ellen Amos";
+ String oldRdn = "cn=" + oldCn;
+ String oldDn = oldRdn + ", " + BASE;
+
+ Entry entry = new DefaultEntry( oldDn,
+ "objectClass: top",
+ "objectClass: person",
+ "cn", oldCn,
+ "sn: Amos",
+ "description", oldCn + " is a person." );
+
+ connection.add( entry );
+
+ Entry tori = connection.lookup( oldDn );
+
+ assertNotNull( tori );
+ assertTrue( tori.contains( "cn", "Myra Ellen Amos" ) );
+
+ // now try a search
+ Entry found = null;
+ for ( Entry result : connection.search( BASE, "(sn=amos)", SearchScope.ONELEVEL ) )
+ {
+ if ( found == null )
+ {
+ found = result;
+ }
+ else
+ {
+ fail( "Found too many results" );
+ }
+ }
+ assertNotNull( found );
+ Rdn foundRdn = found.getDn().getRdn();
+ assertEquals( "cn", foundRdn.getType() );
+ assertEquals( oldCn, foundRdn.getValue() );
+
+ // modify Rdn
+ String newCn = "Tori Amos";
+ String newRdn = "cn=" + newCn;
+ String newDn = newRdn + "," + BASE;
+
+ connection.rename( oldDn, newRdn, true );
+
+ // Check, whether old Entry does not exists
+ assertNull( connection.lookup( oldDn ) );
+
+ // Check, whether new Entry exists
+ tori = connection.lookup( newDn );
+ assertNotNull( tori );
+
+ // Check values of cn
+ assertTrue( tori.contains( "cn", newCn ) );
+ assertFalse( tori.contains( "cn", oldCn ) ); // old value is gone
+ assertEquals( 1, tori.get( "cn" ).size() );
+
+ // now try a search
+ found = null;
+ for ( Entry result : connection.search( BASE, "(sn=amos)", SearchScope.ONELEVEL ) )
+ {
+ if ( found == null )
+ {
+ found = result;
+ }
+ else
+ {
+ fail( "Found too many results" );
+ }
+ }
+ assertNotNull( found );
+ foundRdn = found.getDn().getRdn();
+ assertEquals( "cn", foundRdn.getType() );
+ assertEquals( oldCn, foundRdn.getValue() );
+
+ // Remove entry (use new rdn)
+ connection.delete( newDn );
+ }
+
+
+ /**
+>>>>>>>
* Modify Rdn of an entry, without deleting its old rdn value.
*
* The JNDI property is set with 'False'
@@ -217,7 +310,7 @@ public class ModifyRdnIT extends Abstrac
// Check values of cn
Attribute cn = tori.getAttributes( "" ).get( "cn" );
- assertTrue( cn.contains( newCn ) );
+ assertTrue( cn.contains( Strings.toLowerCaseAscii( newCn ) ) );
assertTrue( cn.contains( oldCn ) ); // old value is still there
assertEquals( 2, cn.size() );
@@ -264,7 +357,7 @@ public class ModifyRdnIT extends Abstrac
// Check values of cn
Attribute cn = tori.getAttributes( "" ).get( "cn" );
- assertTrue( cn.contains( newCn ) );
+ assertTrue( cn.contains( Strings.toLowerCaseAscii( newCn ) ) );
assertTrue( cn.contains( oldCn ) ); // old value is still there
assertEquals( 2, cn.size() );
@@ -319,7 +412,7 @@ public class ModifyRdnIT extends Abstrac
// Check values of cn
cn = tori.getAttributes( "" ).get( "cn" );
- assertTrue( cn.contains( newCn ) );
+ assertTrue( cn.contains( Strings.toLowerCaseAscii( newCn ) ) );
assertTrue( !cn.contains( oldCn ) ); // old value is gone
assertTrue( cn.contains( alternateCn ) ); // alternate value is still available
assertEquals( 2, cn.size() );
@@ -370,7 +463,7 @@ public class ModifyRdnIT extends Abstrac
assertTrue( cn.contains( cnVal ) );
assertEquals( "Number of cn occurences", 1, cn.size() );
Attribute sn = tori.getAttributes( "" ).get( "sn" );
- assertTrue( sn.contains( snVal ) );
+ assertTrue( sn.contains( Strings.toLowerCaseAscii( snVal ) ) );
assertEquals( "Number of sn occurences", 1, sn.size() );
// Remove entry (use new rdn)
@@ -458,7 +551,7 @@ public class ModifyRdnIT extends Abstrac
// Check values of ou
Attribute ou = org.getAttributes( "" ).get( "ou" );
- assertTrue( ou.contains( newOu ) );
+ assertTrue( ou.contains( Strings.toLowerCaseAscii( newOu ) ) );
assertTrue( !ou.contains( oldOu ) ); // old value is gone
assertEquals( 1, ou.size() );
@@ -614,10 +707,10 @@ public class ModifyRdnIT extends Abstrac
// Check attributes
Attribute cnAttr = newCtx.getAttributes( "" ).get( "cn" );
assertEquals( 1, cnAttr.size() );
- assertTrue( cnAttr.contains( "Tori Amos" ) );
+ assertTrue( cnAttr.contains( "tori amos" ) );
Attribute snAttr = newCtx.getAttributes( "" ).get( "sn" );
assertEquals( 1, snAttr.size() );
- assertTrue( snAttr.contains( "Amos" ) );
+ assertTrue( snAttr.contains( "amos" ) );
Attribute descriptionAttr = newCtx.getAttributes( "" ).get( "description" );
assertEquals( 1, descriptionAttr.size() );
@@ -654,10 +747,10 @@ public class ModifyRdnIT extends Abstrac
// Check attributes
Attribute cnAttr = newCtx.getAttributes( "" ).get( "cn" );
assertEquals( 1, cnAttr.size() );
- assertTrue( cnAttr.contains( "Tori Amos" ) );
+ assertTrue( cnAttr.contains( "tori amos" ) );
Attribute snAttr = newCtx.getAttributes( "" ).get( "sn" );
assertEquals( 1, snAttr.size() );
- assertTrue( snAttr.contains( "Amos" ) );
+ assertTrue( snAttr.contains( "amos" ) );
Attribute descriptionAttr = newCtx.getAttributes( "" ).get( "description" );
assertEquals( 1, descriptionAttr.size() );
@@ -694,10 +787,10 @@ public class ModifyRdnIT extends Abstrac
// Check attributes
Attribute cnAttr = newCtx.getAttributes( "" ).get( "cn" );
assertEquals( 1, cnAttr.size() );
- assertTrue( cnAttr.contains( "Tori Amos" ) );
+ assertTrue( cnAttr.contains( "tori amos" ) );
Attribute snAttr = newCtx.getAttributes( "" ).get( "sn" );
assertEquals( 1, snAttr.size() );
- assertTrue( snAttr.contains( "Amos" ) );
+ assertTrue( snAttr.contains( "amos" ) );
Attribute descriptionAttr = newCtx.getAttributes( "" ).get( "description" );
assertEquals( 1, descriptionAttr.size() );
@@ -734,10 +827,10 @@ public class ModifyRdnIT extends Abstrac
// Check attributes
Attribute cnAttr = newCtx.getAttributes( "" ).get( "cn" );
assertEquals( 1, cnAttr.size() );
- assertTrue( cnAttr.contains( "Tori Amos" ) );
+ assertTrue( cnAttr.contains( "tori amos" ) );
Attribute snAttr = newCtx.getAttributes( "" ).get( "sn" );
assertEquals( 1, snAttr.size() );
- assertTrue( snAttr.contains( "Amos" ) );
+ assertTrue( snAttr.contains( "amos" ) );
Attribute descriptionAttr = newCtx.getAttributes( "" ).get( "description" );
assertNull( descriptionAttr );
@@ -780,7 +873,7 @@ public class ModifyRdnIT extends Abstrac
assertTrue( cnAttr.contains( "Tori Amos" ) );
Attribute snAttr = newCtx.getAttributes( "" ).get( "sn" );
assertEquals( 1, snAttr.size() );
- assertTrue( snAttr.contains( "Amos" ) );
+ assertTrue( snAttr.contains( "amos" ) );
Attribute descriptionAttr = newCtx.getAttributes( "" ).get( "description" );
assertEquals( 1, descriptionAttr.size() );
Attribute telephoneNumberAttr = newCtx.getAttributes( "" ).get( "telephoneNumber" );
@@ -882,7 +975,7 @@ public class ModifyRdnIT extends Abstrac
// Check attributes
Attribute cnAttr = newCtx.getAttributes( "" ).get( "cn" );
assertEquals( 1, cnAttr.size() );
- assertTrue( cnAttr.contains( "Tori Amos" ) );
+ assertTrue( cnAttr.contains( "tori amos" ) );
Attribute snAttr = newCtx.getAttributes( "" ).get( "sn" );
assertEquals( 1, snAttr.size() );
assertTrue( snAttr.contains( "Amos" ) );
Modified: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java?rev=1708527&r1=1708526&r2=1708527&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java (original)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/search/SearchIT.java Tue Oct 13 22:17:22 2015
@@ -463,6 +463,7 @@ public class SearchIT extends AbstractLd
* Search operation with a base Dn which contains a BER encoded value.
*/
@Test
+ @Ignore
public void testSearchWithBackslashEscapedBase() throws Exception
{
LdapContext ctx = ( LdapContext ) getWiredContext( getLdapServer() ).lookup( BASE );
@@ -477,12 +478,13 @@ public class SearchIT extends AbstractLd
// sn=Ferry with BEROctetString values
String base = "sn=\\46\\65\\72\\72\\79";
-
+
try
{
// Check entry
NamingEnumeration<SearchResult> enm = ctx.search( base, filter, sctls );
assertTrue( enm.hasMore() );
+
while ( enm.hasMore() )
{
SearchResult sr = enm.next();
@@ -1493,7 +1495,7 @@ public class SearchIT extends AbstractLd
attrs.put( "givenName", "Jim" );
attrs.put( "sn", "Bean" );
attrs.put( "cn", "jimbean" );
- attrs.put( "description", "(sex*pis\\tols)" );
+ attrs.put( "description", "(sex*pis\\\\tols)" );
ctx.createSubcontext( "cn=jimbean", attrs );
SearchControls controls = new SearchControls();
Modified: directory/apacheds/trunk/service/ApacheDS.launch
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/service/ApacheDS.launch?rev=1708527&r1=1708526&r2=1708527&view=diff
==============================================================================
--- directory/apacheds/trunk/service/ApacheDS.launch (original)
+++ directory/apacheds/trunk/service/ApacheDS.launch Tue Oct 13 22:17:22 2015
@@ -10,8 +10,10 @@
<mapEntry key="[debug]" value="org.eclipse.jdt.launching.localJavaApplication"/>
<mapEntry key="[run]" value="org.eclipse.jdt.launching.localJavaApplication"/>
</mapAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.directory.server.UberjarMain"/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="./target/instance"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="apacheds-service"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dlog4j.configuration=file:./log4j.properties -Dapacheds.log.dir=./target/instance/log -Dapacheds.controls=org.apache.directory.api.ldap.codec.controls.cascade.CascadeFactory,org.apache.directory.api.ldap.codec.controls.manageDsaIT.ManageDsaITFactory,org.apache.directory.api.ldap.codec.controls.proxiedauthz.ProxiedAuthzFactory,org.apache.directory.api.ldap.codec.controls.search.entryChange.EntryChangeFactory,org.apache.directory.api.ldap.codec.controls.search.pagedSearch.PagedResultsFactory,org.apache.directory.api.ldap.codec.controls.search.persistentSearch.PersistentSearchFactory,org.apache.directory.api.ldap.codec.controls.search.subentries.SubentriesFactory,org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyFactory,org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncDoneValueFactory,org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncInfoValueFactory,org.apache.dire
ctory.api.ldap.extras.controls.syncrepl_impl.SyncRequestValueFactory,org.apache.directory.api.ldap.extras.controls.syncrepl_impl.SyncStateValueFactory,org.apache.directory.api.ldap.extras.controls.ad_impl.AdDirSyncFactory -Dapacheds.extendedOperations=org.apache.directory.api.ldap.extras.extended.ads_impl.cancel.CancelFactory,org.apache.directory.api.ldap.extras.extended.ads_impl.certGeneration.CertGenerationFactory,org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulShutdown.GracefulShutdownFactory,org.apache.directory.api.ldap.extras.extended.ads_impl.storedProcedure.StoredProcedureFactory,org.apache.directory.api.ldap.extras.extended.ads_impl.gracefulDisconnect.GracefulDisconnectFactory"/>
</launchConfiguration>
Modified: directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java?rev=1708527&r1=1708526&r2=1708527&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java (original)
+++ directory/apacheds/trunk/xdbm-partition/src/main/java/org/apache/directory/server/core/partition/impl/btree/AbstractBTreePartition.java Tue Oct 13 22:17:22 2015
@@ -2112,6 +2112,12 @@ public abstract class AbstractBTreeParti
}
+ /**
+ * This will rename the entry, and deal with the deleteOldRdn flag. If set to true, we have
+ * to remove the AVA which are not part of the new RDN from the entry.
+ * If this flag is set to false, we have to take care of the special case of an AVA
+ * which attributeType is SINGLE-VALUE : in this case, we remove the old value.
+ */
private void rename( String oldId, Rdn newRdn, boolean deleteOldRdn, Entry entry ) throws Exception
{
if ( entry == null )
@@ -2130,19 +2136,60 @@ public abstract class AbstractBTreeParti
* new Rdn attribute we add the index for this attribute value pair.
* Also we make sure that the presence index shows the existence of the
* new Rdn attribute within this entry.
+ * Last, not least, if the AttributeType is single value, take care
+ * of removing the old value.
*/
for ( Ava newAtav : newRdn )
{
String newNormType = newAtav.getNormType();
- Object newNormValue = newAtav.getNormValue().getValue();
+ Object newNormValue = newAtav.getValue().getNormValue();
+ boolean oldRemoved = false;
AttributeType newRdnAttrType = schemaManager.lookupAttributeTypeRegistry( newNormType );
- entry.add( newRdnAttrType, newAtav.getValue() );
+ if ( newRdnAttrType.isSingleValued() && entry.containsAttribute( newRdnAttrType ) )
+ {
+ Attribute oldAttribute = entry.get( newRdnAttrType );
+
+ // We have to remove the old attribute value, if we have some
+ entry.removeAttributes( newRdnAttrType );
+
+ // Deal with the index
+ if ( hasUserIndexOn( newRdnAttrType ) )
+ {
+ Index<?, String> index = getUserIndex( newRdnAttrType );
+ ( ( Index ) index ).drop( oldAttribute.get().getNormValue(), id );
+
+ /*
+ * If there is no value for id in this index due to our
+ * drop above we remove the oldRdnAttr from the presence idx
+ */
+ if ( null == index.reverseLookup( oldId ) )
+ {
+ presenceIdx.drop( newRdnAttrType.getOid(), oldId );
+ }
+
+ }
+ }
+
+ if ( newRdnAttrType.getSyntax().isHumanReadable() )
+ {
+ entry.add( newRdnAttrType, ( String ) newAtav.getValue().getNormValue() );
+ }
+ else
+ {
+ entry.add( newRdnAttrType, ( byte[] ) newAtav.getValue().getNormValue() );
+ }
if ( hasUserIndexOn( newRdnAttrType ) )
{
Index<?, String> index = getUserIndex( newRdnAttrType );
+
+ if ( oldRemoved )
+ {
+ ( ( Index ) index ).drop( newNormValue, oldId );
+ }
+
( ( Index ) index ).add( newNormValue, oldId );
// Make sure the altered entry shows the existence of the new attrib
@@ -2192,7 +2239,7 @@ public abstract class AbstractBTreeParti
if ( mustRemove )
{
String oldNormType = oldAtav.getNormType();
- String oldNormValue = oldAtav.getNormValue().getString();
+ String oldNormValue = ( String ) oldAtav.getValue().getNormValue();
AttributeType oldRdnAttrType = schemaManager.lookupAttributeTypeRegistry( oldNormType );
entry.remove( oldRdnAttrType, oldNormValue );
Modified: directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlPartitionTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlPartitionTest.java?rev=1708527&r1=1708526&r2=1708527&view=diff
==============================================================================
--- directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlPartitionTest.java (original)
+++ directory/apacheds/trunk/xdbm-partition/src/test/java/org/apache/directory/server/xdbm/impl/avl/AvlPartitionTest.java Tue Oct 13 22:17:22 2015
@@ -468,7 +468,7 @@ public class AvlPartitionTest
String id = partition.getEntryId( dn2 );
assertNotNull( id );
Entry entry2 = partition.fetch( id );
- assertEquals( "Ja+es", entry2.get( "sn" ).getString() );
+ assertEquals( "ja+es", entry2.get( "sn" ).getString() );
assertEquals( "ja+es", entry2.get( "sn" ).get().getNormValue() );
}