| /* |
| * 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.shared.ldap.schemaloader; |
| |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.apache.commons.io.FileUtils; |
| import com.mycila.junit.concurrent.Concurrency; |
| import com.mycila.junit.concurrent.ConcurrentJunitRunner; |
| import org.apache.directory.shared.ldap.model.exception.LdapException; |
| import org.apache.directory.shared.ldap.model.exception.LdapSchemaException; |
| import org.apache.directory.shared.ldap.model.schema.MutableAttributeTypeImpl; |
| import org.apache.directory.shared.ldap.model.schema.AbstractLdapComparator; |
| import org.apache.directory.shared.ldap.model.schema.LdapComparator; |
| import org.apache.directory.shared.ldap.model.schema.LdapSyntax; |
| import org.apache.directory.shared.ldap.model.schema.MatchingRule; |
| import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntax; |
| import org.apache.directory.shared.ldap.model.schema.MutableLdapSyntaxImpl; |
| import org.apache.directory.shared.ldap.model.schema.MutableMatchingRule; |
| import org.apache.directory.shared.ldap.model.schema.MutableMatchingRuleImpl; |
| import org.apache.directory.shared.ldap.model.schema.MutableNormalizer; |
| import org.apache.directory.shared.ldap.model.schema.AbstractNormalizer; |
| import org.apache.directory.shared.ldap.model.schema.ObjectClass; |
| import org.apache.directory.shared.ldap.model.schema.ObjectClassTypeEnum; |
| import org.apache.directory.shared.ldap.model.schema.SchemaManager; |
| import org.apache.directory.shared.ldap.model.schema.AbstractSyntaxChecker; |
| import org.apache.directory.shared.ldap.model.schema.SyntaxChecker; |
| import org.apache.directory.shared.ldap.model.schema.UsageEnum; |
| import org.apache.directory.shared.ldap.model.schema.comparators.BooleanComparator; |
| import org.apache.directory.shared.ldap.model.schema.comparators.ComparableComparator; |
| import org.apache.directory.shared.ldap.model.schema.comparators.CsnComparator; |
| import org.apache.directory.shared.ldap.model.schema.normalizers.NoOpNormalizer; |
| import org.apache.directory.shared.ldap.model.schema.syntaxCheckers.OctetStringSyntaxChecker; |
| import org.apache.directory.shared.ldap.model.schema.syntaxCheckers.RegexSyntaxChecker; |
| import org.apache.directory.shared.ldap.schemaextractor.SchemaLdifExtractor; |
| import org.apache.directory.shared.ldap.schemaextractor.impl.DefaultSchemaLdifExtractor; |
| import org.apache.directory.shared.ldap.schemamanager.impl.DefaultSchemaManager; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| |
| /** |
| * A test class for SchemaManager, testig the addition of a SchemaObject. |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| */ |
| @RunWith(ConcurrentJunitRunner.class) |
| @Concurrency() |
| public class SchemaManagerAddTest |
| { |
| // A directory in which the ldif files will be stored |
| private static String workingDirectory; |
| |
| // The schema repository |
| private static File schemaRepository; |
| |
| |
| @BeforeClass |
| public static void setup() throws Exception |
| { |
| workingDirectory = System.getProperty( "workingDirectory" ); |
| |
| if ( workingDirectory == null ) |
| { |
| String path = SchemaManagerAddTest.class.getResource( "" ).getPath(); |
| int targetPos = path.indexOf( "target" ); |
| workingDirectory = path.substring( 0, targetPos + 6 ); |
| } |
| |
| // Make sure every test class has its own schema directory |
| workingDirectory = new File( workingDirectory, "SchemaManagerAddTest" ).getAbsolutePath(); |
| |
| schemaRepository = new File( workingDirectory, "schema" ); |
| |
| // Cleanup the target directory |
| FileUtils.deleteDirectory( schemaRepository ); |
| |
| SchemaLdifExtractor extractor = new DefaultSchemaLdifExtractor( new File( workingDirectory ) ); |
| extractor.extractOrCopy(); |
| } |
| |
| |
| @AfterClass |
| public static void cleanup() throws IOException |
| { |
| // Cleanup the target directory |
| FileUtils.deleteDirectory( schemaRepository.getParentFile() ); |
| } |
| |
| |
| private SchemaManager loadSystem() throws Exception |
| { |
| LdifSchemaLoader loader = new LdifSchemaLoader( schemaRepository ); |
| SchemaManager schemaManager = new DefaultSchemaManager( loader ); |
| |
| String schemaName = "system"; |
| |
| schemaManager.loadWithDeps( schemaName ); |
| |
| return schemaManager; |
| } |
| |
| |
| /** |
| * Check if an AT is present in the AT registry |
| */ |
| private boolean isATPresent( SchemaManager schemaManager, String oid ) |
| { |
| try |
| { |
| MutableAttributeTypeImpl attributeType = schemaManager.lookupAttributeTypeRegistry( oid ); |
| |
| return attributeType != null; |
| } |
| catch ( LdapException ne ) |
| { |
| return false; |
| } |
| } |
| |
| |
| /** |
| * Check if a MR is present in the MR registry |
| */ |
| private boolean isMRPresent( SchemaManager schemaManager, String oid ) |
| { |
| try |
| { |
| MatchingRule matchingRule = schemaManager.lookupMatchingRuleRegistry( oid ); |
| |
| return matchingRule != null; |
| } |
| catch ( LdapException ne ) |
| { |
| return false; |
| } |
| } |
| |
| |
| /** |
| * Check if an OC is present in the OC registry |
| */ |
| private boolean isOCPresent( SchemaManager schemaManager, String oid ) |
| { |
| try |
| { |
| ObjectClass objectClass = schemaManager.lookupObjectClassRegistry( oid ); |
| |
| return objectClass != null; |
| } |
| catch ( LdapException ne ) |
| { |
| return false; |
| } |
| } |
| |
| |
| /** |
| * Check if a S is present in the S registry |
| */ |
| private boolean isSyntaxPresent( SchemaManager schemaManager, String oid ) |
| { |
| try |
| { |
| LdapSyntax syntax = schemaManager.lookupLdapSyntaxRegistry( oid ); |
| |
| return syntax != null; |
| } |
| catch ( LdapException ne ) |
| { |
| return false; |
| } |
| } |
| |
| |
| //========================================================================= |
| // For each test, we will check many different things. |
| // If the test is successful, we want to know if the SchemaObject |
| // Registry has grown : its size must be one bigger. If the SchemaObject |
| // is not loadable, then the GlobalOidRegistry must also have grown. |
| //========================================================================= |
| // AttributeType addition tests |
| //------------------------------------------------------------------------- |
| // First, not defined superior |
| //------------------------------------------------------------------------- |
| /** |
| * Try to inject an AttributeType without any superior nor Syntax : it's invalid |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupNoSyntaxNoSuperior() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType which is Collective, and userApplication AT |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupCollectiveUser() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| attributeType.setCollective( true ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| assertTrue( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType which is a subtype of a Collective AT |
| */ |
| @Test |
| public void testAddAttributeTypeSupCollectiveUser() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| // Create the collective attribute first |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| attributeType.setCollective( true ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| assertTrue( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| |
| // Now try to create an AT which is a subtype of teh create collective attribute |
| MutableAttributeTypeImpl subType = new MutableAttributeTypeImpl( "1.1.1" ); |
| subType.setEqualityOid( "2.5.13.1" ); |
| subType.setOrderingOid( null ); |
| subType.setSubstringOid( null ); |
| subType.setSuperiorOid( "1.1.0" ); |
| subType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| subType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| subType.setCollective( false ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( subType ) ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.1" ) ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType which is Collective, but an operational AT |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupCollectiveOperational() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.DIRECTORY_OPERATION ); |
| attributeType.setCollective( true ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a single valued AttributeType which is Collective |
| */ |
| @Test |
| public void testAddAttributeTypeCollectiveOperationalSigleValue() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| attributeType.setCollective( true ); |
| attributeType.setSingleValued( true ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType which is a NO-USER-MODIFICATION and userApplication |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupNoUserModificationUserAplication() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| attributeType.setUserModifiable( false ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType which is a NO-USER-MODIFICATION and is operational |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupNoUserModificationOpAttr() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.DISTRIBUTED_OPERATION ); |
| attributeType.setUserModifiable( false ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| assertTrue( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with an invalid EQUALITY MR |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupInvalidEqualityMR() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "0.0" ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType without EQUALITY MR |
| */ |
| @Test |
| public void testAddAttributeTypeNoEqualityMR() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.8 " ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| |
| // It should be OK |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| |
| assertTrue( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with an invalid ORDERING MR |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupInvalidOrderingMR() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( null ); |
| attributeType.setOrderingOid( "0.0" ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with an invalid SUBSTR MR |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupInvalidSubstringMR() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( null ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( "0.0" ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with valid MRs |
| */ |
| @Test |
| public void testAddAttributeTypeNoSupValidMR() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( "2.5.13.1" ); |
| attributeType.setSubstringOid( "2.5.13.1" ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setUsage( UsageEnum.USER_APPLICATIONS ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| assertTrue( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType which already exist |
| */ |
| @Test |
| public void testAddAttributeTypeAlreadyExist() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "2.5.18.4" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( "2.5.13.1" ); |
| attributeType.setSubstringOid( "2.5.13.1" ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| // The AT must be there |
| assertTrue( isATPresent( schemaManager, "2.5.18.4" ) ); |
| |
| // Check that it hasen't changed |
| MutableAttributeTypeImpl original = schemaManager.lookupAttributeTypeRegistry( "2.5.18.4" ); |
| assertEquals( "distinguishedNameMatch", original.getEqualityOid() ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with an already attributed name |
| */ |
| @Test |
| public void testAddAttributeTypeNameAlreadyExist() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( "2.5.13.1" ); |
| attributeType.setSubstringOid( "2.5.13.1" ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setNames( "Test", "cn" ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| // The AT must not be there |
| assertFalse( isATPresent( schemaManager, "1.1.1.0" ) ); |
| |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with an ObjectClass name |
| */ |
| @Test |
| public void testAddAttributeTypeNameOfAnObjectClass() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.1.0" ); |
| attributeType.setEqualityOid( "2.5.13.1" ); |
| attributeType.setOrderingOid( "2.5.13.1" ); |
| attributeType.setSubstringOid( "2.5.13.1" ); |
| attributeType.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| attributeType.setNames( "Test", "referral" ); |
| |
| // It should be ok |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| |
| // The AT must be present |
| assertTrue( isATPresent( schemaManager, "1.1.1.0" ) ); |
| |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| |
| MutableAttributeTypeImpl added = schemaManager.lookupAttributeTypeRegistry( "referral" ); |
| assertNotNull( added ); |
| assertEquals( "1.1.1.0", added.getOid() ); |
| assertTrue( added.getNames().contains( "referral" ) ); |
| } |
| |
| |
| //------------------------------------------------------------------------- |
| // Then, with a superior |
| //------------------------------------------------------------------------- |
| /** |
| * Try to inject an AttributeType with a superior and no Syntax : it should |
| * take its superior' syntax and MR |
| */ |
| @Test |
| public void testAddAttributeTypeSupNoSyntaxNoSuperior() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( null ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSuperiorOid( "2.5.18.4" ); |
| attributeType.setUsage( UsageEnum.DIRECTORY_OPERATION ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( attributeType ) ); |
| |
| MutableAttributeTypeImpl result = schemaManager.lookupAttributeTypeRegistry( "1.1.0" ); |
| |
| assertEquals( "1.3.6.1.4.1.1466.115.121.1.12", result.getSyntaxOid() ); |
| assertEquals( "2.5.13.1", result.getEqualityOid() ); |
| assertEquals( atrSize + 1, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with a superior and different USAGE |
| */ |
| @Test |
| public void testAddAttributeTypeSupDifferentUsage() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( null ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSuperiorOid( "2.5.18.4" ); |
| attributeType.setUsage( UsageEnum.DISTRIBUTED_OPERATION ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with itself as a superior |
| */ |
| @Test |
| public void testAddAttributeTypeSupWithOwnSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( null ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSuperiorOid( "1.1.0" ); |
| attributeType.setUsage( UsageEnum.DISTRIBUTED_OPERATION ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject an AttributeType with a bad superior |
| */ |
| @Test |
| public void testAddAttributeTypeSupBadSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int atrSize = schemaManager.getAttributeTypeRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableAttributeTypeImpl attributeType = new MutableAttributeTypeImpl( "1.1.0" ); |
| attributeType.setEqualityOid( null ); |
| attributeType.setOrderingOid( null ); |
| attributeType.setSubstringOid( null ); |
| attributeType.setSuperiorOid( "0.0" ); |
| attributeType.setUsage( UsageEnum.DISTRIBUTED_OPERATION ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( attributeType ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isATPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( atrSize, schemaManager.getAttributeTypeRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| //========================================================================= |
| // Comparator addition tests |
| //------------------------------------------------------------------------- |
| @Test |
| public void testAddNewComparator() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ctrSize = schemaManager.getComparatorRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractLdapComparator<?> lc = new BooleanComparator( oid ); |
| |
| assertTrue( schemaManager.add( lc ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| |
| assertEquals( ctrSize + 1, schemaManager.getComparatorRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| LdapComparator<?> added = schemaManager.lookupComparatorRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( lc.getClass().getName(), added.getFqcn() ); |
| } |
| |
| |
| @Test |
| public void testAddAlreadyExistingComparator() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ctrSize = schemaManager.getComparatorRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractLdapComparator<?> bc = new BooleanComparator( oid ); |
| |
| assertTrue( schemaManager.add( bc ) ); |
| |
| LdapComparator<?> added = schemaManager.lookupComparatorRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( bc.getClass().getName(), added.getFqcn() ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| assertEquals( ctrSize + 1, schemaManager.getComparatorRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| AbstractLdapComparator<?> lc = new CsnComparator( oid ); |
| |
| assertFalse( schemaManager.add( lc ) ); |
| |
| errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| |
| assertEquals( ctrSize + 1, schemaManager.getComparatorRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| added = schemaManager.lookupComparatorRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( bc.getClass().getName(), added.getFqcn() ); |
| } |
| |
| |
| /** |
| * Test that we can't add two comparators with the same class code. |
| */ |
| @Test |
| public void testAddComparatorWithWrongFQCN() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ctrSize = schemaManager.getComparatorRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractLdapComparator<?> lc = new BooleanComparator( oid ); |
| |
| // using java.sql.ResultSet cause it is very unlikely to get loaded |
| // in ADS, as the FQCN is not the one expected |
| lc.setFqcn( "java.sql.ResultSet" ); |
| |
| assertFalse( schemaManager.add( lc ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| |
| assertEquals( ctrSize, schemaManager.getComparatorRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| try |
| { |
| schemaManager.lookupComparatorRegistry( oid ); |
| fail(); |
| } |
| catch ( Exception e ) |
| { |
| // Expected |
| assertTrue( true ); |
| } |
| } |
| |
| |
| //========================================================================= |
| // DITContentRule addition tests |
| //------------------------------------------------------------------------- |
| // TODO |
| |
| //========================================================================= |
| // DITStructureRule addition tests |
| //------------------------------------------------------------------------- |
| // TODO |
| |
| //========================================================================= |
| // MatchingRule addition tests |
| //------------------------------------------------------------------------- |
| /** |
| * Try to inject a new MatchingRule |
| */ |
| @Test |
| public void testAddValidMatchingRule() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRuleImpl matchingRule = new MutableMatchingRuleImpl( "1.1.0" ); |
| matchingRule.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( matchingRule ) ); |
| |
| assertTrue( isMRPresent( schemaManager, "1.1.0" ) ); |
| |
| // The C and N must have default values |
| MatchingRule added = schemaManager.lookupMatchingRuleRegistry( "1.1.0" ); |
| |
| assertEquals( NoOpNormalizer.class.getName(), added.getNormalizer().getClass().getName() ); |
| assertEquals( ComparableComparator.class.getName(), added.getLdapComparator().getClass().getName() ); |
| |
| assertEquals( mrrSize + 1, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a new MatchingRule without a syntax |
| */ |
| @Test |
| public void testAddMatchingRuleNoSyntax() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRuleImpl matchingRule = new MutableMatchingRuleImpl( "1.1.0" ); |
| |
| // It should fail (no syntax) |
| assertFalse( schemaManager.add( matchingRule ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isMRPresent( schemaManager, "1.1.0" ) ); |
| |
| assertEquals( mrrSize, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a new MatchingRule with an existing OID |
| */ |
| @Test |
| public void testAddMatchingRuleExistingOID() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRuleImpl matchingRule = new MutableMatchingRuleImpl( "2.5.13.0" ); |
| matchingRule.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| |
| // It should fail (oid already registered) |
| assertFalse( schemaManager.add( matchingRule ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| // Check that the existing MR has not been replaced |
| assertTrue( isMRPresent( schemaManager, "2.5.13.0" ) ); |
| MutableMatchingRule existing = schemaManager.lookupMatchingRuleRegistry( "2.5.13.0" ); |
| |
| assertEquals( "objectIdentifierMatch", existing.getName() ); |
| |
| assertEquals( mrrSize, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a new MatchingRule with an existing name |
| */ |
| @Test |
| public void testAddMatchingRuleExistingName() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRule matchingRule = new MutableMatchingRuleImpl( "1.1.0" ); |
| matchingRule.setNames( "Test", "objectIdentifierMatch" ); |
| matchingRule.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| |
| // It should fail (name already registered) |
| assertFalse( schemaManager.add( matchingRule ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertEquals( mrrSize, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a new MatchingRule with an existing AT name |
| */ |
| @Test |
| public void testAddMatchingRuleExistingATName() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRuleImpl matchingRule = new MutableMatchingRuleImpl( "1.1.0" ); |
| matchingRule.setNames( "Test", "cn" ); |
| matchingRule.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( matchingRule ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| assertEquals( 0, errors.size() ); |
| |
| // Check that the new MR has been injected |
| assertTrue( isMRPresent( schemaManager, "1.1.0" ) ); |
| MutableMatchingRule added = schemaManager.lookupMatchingRuleRegistry( "1.1.0" ); |
| |
| assertTrue( added.getNames().contains( "cn" ) ); |
| assertTrue( added.getNames().contains( "Test" ) ); |
| |
| assertEquals( mrrSize + 1, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a new MatchingRule with a not existing Syntax |
| */ |
| @Test |
| public void testAddMatchingRuleNotExistingSyntax() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRuleImpl matchingRule = new MutableMatchingRuleImpl( "1.1.0" ); |
| matchingRule.setNames( "Test" ); |
| matchingRule.setSyntaxOid( "1.1.1" ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( matchingRule ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertEquals( mrrSize, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a new MatchingRule with an existing AT name |
| */ |
| @Test |
| public void testAddMatchingRuleNotExistingSchema() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int mrrSize = schemaManager.getMatchingRuleRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableMatchingRuleImpl matchingRule = new MutableMatchingRuleImpl( "1.1.0" ); |
| matchingRule.setNames( "Test" ); |
| matchingRule.setSyntaxOid( "1.3.6.1.4.1.1466.115.121.1.26" ); |
| matchingRule.setSchemaName( "bad" ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( matchingRule ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| // Check that the new MR has been injected |
| assertFalse( isMRPresent( schemaManager, "1.1.0" ) ); |
| |
| assertEquals( mrrSize, schemaManager.getMatchingRuleRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| //========================================================================= |
| // MatchingRuleUse addition tests |
| //------------------------------------------------------------------------- |
| // TODO |
| |
| //========================================================================= |
| // NameForm addition tests |
| //------------------------------------------------------------------------- |
| // TODO |
| |
| //========================================================================= |
| // Normalizer addition tests |
| //------------------------------------------------------------------------- |
| @Test |
| public void testAddNewNormalizer() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int nrSize = schemaManager.getNormalizerRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractNormalizer normalizer = new NoOpNormalizer( oid ); |
| |
| assertTrue( schemaManager.add( normalizer ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| |
| assertEquals( nrSize + 1, schemaManager.getNormalizerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| MutableNormalizer added = schemaManager.lookupNormalizerRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( normalizer.getClass().getName(), added.getFqcn() ); |
| } |
| |
| |
| @Test |
| public void testAddAlreadyExistingNormalizer() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int nrSize = schemaManager.getNormalizerRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractNormalizer normalizer = new NoOpNormalizer( oid ); |
| |
| assertTrue( schemaManager.add( normalizer ) ); |
| |
| MutableNormalizer added = schemaManager.lookupNormalizerRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( normalizer.getClass().getName(), added.getFqcn() ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| assertEquals( nrSize + 1, schemaManager.getNormalizerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| AbstractNormalizer normalizer2 = new NoOpNormalizer( oid ); |
| |
| assertFalse( schemaManager.add( normalizer2 ) ); |
| |
| errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| |
| assertEquals( nrSize + 1, schemaManager.getNormalizerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| added = schemaManager.lookupNormalizerRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( normalizer.getClass().getName(), added.getFqcn() ); |
| } |
| |
| |
| /** |
| * Test that we can't add two Normalizers with the same class code. |
| */ |
| @Test |
| public void testAddNormalizerWithWrongFQCN() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int nrSize = schemaManager.getNormalizerRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| MutableNormalizer normalizer = new NoOpNormalizer( oid ); |
| |
| // using java.sql.ResultSet cause it is very unlikely to get loaded |
| // in ADS, as the FQCN is not the one expected |
| normalizer.setFqcn( "java.sql.ResultSet" ); |
| |
| assertFalse( schemaManager.add( normalizer ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| |
| assertEquals( nrSize, schemaManager.getNormalizerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| try |
| { |
| schemaManager.lookupNormalizerRegistry( oid ); |
| fail(); |
| } |
| catch ( Exception e ) |
| { |
| // Expected |
| assertTrue( true ); |
| } |
| } |
| |
| |
| //========================================================================= |
| // ObjectClass addition tests |
| //------------------------------------------------------------------------- |
| //------------------------------------------------------------------------- |
| // First, not defined superior |
| //------------------------------------------------------------------------- |
| /** |
| * Addition of a valid OC |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorValid() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| |
| assertTrue( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 0, schemaManager.getErrors().size() ); |
| |
| ObjectClass added = schemaManager.lookupObjectClassRegistry( "1.1.1" ); |
| |
| assertNotNull( added ); |
| |
| assertEquals( ocrSize + 1, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with an existing OID |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorWithExistingOid() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "2.5.17.0" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| Throwable error = schemaManager.getErrors().get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| ObjectClass added = schemaManager.lookupObjectClassRegistry( "2.5.17.0" ); |
| |
| assertNotNull( added ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with an existing OC name |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorWithExistingOCName() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.0" ); |
| objectClass.setNames( "Test", "referral" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| Throwable error = schemaManager.getErrors().get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.0" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with an AT name |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorWithATName() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test", "cn" ); |
| |
| assertTrue( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 0, schemaManager.getErrors().size() ); |
| |
| ObjectClass added = schemaManager.lookupObjectClassRegistry( "1.1.1" ); |
| |
| assertNotNull( added ); |
| assertTrue( added.getNames().contains( "Test" ) ); |
| assertTrue( added.getNames().contains( "cn" ) ); |
| |
| assertEquals( ocrSize + 1, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with not existing AT in MAY |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorNonExistingAtInMay() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.addMayAttributeTypeOids( "cn", "none", "sn" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| Throwable error = schemaManager.getErrors().get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with not existing AT in MUST |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorNonExistingAtInMust() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.addMustAttributeTypeOids( "cn", "none", "sn" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| Throwable error = schemaManager.getErrors().get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with an AT present more than once in MAY |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorATMoreThanOnceInMay() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.addMayAttributeTypeOids( "cn", "ref", "commonName" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with an AT present more than once in MUST |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorATMoreThanOnceInMust() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.addMustAttributeTypeOids( "cn", "ref", "2.5.4.3" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with an AT present in MUST and MAY. |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorATInMustAndMay() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.addMustAttributeTypeOids( "cn", "ref" ); |
| objectClass.addMayAttributeTypeOids( "2.5.4.3" ); |
| |
| // Same AT i MAY and MUST : should fail |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with a collective AT present in MUST or MAY. |
| */ |
| @Test |
| public void testAddObjectClassNoSuperiorCollectiveATInMustOrMay() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| schemaManager.loadWithDeps( "collective" ); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| // Check a addition in MUST |
| ObjectClass objectClassMust = new ObjectClass( "1.1.1" ); |
| objectClassMust.addMustAttributeTypeOids( "c-o", "ref" ); |
| |
| // collective attribute in MUST : failure expected |
| assertFalse( schemaManager.add( objectClassMust ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| // Check an addition in MAY |
| ObjectClass objectClassMay = new ObjectClass( "1.1.1" ); |
| objectClassMay.addMayAttributeTypeOids( "c-o", "ref" ); |
| |
| // collective attribute in MAY : failure expected |
| assertFalse( schemaManager.add( objectClassMay ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| //------------------------------------------------------------------------- |
| // Then, with superiors |
| //------------------------------------------------------------------------- |
| /** |
| * Addition of a valid OC with some superiors |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsValid() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "alias", "referral", "top" ); |
| |
| assertTrue( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 0, schemaManager.getErrors().size() ); |
| |
| ObjectClass added = schemaManager.lookupObjectClassRegistry( "1.1.1" ); |
| |
| assertNotNull( added ); |
| assertTrue( added.getNames().contains( "Test" ) ); |
| assertNotNull( added.getSuperiors() ); |
| assertEquals( 3, added.getSuperiors().size() ); |
| |
| Set<String> expectedSups = new HashSet<String>(); |
| expectedSups.add( "alias" ); |
| expectedSups.add( "referral" ); |
| expectedSups.add( "top" ); |
| |
| for ( ObjectClass addedOC : added.getSuperiors() ) |
| { |
| assertTrue( expectedSups.contains( addedOC.getName() ) ); |
| expectedSups.remove( addedOC.getName() ); |
| } |
| |
| assertEquals( ocrSize + 1, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with itself in the SUP list |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsWithCycle() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "alias", "Test", "referral" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with the same OC more than once in SUP |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsOcMoreThanOnceInSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "alias", "referral", "2.5.6.1" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with a non existing OC in SUP |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsNonExistingOCInSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "alias", "refessal" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an ABSTRACT OC with some AUXILIARY superior |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsAbstractWithAuxiliaryInSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.ABSTRACT ); |
| objectClass.addSuperiorOids( "extensibleObject" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an ABSTRACT OC with some STRUCTURAL superior |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsAbstractWithStructuralInSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.ABSTRACT ); |
| objectClass.addSuperiorOids( "referral" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an AUXILIARY OC with some STRUCTURAL superior |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsAuxiliaryWithStructuralInSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.AUXILIARY ); |
| objectClass.addSuperiorOids( "referral" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an STRUCTURAL OC with some AUXILIARY superior |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsStructuralWithAuxiliaryInSup() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "extensibleObject" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with some AT present in MUST and in MAY in one of its |
| * superior |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsATInMustPresentInSuperiorsMay() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "alias", "OpenLDAProotDSE" ); |
| objectClass.addMustAttributeTypeOids( "aliasedObjectName", "cn" ); |
| |
| assertTrue( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 0, schemaManager.getErrors().size() ); |
| |
| ObjectClass added = schemaManager.lookupObjectClassRegistry( "1.1.1" ); |
| |
| assertNotNull( added ); |
| assertTrue( added.getNames().contains( "Test" ) ); |
| assertNotNull( added.getSuperiors() ); |
| assertEquals( 2, added.getSuperiors().size() ); |
| |
| Set<String> expectedSups = new HashSet<String>(); |
| expectedSups.add( "alias" ); |
| expectedSups.add( "OpenLDAProotDSE" ); |
| |
| for ( ObjectClass addedOC : added.getSuperiors() ) |
| { |
| assertTrue( expectedSups.contains( addedOC.getName() ) ); |
| expectedSups.remove( addedOC.getName() ); |
| } |
| |
| assertEquals( ocrSize + 1, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Addition of an OC with some AT present in MAY and in MUST in one of its |
| * superior : not allowed |
| */ |
| @Test |
| public void testAddObjectClassSuperiorsATInMayPresentInSuperiorsMust() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int ocrSize = schemaManager.getObjectClassRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| ObjectClass objectClass = new ObjectClass( "1.1.1" ); |
| objectClass.setNames( "Test" ); |
| objectClass.setType( ObjectClassTypeEnum.STRUCTURAL ); |
| objectClass.addSuperiorOids( "alias", "OpenLDAProotDSE" ); |
| objectClass.addMayAttributeTypeOids( "aliasedObjectName", "cn" ); |
| |
| assertFalse( schemaManager.add( objectClass ) ); |
| |
| assertEquals( 1, schemaManager.getErrors().size() ); |
| |
| assertTrue( schemaManager.getErrors().get( 0 ) instanceof LdapSchemaException ); |
| |
| assertFalse( isOCPresent( schemaManager, "1.1.1" ) ); |
| |
| assertEquals( ocrSize, schemaManager.getObjectClassRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| //========================================================================= |
| // Syntax addition tests |
| //------------------------------------------------------------------------- |
| /** |
| * Try to inject a new valid Syntax, with no SC : the associated SC |
| * will be the default OctetString SC |
| */ |
| @Test |
| public void testAddValidSyntax() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int sSize = schemaManager.getLdapSyntaxRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableLdapSyntaxImpl syntax = new MutableLdapSyntaxImpl( "1.1.0" ); |
| |
| // It should not fail |
| assertTrue( schemaManager.add( syntax ) ); |
| |
| MutableLdapSyntax added = schemaManager.lookupLdapSyntaxRegistry( "1.1.0" ); |
| |
| assertNotNull( added ); |
| assertEquals( OctetStringSyntaxChecker.class.getName(), added.getSyntaxChecker().getClass().getName() ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| |
| assertTrue( isSyntaxPresent( schemaManager, "1.1.0" ) ); |
| assertEquals( sSize + 1, schemaManager.getLdapSyntaxRegistry().size() ); |
| assertEquals( goidSize + 1, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| /** |
| * Try to inject a Syntax with an existing OID |
| */ |
| @Test |
| public void testAddSyntaxExistingOid() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int sSize = schemaManager.getLdapSyntaxRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| MutableLdapSyntaxImpl syntax = new MutableLdapSyntaxImpl( "2.5.4.3" ); |
| |
| // It should fail |
| assertFalse( schemaManager.add( syntax ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| Throwable error = errors.get( 0 ); |
| |
| assertTrue( error instanceof LdapSchemaException ); |
| assertEquals( sSize, schemaManager.getLdapSyntaxRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| } |
| |
| |
| //========================================================================= |
| // SyntaxChecker addition tests |
| //------------------------------------------------------------------------- |
| @Test |
| public void testAddNewSyntaxChecker() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int nrSize = schemaManager.getSyntaxCheckerRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractSyntaxChecker syntaxChecker = new RegexSyntaxChecker( oid ); |
| |
| assertTrue( schemaManager.add( syntaxChecker ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| |
| assertEquals( nrSize + 1, schemaManager.getSyntaxCheckerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| SyntaxChecker added = schemaManager.lookupSyntaxCheckerRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( syntaxChecker.getClass().getName(), added.getFqcn() ); |
| } |
| |
| |
| @Test |
| public void testAddAlreadyExistingSyntaxChecker() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int nrSize = schemaManager.getSyntaxCheckerRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractSyntaxChecker syntaxChecker = new RegexSyntaxChecker( oid ); |
| |
| assertTrue( schemaManager.add( syntaxChecker ) ); |
| |
| SyntaxChecker added = schemaManager.lookupSyntaxCheckerRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( syntaxChecker.getClass().getName(), added.getFqcn() ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| assertEquals( 0, errors.size() ); |
| assertEquals( nrSize + 1, schemaManager.getSyntaxCheckerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| AbstractSyntaxChecker syntaxChecker2 = new RegexSyntaxChecker( oid ); |
| |
| assertFalse( schemaManager.add( syntaxChecker2 ) ); |
| |
| errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| |
| assertEquals( nrSize + 1, schemaManager.getSyntaxCheckerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| added = schemaManager.lookupSyntaxCheckerRegistry( oid ); |
| |
| assertNotNull( added ); |
| assertEquals( syntaxChecker.getClass().getName(), added.getFqcn() ); |
| } |
| |
| |
| /** |
| * Test that we can't add two SyntaxCheckers with the same class code. |
| */ |
| @Test |
| public void testAddSyntaxCheckerWithWrongFQCN() throws Exception |
| { |
| SchemaManager schemaManager = loadSystem(); |
| int nrSize = schemaManager.getSyntaxCheckerRegistry().size(); |
| int goidSize = schemaManager.getGlobalOidRegistry().size(); |
| |
| String oid = "0.0.0"; |
| AbstractSyntaxChecker syntaxChecker = new RegexSyntaxChecker( oid ); |
| |
| // using java.sql.ResultSet cause it is very unlikely to get loaded |
| // in ADS, as the FQCN is not the one expected |
| syntaxChecker.setFqcn( "java.sql.ResultSet" ); |
| |
| assertFalse( schemaManager.add( syntaxChecker ) ); |
| |
| List<Throwable> errors = schemaManager.getErrors(); |
| errors = schemaManager.getErrors(); |
| assertEquals( 1, errors.size() ); |
| |
| assertEquals( nrSize, schemaManager.getSyntaxCheckerRegistry().size() ); |
| assertEquals( goidSize, schemaManager.getGlobalOidRegistry().size() ); |
| |
| try |
| { |
| schemaManager.lookupSyntaxCheckerRegistry( oid ); |
| fail(); |
| } |
| catch ( Exception e ) |
| { |
| // Expected |
| assertTrue( true ); |
| } |
| } |
| } |