* can be removed
*/
@Test
public void testDeleteExistingComparatorUsedByRemovedMatchingRule() throws Exception
{
SchemaManager schemaManager = loadSchema( "system" );
int ctrSize = schemaManager.getComparatorRegistry().size();
int mrrSize = schemaManager.getMatchingRuleRegistry().size();
int goidSize = schemaManager.getGlobalOidRegistry().size();
String OID = "2.5.13.33";
// Check that the MR and C are present
assertTrue( isMatchingRulePresent( schemaManager, OID ) );
assertTrue( isComparatorPresent( schemaManager, OID ) );
// Now try to remove the C
LdapComparator<?> lc = schemaManager.lookupComparatorRegistry( OID );
// shouldn't be deleted cause there is a MR associated with it
assertFalse( schemaManager.delete( lc ) );
List<Throwable> errors = schemaManager.getErrors();
assertFalse( errors.isEmpty() );
assertTrue( errors.get( 0 ) instanceof LdapProtocolErrorException );
// Now delete the using MR : it should be OK
MatchingRule mr = new MatchingRule( OID );
assertTrue( schemaManager.delete( mr ) );
assertEquals( mrrSize - 1, schemaManager.getMatchingRuleRegistry().size() );
assertEquals( goidSize - 1, schemaManager.getGlobalOidRegistry().size() );
assertFalse( isMatchingRulePresent( schemaManager, OID ) );
// and try to delete the Comparator again
assertTrue( schemaManager.delete( lc ) );
assertFalse( isComparatorPresent( schemaManager, OID ) );
assertEquals( ctrSize - 1, schemaManager.getComparatorRegistry().size() );
assertEquals( goidSize - 1, schemaManager.getGlobalOidRegistry().size() );
}