| /* |
| * 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.core.operations.modify; |
| |
| |
| import static org.apache.directory.server.core.integ.IntegrationUtils.getSchemaContext; |
| import static org.apache.directory.server.core.integ.IntegrationUtils.getSystemContext; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import javax.naming.NameNotFoundException; |
| import javax.naming.NamingException; |
| import javax.naming.NoPermissionException; |
| import javax.naming.directory.Attribute; |
| import javax.naming.directory.AttributeInUseException; |
| import javax.naming.directory.Attributes; |
| import javax.naming.directory.BasicAttribute; |
| import javax.naming.directory.BasicAttributes; |
| import javax.naming.directory.DirContext; |
| import javax.naming.directory.InvalidAttributeValueException; |
| import javax.naming.directory.InvalidAttributesException; |
| import javax.naming.directory.ModificationItem; |
| import javax.naming.directory.SchemaViolationException; |
| import javax.naming.ldap.LdapContext; |
| |
| import org.apache.directory.api.util.StringConstants; |
| import org.apache.directory.server.core.annotations.ApplyLdifs; |
| import org.apache.directory.server.core.annotations.CreateDS; |
| import org.apache.directory.server.core.integ.AbstractLdapTestUnit; |
| import org.apache.directory.server.core.integ.FrameworkRunner; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| |
| |
| /** |
| * Tests the modify() methods of the provider. |
| * |
| * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> |
| */ |
| @RunWith ( FrameworkRunner.class ) |
| @CreateDS(name = "ModifyAddIT") |
| @ApplyLdifs( |
| { |
| "dn: m-oid=2.2.0, ou=attributeTypes, cn=apachemeta, ou=schema", |
| "objectclass: metaAttributeType", |
| "objectclass: metaTop", |
| "objectclass: top", |
| "m-oid: 2.2.0", |
| "m-name: integerAttribute", |
| "m-description: the precursor for all integer attributes", |
| "m-equality: integerMatch", |
| "m-ordering: integerOrderingMatch", |
| "m-syntax: 1.3.6.1.4.1.1466.115.121.1.27", |
| "m-length: 0", |
| "", |
| "dn: ou=testing00,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "objectClass: extensibleObject", |
| "ou: testing00", |
| "integerAttribute: 0", |
| "", |
| "dn: ou=testing01,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "objectClass: extensibleObject", |
| "ou: testing01", |
| "integerAttribute: 1", |
| "", |
| "dn: ou=testing02,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "objectClass: extensibleObject", |
| "ou: testing02", |
| "integerAttribute: 2", |
| "", |
| "dn: ou=testing03,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "objectClass: extensibleObject", |
| "ou: testing03", |
| "integerAttribute: 3", |
| "", |
| "dn: ou=testing04,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "objectClass: extensibleObject", |
| "ou: testing04", |
| "integerAttribute: 4", |
| "", |
| "dn: ou=testing05,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "objectClass: extensibleObject", |
| "ou: testing05", |
| "integerAttribute: 5", |
| "", |
| "dn: ou=subtest,ou=testing01,ou=system", |
| "objectClass: top", |
| "objectClass: organizationalUnit", |
| "ou: subtest", |
| "", |
| "dn: cn=Heather Nova, ou=system", |
| "objectClass: top", |
| "objectClass: person", |
| "cn: Heather Nova", |
| "sn: Nova", |
| "telephoneNumber: 1 801 555 1212 ", |
| "description: an American singer-songwriter", |
| "", |
| "dn: cn=with-dn, ou=system", |
| "objectClass: top", |
| "objectClass: person", |
| "objectClass: organizationalPerson", |
| "objectClass: inetorgPerson", |
| "cn: singer", |
| "sn: manager", |
| "telephoneNumber: 1 801 555 1212 ", |
| "manager: cn=Heather Nova, ou=system" |
| } |
| ) |
| public class ModifyAddIT extends AbstractLdapTestUnit |
| { |
| private static final String PERSON_DESCRIPTION = "an American singer-songwriter"; |
| private static final String RDN_HEATHER_NOVA = "cn=Heather Nova"; |
| |
| |
| /** |
| * @param sysRoot the system root to add entries to |
| * @throws NamingException on errors |
| */ |
| protected void createData( LdapContext sysRoot ) throws Exception |
| { |
| /* |
| * Check ou=testing00,ou=system |
| */ |
| DirContext ctx = ( DirContext ) sysRoot.lookup( "ou=testing00" ); |
| assertNotNull( ctx ); |
| Attributes attributes = ctx.getAttributes( "" ); |
| assertNotNull( attributes ); |
| assertEquals( "testing00", attributes.get( "ou" ).get() ); |
| Attribute attribute = attributes.get( "objectClass" ); |
| assertNotNull( attribute ); |
| assertTrue( attribute.contains( "top" ) ); |
| assertTrue( attribute.contains( "organizationalUnit" ) ); |
| |
| /* |
| * check ou=testing01,ou=system |
| */ |
| ctx = ( DirContext ) sysRoot.lookup( "ou=testing01" ); |
| assertNotNull( ctx ); |
| attributes = ctx.getAttributes( "" ); |
| assertNotNull( attributes ); |
| assertEquals( "testing01", attributes.get( "ou" ).get() ); |
| attribute = attributes.get( "objectClass" ); |
| assertNotNull( attribute ); |
| assertTrue( attribute.contains( "top" ) ); |
| assertTrue( attribute.contains( "organizationalUnit" ) ); |
| |
| /* |
| * Check ou=testing02,ou=system |
| */ |
| ctx = ( DirContext ) sysRoot.lookup( "ou=testing02" ); |
| assertNotNull( ctx ); |
| |
| attributes = ctx.getAttributes( "" ); |
| assertNotNull( attributes ); |
| assertEquals( "testing02", attributes.get( "ou" ).get() ); |
| |
| attribute = attributes.get( "objectClass" ); |
| assertNotNull( attribute ); |
| assertTrue( attribute.contains( "top" ) ); |
| assertTrue( attribute.contains( "organizationalUnit" ) ); |
| |
| /* |
| * Check ou=subtest,ou=testing01,ou=system |
| */ |
| ctx = ( DirContext ) sysRoot.lookup( "ou=subtest,ou=testing01" ); |
| assertNotNull( ctx ); |
| |
| attributes = ctx.getAttributes( "" ); |
| assertNotNull( attributes ); |
| assertEquals( "subtest", attributes.get( "ou" ).get() ); |
| |
| attribute = attributes.get( "objectClass" ); |
| assertNotNull( attribute ); |
| assertTrue( attribute.contains( "top" ) ); |
| assertTrue( attribute.contains( "organizationalUnit" ) ); |
| |
| /* |
| * Check entry cn=Heather Nova, ou=system |
| */ |
| ctx = ( DirContext ) sysRoot.lookup( RDN_HEATHER_NOVA ); |
| assertNotNull( ctx ); |
| |
| |
| // ------------------------------------------------------------------- |
| // Enable the nis schema |
| // ------------------------------------------------------------------- |
| |
| // check if nis is disabled |
| LdapContext schemaRoot = getSchemaContext( getService() ); |
| Attributes nisAttrs = schemaRoot.getAttributes( "cn=nis" ); |
| boolean isNisDisabled = false; |
| |
| if ( nisAttrs.get( "m-disabled" ) != null ) |
| { |
| isNisDisabled = ( ( String ) nisAttrs.get( "m-disabled" ).get() ).equalsIgnoreCase( "TRUE" ); |
| } |
| |
| // if nis is disabled then enable it |
| if ( isNisDisabled ) |
| { |
| Attribute disabled = new BasicAttribute( "m-disabled" ); |
| ModificationItem[] mods = new ModificationItem[] { |
| new ModificationItem( DirContext.REMOVE_ATTRIBUTE, disabled ) }; |
| schemaRoot.modifyAttributes( "cn=nis", mods ); |
| } |
| |
| // ------------------------------------------------------------------- |
| // Add a bunch of nis groups |
| // ------------------------------------------------------------------- |
| addNisPosixGroup( "testGroup0", 0 ); |
| addNisPosixGroup( "testGroup1", 1 ); |
| addNisPosixGroup( "testGroup2", 2 ); |
| addNisPosixGroup( "testGroup4", 4 ); |
| addNisPosixGroup( "testGroup5", 5 ); |
| } |
| |
| |
| /** |
| * Create a NIS group |
| */ |
| private DirContext addNisPosixGroup( String name, int gid ) throws Exception |
| { |
| Attributes attrs = new BasicAttributes( "objectClass", "top", true ); |
| attrs.get( "objectClass" ).add( "posixGroup" ); |
| attrs.put( "cn", name ); |
| attrs.put( "gidNumber", String.valueOf( gid ) ); |
| return getSystemContext( getService() ).createSubcontext( "cn="+name+",ou=groups", attrs ); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // Add operation |
| //--------------------------------------------------------------------------------------------- |
| // 1 Entry exists |
| // 1.1 AT does not exist. |
| // - new valid Ava, new AT is in MAY |
| // - new valid Ava, new AT is not in MAY => error |
| // - new valid Ava, new AT is not in MAY, but OC contains extensibleOC |
| // - new valid Ava, new AT is not in MAY, but OC contains extensibleOC, legal empty value |
| // - new invalid Ava, not existing AT => error |
| // - new invalid Ava, existing AT, two values in a single valued AT => error |
| // - new invalid Ava, not existing AT, extensibleObject in OCs => error |
| // - new invalid Ava (Value is invalid per syntax), AT is in MAY => error |
| // - new invalid Ava (Value is invalid per syntax), AT is not in MAY, but OC contains extensibleOC => error |
| // - new OperationalAttribute => error |
| // - new OperationalAttribute, OC contains extensibleOC => error |
| //--------------------------------------------------------------------------------------------- |
| /** |
| * Add a new AT with a valid Value in the entry, the AT is part of the MAY |
| */ |
| @Test |
| public void testModifyAddExistingEntryNotExistingATValidAVA() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // A new description attribute value |
| String newValue = "ou=test"; |
| |
| Attributes attrs = new BasicAttributes( "seeAlso", newValue, true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Verify that the attribute value has been added |
| attrs = sysRoot.getAttributes( RDN_HEATHER_NOVA ); |
| Attribute attr = attrs.get( "seeAlso" ); |
| assertNotNull( attr ); |
| assertTrue( attr.contains( newValue ) ); |
| assertEquals( 1, attr.size() ); |
| } |
| |
| |
| /** |
| * Add a new AT with a valid Value in the entry, the AT is not part of the MAY or MUST, |
| * and the OC does not contain the extensibleObject OC |
| */ |
| @Test( expected = SchemaViolationException.class ) |
| public void testModifyAddExistingEntryNotExistingATNotInMayValidAVA() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // A valid AT not in MUST or MAY |
| Attributes attrs = new BasicAttributes( "crossCertificatePair", "12345", true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add a new AT with a valid Value in the entry, the AT is not part of the MAY or MUST, |
| * and the OC contains the extensibleObject OC |
| */ |
| @Test |
| public void testModifyAddExistingEntryNotExistingATNotInMayExtensibleObjectOCValidAVA() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // A valid AT not in MUST or MAY, but the extensibleObject OC is present in the OCs |
| Attributes attrs = new BasicAttributes( "crossCertificatePair", "12345", true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Verify that the attribute value has been added |
| attrs = sysRoot.getAttributes( "ou=testing01" ); |
| Attribute attr = attrs.get( "crossCertificatePair" ); |
| assertNotNull( attr ); |
| assertTrue( attr.contains( "12345".getBytes() ) ); |
| assertEquals( 1, attr.size() ); |
| } |
| |
| |
| /** |
| * Add a new AT with an empty Value in the entry, the AT is not part of the MAY or MUST, |
| * and the OC contains the extensibleObject OC |
| */ |
| @Test |
| public void testModifyAddExistingEntryNotExistingAtEmptyValue() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // A valid AT not in MUST or MAY, but the extensibleObject OC is present in the OCs |
| // The value is empty |
| Attributes attrs = new BasicAttributes( "crossCertificatePair", StringConstants.EMPTY_BYTES, true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Verify that the attribute value has been added |
| attrs = sysRoot.getAttributes( "ou=testing01" ); |
| Attribute attr = attrs.get( "crossCertificatePair" ); |
| assertNotNull( attr ); |
| assertTrue( attr.contains( StringConstants.EMPTY_BYTES ) ); |
| assertEquals( 1, attr.size() ); |
| } |
| |
| |
| /** |
| * Add a new single valued AT with 2 Values in the entry |
| */ |
| @Test( expected = InvalidAttributeValueException.class ) |
| public void testModifyAddExistingEntrySingleValuedATWithTwoValues() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // |
| Attribute attr = new BasicAttribute( "c" ); |
| attr.add( "FR" ); |
| attr.add( "US" ); |
| Attributes attrs = new BasicAttributes( "c", true ); |
| attrs.put( attr ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add a bad AT in the entry, the OC does not contain the extensibleObject OC |
| */ |
| @Test( expected = InvalidAttributesException.class ) |
| public void testModifyAddExistingEntryNotExistingATInvalidAVA() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An invalid AT |
| Attributes attrs = new BasicAttributes( "badAttr", "12345", true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add a bad AT in the entry, the OC contains the extensibleObject OC |
| */ |
| @Test( expected = InvalidAttributesException.class ) |
| public void testModifyAddExistingEntryNotExistingATInvalidAVAExtensibleObjectInOcs() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An invalid AT |
| Attributes attrs = new BasicAttributes( "badAttr", "12345", true ); |
| |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add a AT part of the MAY/MUST, with an invalid value |
| */ |
| @Test( expected = InvalidAttributeValueException.class ) |
| public void testModifyAddExistingEntryExistingATInvalidValue() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An invalid AT value |
| Attributes attrs = new BasicAttributes( "seeAlso", "AAA", true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add a AT not part of the MAY/MUST, with an invalid value, in an entry with the |
| * extensibleObject OC |
| */ |
| @Test( expected = InvalidAttributeValueException.class ) |
| public void testModifyAddExistingEntryExistingATInvalidValueExtensibleObjectInOcs() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An invalid AT value |
| Attributes attrs = new BasicAttributes( "mobile", "AAA", true ); |
| |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add an operational AT in an entry with no extensibleObject OC |
| */ |
| @Test( expected = NoPermissionException.class ) |
| public void testModifyAddExistingEntryOperationalAttribute() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An operationalAttribute |
| Attributes attrs = new BasicAttributes( "subschemaSubentry", "cn=anotherSchema", true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add an operational AT in an entry the extensibleObject OC |
| */ |
| @Test( expected = NoPermissionException.class ) |
| public void testModifyAddExistingEntryOperationalAttributeExtensibleObjectInOcs() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An operational attribute |
| Attributes attrs = new BasicAttributes( "subschemaSubentry", "cn=anotherSchema", true ); |
| |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // 1 Entry exists |
| // 1.2 AT exists. |
| //--------------------------------------------------------------------------------------------- |
| /** |
| * Add a new AT with a valid Value in the entry, the AT is part of the MAY |
| */ |
| @Test |
| public void testModifyAddExistingEntryExistingATValidAVA() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // A new description attribute value |
| String newValue = "test"; |
| |
| Attributes attrs = new BasicAttributes( "description", newValue, true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Verify that the attribute value has been added |
| attrs = sysRoot.getAttributes( RDN_HEATHER_NOVA ); |
| Attribute attr = attrs.get( "description" ); |
| assertNotNull( attr ); |
| assertTrue( attr.contains( newValue ) ); |
| assertTrue( attr.contains( PERSON_DESCRIPTION ) ); |
| assertEquals( 2, attr.size() ); |
| } |
| |
| |
| /** |
| * Add a new AT with a valid Value in the entry, the AT is part of the MAY, |
| * the value already exists |
| */ |
| @Test( expected = AttributeInUseException.class ) |
| public void testModifyAddExistingEntryExistingATExistingValue() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| Attributes attrs = new BasicAttributes( "description", PERSON_DESCRIPTION, true ); |
| |
| sysRoot.modifyAttributes( RDN_HEATHER_NOVA, DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| /** |
| * Add an empty value in an existing AT in the entry, the AT is not part of the MAY or MUST, |
| * and the OC contains the extensibleObject OC |
| */ |
| @Test |
| public void testModifyAddExistingEntryExistingAtEmptyValue() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| Attributes attrs = new BasicAttributes( "crossCertificatePair", "12345".getBytes(), true ); |
| |
| // Add the first Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| attrs = new BasicAttributes( "crossCertificatePair", StringConstants.EMPTY_BYTES, true ); |
| |
| // Add the second Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Verify that the attribute value has been added |
| attrs = sysRoot.getAttributes( "ou=testing01" ); |
| Attribute attr = attrs.get( "crossCertificatePair" ); |
| assertNotNull( attr ); |
| assertTrue( attr.contains( "12345".getBytes() ) ); |
| assertTrue( attr.contains( StringConstants.EMPTY_BYTES ) ); |
| assertEquals( 2, attr.size() ); |
| } |
| |
| |
| /** |
| * Add a new value in a single valued AT |
| */ |
| @Test( expected = InvalidAttributeValueException.class ) |
| public void testModifyAddExistingEntryExistingSingleValuedAT() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // The initial value |
| Attributes attrs = new BasicAttributes( "c", "FR", true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Add another value |
| Attributes attrs2 = new BasicAttributes( "c", "US", true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs2 ); |
| } |
| |
| |
| /** |
| * Add the existing value in a single valued AT |
| */ |
| @Test( expected = AttributeInUseException.class ) |
| public void testModifyAddExistingEntryExistingSingleValuedATExistingValue() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // The initial value |
| Attributes attrs = new BasicAttributes( "c", "FR", true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| |
| // Add another value |
| Attributes attrs2 = new BasicAttributes( "c", "FR", true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs2 ); |
| } |
| |
| |
| /** |
| * Add an invalue in a existing AT |
| */ |
| @Test( expected = InvalidAttributeValueException.class ) |
| public void testModifyAddExistingEntryExistingATBadValue() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // The added value |
| Attributes attrs = new BasicAttributes( "telephoneNumber", "BAD", true ); |
| |
| // Add the Ava |
| sysRoot.modifyAttributes( "ou=testing01", DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // 1 Entry exists |
| // 1.3 Entry is an alias |
| //--------------------------------------------------------------------------------------------- |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // 1 Entry exists |
| // 1.4 Entry is a referral. |
| //--------------------------------------------------------------------------------------------- |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // 1 Entry exists |
| // 1.2 Entry is a schema element. |
| //--------------------------------------------------------------------------------------------- |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // 1 Entry exists |
| // 1.2 The added AT is ObjectClass. |
| //--------------------------------------------------------------------------------------------- |
| |
| |
| //--------------------------------------------------------------------------------------------- |
| // 2 Entry does not exist |
| //--------------------------------------------------------------------------------------------- |
| /** |
| * Add an AT in an entry which does not exist |
| */ |
| @Test( expected = NameNotFoundException.class ) |
| public void testModifyAddNotExistingEntry() throws Exception |
| { |
| LdapContext sysRoot = getSystemContext( getService() ); |
| createData( sysRoot ); |
| |
| // An operational attribute |
| Attributes attrs = new BasicAttributes( "cn", "test", true ); |
| |
| sysRoot.modifyAttributes( "ou=absent", DirContext.ADD_ATTRIBUTE, attrs ); |
| } |
| } |