* can be removed
*/
@Test
public void testDeleteExistingSyntaxCheckerUsedByRemovedSyntax() throws Exception
{
SchemaManager schemaManager = loadSchema( "system" );
int scrSize = schemaManager.getSyntaxCheckerRegistry().size();
int srSize = schemaManager.getLdapSyntaxRegistry().size();
int goidSize = schemaManager.getGlobalOidRegistry().size();
String OID = "1.3.6.1.4.1.1466.115.121.1.33";
// Check that the S and SC are present
assertTrue( isSyntaxCheckerPresent( schemaManager, OID ) );
assertTrue( isSyntaxPresent( schemaManager, OID ) );
// Now try to remove the SC
SyntaxChecker sc = schemaManager.lookupSyntaxCheckerRegistry( OID );
// shouldn't be deleted cause there is a S associated with it
assertFalse( schemaManager.delete( sc ) );
List<Throwable> errors = schemaManager.getErrors();
assertFalse( errors.isEmpty() );
assertTrue( errors.get( 0 ) instanceof LdapProtocolErrorException );
// Now delete the using S : it should be OK
LdapSyntax syntax = new LdapSyntax( OID );
assertTrue( schemaManager.delete( syntax ) );
assertEquals( srSize - 1, schemaManager.getLdapSyntaxRegistry().size() );
assertEquals( goidSize - 1, schemaManager.getGlobalOidRegistry().size() );
assertFalse( isSyntaxPresent( schemaManager, OID ) );
// and try to delete the SC again
assertTrue( schemaManager.delete( sc ) );
assertFalse( isSyntaxCheckerPresent( schemaManager, OID ) );
assertEquals( scrSize - 1, schemaManager.getSyntaxCheckerRegistry().size() );
assertEquals( goidSize - 1, schemaManager.getGlobalOidRegistry().size() );
}