You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by lu...@apache.org on 2015/10/12 20:41:36 UTC
svn commit: r1708198 - in /directory/apacheds/trunk/server-integ/src/test:
java/org/apache/directory/server/operations/modifydn/ resources/
Author: lucastheisen
Date: Mon Oct 12 18:41:35 2015
New Revision: 1708198
URL: http://svn.apache.org/viewvc?rev=1708198&view=rev
Log:
moved integration test showing rename issue into separate class DIRSERVER_1974_IT.java
Added:
directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/DIRSERVER_1974_IT.java (with props)
directory/apacheds/trunk/server-integ/src/test/resources/dirserver_1974_it.ldif (with props)
Modified:
directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/ModifyRdnIT.java
directory/apacheds/trunk/server-integ/src/test/resources/log4j.properties
Added: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/DIRSERVER_1974_IT.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/DIRSERVER_1974_IT.java?rev=1708198&view=auto
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/DIRSERVER_1974_IT.java (added)
+++ directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/DIRSERVER_1974_IT.java Mon Oct 12 18:41:35 2015
@@ -0,0 +1,338 @@
+/*
+ * 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.server.operations.modifydn;
+
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+
+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.exception.LdapException;
+import org.apache.directory.api.ldap.model.message.AddRequest;
+import org.apache.directory.api.ldap.model.message.AddResponse;
+import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
+import org.apache.directory.api.ldap.model.message.SearchScope;
+import org.apache.directory.api.ldap.model.name.Dn;
+import org.apache.directory.api.ldap.model.name.Rdn;
+import org.apache.directory.ldap.client.api.LdapConnection;
+import org.apache.directory.ldap.client.api.search.FilterBuilder;
+import org.apache.directory.ldap.client.template.ConnectionCallback;
+import org.apache.directory.ldap.client.template.EntryMapper;
+import org.apache.directory.ldap.client.template.LdapConnectionTemplate;
+import org.apache.directory.ldap.client.template.RequestBuilder;
+import org.apache.directory.server.annotations.CreateLdapConnectionPool;
+import org.apache.directory.server.annotations.CreateLdapServer;
+import org.apache.directory.server.annotations.CreateTransport;
+import org.apache.directory.server.core.annotations.ApplyLdifFiles;
+import org.apache.directory.server.core.annotations.ContextEntry;
+import org.apache.directory.server.core.annotations.CreateDS;
+import org.apache.directory.server.core.annotations.CreateIndex;
+import org.apache.directory.server.core.annotations.CreatePartition;
+import org.apache.directory.server.core.integ.AbstractLdapTestUnit;
+import org.apache.directory.server.core.integ.CreateLdapConnectionPoolRule;
+import org.apache.directory.server.integ.ServerIntegrationUtils;
+import org.junit.ClassRule;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+ * This Test case demonstrates an issue with the rename operation as
+ * describe in
+ * <a href='https://issues.apache.org/jira/browse/DIRSERVER-1974'>DIRSERVER-1974</a>.
+ *
+ * To run this test, remove the <code>@Ignore</code> annotation and run the test.
+ * Be patient, this test will take a while, but there should be some log messages
+ * to show progress. It may succeed, but most likely will fail at some point. To
+ * speed the test up, you could load an external instance with the data and run
+ * against it instead.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@CreateLdapServer(
+ transports = {
+ @CreateTransport( protocol = "LDAP" )
+ } )
+@CreateDS( name = "classDS",
+ partitions = {
+ @CreatePartition(
+ name = "example",
+ suffix = "dc=example,dc=com",
+ contextEntry = @ContextEntry(
+ entryLdif =
+ "dn: dc=example,dc=com\n" +
+ "objectClass: domain\n" +
+ "objectClass: top\n" +
+ "dc: example\n\n"
+ ),
+ indexes = {
+ @CreateIndex( attribute = "objectClass" ),
+ @CreateIndex( attribute = "dc" ),
+ @CreateIndex( attribute = "ou" ),
+ @CreateIndex( attribute = "uid" )
+ }
+ )
+ } )
+@CreateLdapConnectionPool(
+ maxActive = 4,
+ maxIdle = 2,
+ minIdle = 1 )
+@ApplyLdifFiles( {
+ "dirserver_1974_it.ldif"
+} )
+public class DIRSERVER_1974_IT extends AbstractLdapTestUnit
+{
+ private static final Logger logger = LoggerFactory.getLogger( DIRSERVER_1974_IT.class );
+ private static final String BASE = "dc=example,dc=com";
+
+ private static final EntryMapper<Entry> DEFAULT_ENTRY_MAPPER = new EntryMapper<Entry>() {
+ @Override
+ public Entry map( Entry entry ) throws LdapException {
+ return entry;
+ }
+ };
+
+ @ClassRule
+ public static CreateLdapConnectionPoolRule classCreateDsRule =
+ new CreateLdapConnectionPoolRule();
+
+
+ @Test
+ @Ignore
+ public void testRenameWithALotOfDummiesAndSomeCustomAttributes() {
+ LdapConnectionTemplate template = classCreateDsRule.getLdapConnectionTemplate();
+ AddResponse response = null;
+
+ final String peopleOu = "people";
+ final String peopleRdn = "ou=" + peopleOu;
+ final String peopleDnString = peopleRdn + "," + BASE;
+ final Dn peopleDn = template.newDn( peopleDnString );
+
+ template.execute(
+ new ConnectionCallback<Void>() {
+ @Override
+ public Void doWithConnection( LdapConnection connection ) throws LdapException {
+ logger.debug( "Add {}", peopleDnString );
+ connection.add( new DefaultEntry( peopleDn,
+ "objectClass", "top",
+ "objectClass", "organizationalUnit",
+ "ou", peopleOu ) );
+
+ int dummyCount = 1000;
+ logger.debug( "Add {} dummy people", dummyCount );
+ for ( int i = 1; i < dummyCount; i++ )
+ {
+ String uid = "uid-" + i;
+ String dn = "uid=" + uid + "," + peopleDn;
+ connection.add( new DefaultEntry( dn,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid", uid,
+ "cn", "cn-" + i,
+ "sn", "sn-" + i,
+ "description", i + " is a person." ) );
+ if ( i % 50 == 0 )
+ {
+ logger.debug( "Added person {}", i );
+ }
+ }
+ return null;
+ }
+
+ } );
+
+ for ( int i = 0; i < 100; i++ ) {
+ logger.info( "round {}", i );
+ final String oldUid = "myra-ellen-amos";
+ final String oldCn = "Myra Ellen Amos";
+ final String oldRdn = "uid=" + oldUid;
+ final String oldDnString = oldRdn + ", " + peopleDnString;
+ final Dn oldDn = template.newDn( oldDnString );
+
+ final String newUid = "tory-amos";
+ final String newRdn = "uid=" + newUid;
+ final String newDnString = newRdn + "," + peopleDnString;
+ final Dn newDn = template.newDn( newDnString );
+
+ response = template.add( oldDn,
+ new RequestBuilder<AddRequest>() {
+ @Override
+ public void buildRequest( AddRequest request ) throws LdapException {
+ request.getEntry()
+ .add( "objectClass", "top", "person", "organizationalPerson", "inetOrgPerson", "portalPerson" )
+ .add( "uid", oldUid )
+ .add( "cn", oldCn )
+ .add( "sn", "Amos" )
+ .add( "active", Boolean.TRUE.toString() )
+ .add( "affiliation", "Unknown" )
+ .add( "timeZone", "America/New_York" )
+ .add( "description", oldCn + " is a person." );
+ }
+ } );
+ assertEquals( response.getLdapResult().getDiagnosticMessage(), ResultCodeEnum.SUCCESS, response.getLdapResult().getResultCode() );
+
+ assertNotNull( template.lookup( oldDn, DEFAULT_ENTRY_MAPPER ) );
+
+ Entry found = template.searchFirst( peopleDn, FilterBuilder.equal( "sn", "amos" ),
+ SearchScope.ONELEVEL, DEFAULT_ENTRY_MAPPER );
+ assertNotNull( found );
+ Rdn foundRdn = found.getDn().getRdn();
+ assertEquals( "uid", foundRdn.getType() );
+ assertEquals( oldUid, foundRdn.getValue().getString() );
+
+ template.execute(
+ new ConnectionCallback<Void>() {
+ @Override
+ public Void doWithConnection( LdapConnection connection ) throws LdapException {
+ connection.rename( oldDnString, newRdn );
+ return null;
+ }
+ } );
+
+ assertNull( template.lookup( oldDn, DEFAULT_ENTRY_MAPPER ) );
+ assertNotNull( template.lookup( newDn, DEFAULT_ENTRY_MAPPER ) );
+
+ found = template.searchFirst( peopleDn, FilterBuilder.equal( "sn", "amos" ),
+ SearchScope.ONELEVEL, DEFAULT_ENTRY_MAPPER );
+ foundRdn = found.getDn().getRdn();
+ assertNotNull( found );
+ foundRdn = found.getDn().getRdn();
+ assertEquals( "uid", foundRdn.getType() );
+ assertEquals( newUid, foundRdn.getValue().getString() );
+
+ template.delete( newDn );
+ }
+ }
+
+
+ /**
+ * Modify Rdn of an entry, delete its old rdn value and search before and
+ * after rename.
+ */
+ @Ignore
+ @Test
+ public void testModifyRdnWithLotsOfDummies() throws Exception
+ {
+ String base = "dc=example,dc=com";
+ String people = "people";
+ String ouPeople = "ou=" + people;
+ String dnPeople = ouPeople + "," + base;
+
+ try (LdapConnection connection = ServerIntegrationUtils.getAdminConnection( getLdapServer() );)
+ {
+ connection.loadSchema();
+
+ logger.debug( "Add {}", dnPeople );
+ connection.add( new DefaultEntry( dnPeople,
+ "objectClass", "top",
+ "objectClass", "organizationalUnit",
+ "ou", people ) );
+
+ int dummyCount = 1000;
+ logger.debug( "Add {} dummy people", dummyCount );
+ for ( int i = 1; i < dummyCount; i++ )
+ {
+ String uid = "uid-" + i;
+ String dn = "uid=" + uid + "," + dnPeople;
+ connection.add( new DefaultEntry( dn,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid", uid,
+ "cn", "cn-" + i,
+ "sn", "sn-" + i,
+ "description", i + " is a person." ) );
+ if ( i % 50 == 0 )
+ {
+ logger.debug( "Added person {}", i );
+ }
+ }
+
+ // Create a person, cn value is rdn
+ String oldUid = "mary-ellen-amos";
+ String oldCn = "Myra Ellen Amos";
+ String oldRdn = "uid=" + oldUid;
+
+ // Renamed...
+ String newUid = "tory-amos";
+ String newRdn = "uid=" + newUid;
+ String newDn = newRdn + "," + base;
+
+ String oldDn = oldRdn + ", " + base;
+ for ( int i = 1; i < 100; i++ )
+ {
+ connection.add( new DefaultEntry( oldDn,
+ "objectClass: top",
+ "objectClass: person",
+ "objectClass: organizationalPerson",
+ "objectClass: inetOrgPerson",
+ "uid", oldUid,
+ "cn", oldCn,
+ "sn: Amos",
+ "description", oldCn + " is a person." ) );
+ Entry tori = connection.lookup( oldDn );
+ assertNotNull( tori );
+ assertTrue( tori.contains( "uid", "mary-ellen-amos" ) );
+
+ connection.rename( oldDn, newRdn, true );
+ assertNull( connection.lookup( oldDn ) );
+ tori = connection.lookup( newDn );
+ assertNotNull( tori );
+
+ // Check values of uid
+ assertTrue( tori.contains( "uid", newUid ) );
+ assertFalse( tori.contains( "uid", oldUid ) ); // old value is gone
+ assertEquals( 1, tori.get( "uid" ).size() );
+
+ // 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( "uid", foundRdn.getType() );
+ assertEquals( newUid, foundRdn.getValue().getString() );
+
+ // Remove entry (use new rdn)
+ connection.delete( newDn );
+ }
+ }
+ }
+}
Propchange: directory/apacheds/trunk/server-integ/src/test/java/org/apache/directory/server/operations/modifydn/DIRSERVER_1974_IT.java
------------------------------------------------------------------------------
svn:executable = *
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=1708198&r1=1708197&r2=1708198&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 Mon Oct 12 18:41:35 2015
@@ -43,8 +43,6 @@ import javax.naming.directory.SearchResu
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.ldap.model.message.SearchScope;
-import org.apache.directory.api.ldap.model.name.Rdn;
import org.apache.directory.ldap.client.api.LdapConnection;
import org.apache.directory.server.annotations.CreateLdapServer;
import org.apache.directory.server.annotations.CreateTransport;
@@ -176,103 +174,6 @@ public class ModifyRdnIT extends Abstrac
// Remove entry (use new rdn)
connection.delete( newDn );
- }
-
-
- /**
- * Modify Rdn of an entry, delete its old rdn value and search before and
- * after rename.
- */
- //@Ignore
- @Test
- public void testModifyRdnAndDeleteOldWithSearchInBetween() throws Exception
- {
- String base = "dc=example,dc=com";
-
- LdapConnection connection = ServerIntegrationUtils.getAdminConnection( getLdapServer() );
- // connection.setTimeOut( 0L );
- connection.loadSchema();
-
- // Create a person, cn value is rdn
- String oldUid = "mary-ellen-amos";
- String oldCn = "Myra Ellen Amos";
- String oldRdn = "uid=" + oldUid;
- String oldDn = oldRdn + ", " + base;
-
- Entry entry = new DefaultEntry( oldDn,
- "objectClass: top",
- "objectClass: person",
- "objectClass: organizationalPerson",
- "objectClass: inetOrgPerson",
- "uid", oldUid,
- "cn", oldCn,
- "sn: Amos",
- "description", oldCn + " is a person." );
-
- connection.add( entry );
-
- Entry tori = connection.lookup( oldDn );
-
- assertNotNull( tori );
- assertTrue( tori.contains( "uid", "mary-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( "uid", foundRdn.getType() );
- assertEquals( oldUid, foundRdn.getValue().getString() );
-
- // modify Rdn
- String newUid = "tory-amos";
- String newRdn = "uid=" + newUid;
- 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( "uid", newUid ) );
- assertFalse( tori.contains( "uid", oldUid ) ); // old value is gone
- assertEquals( 1, tori.get( "uid" ).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( "uid", foundRdn.getType() );
- assertEquals( newUid, foundRdn.getValue().getString() );
-
- // Remove entry (use new rdn)
- connection.delete( newDn );
}
Added: directory/apacheds/trunk/server-integ/src/test/resources/dirserver_1974_it.ldif
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/resources/dirserver_1974_it.ldif?rev=1708198&view=auto
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/resources/dirserver_1974_it.ldif (added)
+++ directory/apacheds/trunk/server-integ/src/test/resources/dirserver_1974_it.ldif Mon Oct 12 18:41:35 2015
@@ -0,0 +1,116 @@
+dn: cn=portalPerson, ou=schema
+objectclass: metaSchema
+objectclass: top
+cn: portalPerson
+m-dependencies: system
+m-dependencies: core
+
+dn: ou=attributeTypes, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: attributetypes
+
+dn: ou=comparators, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: comparators
+
+dn: ou=ditContentRules, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: ditcontentrules
+
+dn: ou=ditStructureRules, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: ditstructurerules
+
+dn: ou=matchingRules, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: matchingrules
+
+dn: ou=matchingRuleUse, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: matchingruleuse
+
+dn: ou=nameForms, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: nameforms
+
+dn: ou=normalizers, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: normalizers
+
+dn: ou=objectClasses, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: objectClasses
+
+dn: ou=syntaxCheckers, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: syntaxcheckers
+
+dn: ou=syntaxes, cn=portalPerson, ou=schema
+objectclass: organizationalUnit
+objectclass: top
+ou: syntaxes
+
+## active attribute
+dn: m-oid=1.3.6.1.4.1.115.1.2.20.1.2.1, ou=attributeTypes, cn=portalPerson, ou=schema
+objectclass: metaAttributeType
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.115.1.2.20.1.2.1
+m-name: active
+m-description: This indicates an entry is active
+m-equality: booleanMatch
+m-ordering: booleanMatch
+m-substr: booleanMatch
+m-syntax: 1.3.6.1.4.1.1466.115.121.1.7
+m-singleValue: TRUE
+
+## affiliation attribute
+dn: m-oid=1.3.6.1.4.1.115.1.2.20.1.2.5, ou=attributeTypes, cn=portalPerson, ou=schema
+objectclass: metaAttributeType
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.115.1.2.20.1.2.5
+m-name: affiliation
+m-equality: caseExactMatch
+m-ordering: caseExactOrderingMatch
+m-substr: caseExactSubstringsMatch
+m-syntax: 1.3.6.1.4.1.1466.115.121.1.15
+m-singleValue: TRUE
+
+## timeZone attribute
+dn: m-oid=1.3.6.1.4.1.115.1.2.20.1.2.11,ou=attributeTypes,cn=portalPerson,ou=schema
+objectClass: metaTop
+objectClass: metaAttributeType
+objectClass: top
+m-oid: 1.3.6.1.4.1.115.1.2.20.1.2.11
+m-description: A persons time zone
+m-equality: caseExactMatch
+m-name: timeZone
+m-ordering: caseExactOrderingMatch
+m-singlevalue: TRUE
+m-substr: caseExactSubstringsMatch
+m-syntax: 1.3.6.1.4.1.1466.115.121.1.15
+
+## portalPerson object
+dn: m-oid=1.3.6.1.4.1.115.1.2.20.1.1.2, ou=objectClasses, cn=portalPerson, ou=schema
+objectclass: metaObjectClass
+objectclass: metaTop
+objectclass: top
+m-oid: 1.3.6.1.4.1.115.1.2.20.1.1.2
+m-name: portalPerson
+m-description: A person associated with a portal
+m-typeObjectClass: AUXILIARY
+m-may: active
+m-may: affiliation
+m-may: timeZone
+
Propchange: directory/apacheds/trunk/server-integ/src/test/resources/dirserver_1974_it.ldif
------------------------------------------------------------------------------
svn:executable = *
Modified: directory/apacheds/trunk/server-integ/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/server-integ/src/test/resources/log4j.properties?rev=1708198&r1=1708197&r2=1708198&view=diff
==============================================================================
--- directory/apacheds/trunk/server-integ/src/test/resources/log4j.properties (original)
+++ directory/apacheds/trunk/server-integ/src/test/resources/log4j.properties Mon Oct 12 18:41:35 2015
@@ -45,3 +45,5 @@ log4j.logger.org.apache.directory.mavibo
log4j.logger.org.apache.directory.api.ldap.model.schema=FATAL
log4j.logger.org.apache.directory.mavibot=FATAL
log4j.logger.org.apache.directory.server.replication=FATAL
+
+log4j.logger.org.apache.directory.server.operations.modifydn.DIRSERVER_1974_IT=DEBUG