blob: c4dc1d8aa51edfdf9b3bbe6a3a75de78f0ac2a2e [file] [log] [blame]
/*
* 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.name;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.naming.CompoundName;
import javax.naming.InvalidNameException;
import javax.naming.Name;
import javax.naming.NamingException;
import javax.naming.ldap.LdapName;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.directory.shared.ldap.name.LdapDN;
import org.apache.directory.shared.ldap.name.LdapDnParser;
import org.apache.directory.shared.ldap.name.Rdn;
import org.apache.directory.shared.ldap.schema.DeepTrimToLowerNormalizer;
import org.apache.directory.shared.ldap.schema.OidNormalizer;
import org.apache.directory.shared.ldap.util.StringTools;
/**
* Test the class LdapDN
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class LdapDNTest extends TestCase
{
// ~ Methods
// ------------------------------------------------------------------------------------
// CONSTRUCTOR functions --------------------------------------------------
/**
* Test a null DN
*/
public void testLdapDNNull()
{
assertEquals( "", new LdapDN().getUpName() );
}
/**
* test an empty DN
*/
public void testLdapDNEmpty() throws InvalidNameException
{
assertEquals( "", new LdapDN( "" ).getUpName() );
}
/**
* test a simple DN : a = b
*/
public void testLdapDNSimple() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
assertTrue( LdapDN.isValid( "a = b" ) );
assertEquals( "a = b", dn.getUpName() );
assertEquals( "a=b", dn.toString() );
}
/**
* test a simple DN with some spaces : "a = b "
*/
public void testLdapDNSimpleWithSpaces() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b " );
assertTrue( LdapDN.isValid( "a = b " ) );
assertEquals( "a = b ", dn.getUpName() );
assertEquals( "a=b", dn.toString() );
}
/**
* test a composite DN : a = b, d = e
*/
public void testLdapDNComposite() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b, c = d" );
assertTrue( LdapDN.isValid( "a = b, c = d" ) );
assertEquals( "a=b,c=d", dn.toString() );
assertEquals( "a = b, c = d", dn.getUpName() );
}
/**
* test a composite DN with spaces : a = b , d = e
*/
public void testLdapDNCompositeWithSpaces() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b , c = d" );
assertTrue( LdapDN.isValid( "a = b , c = d" ) );
assertEquals( "a=b,c=d", dn.toString() );
assertEquals( "a = b , c = d", dn.getUpName() );
}
/**
* test a composite DN with or without spaces: a=b, a =b, a= b, a = b, a = b
*/
public void testLdapDNCompositeWithSpace() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, a =b, a= b, a = b, a = b" );
assertTrue( LdapDN.isValid( "a=b, a =b, a= b, a = b, a = b" ) );
assertEquals( "a=b,a=b,a=b,a=b,a=b", dn.toString() );
assertEquals( "a=b, a =b, a= b, a = b, a = b", dn.getUpName() );
}
/**
* test a composite DN with differents separators : a=b;c=d,e=f It should
* return a=b,c=d,e=f (the ';' is replaced by a ',')
*/
public void testLdapDNCompositeSepators() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b;c=d,e=f" );
assertTrue( LdapDN.isValid( "a=b;c=d,e=f" ) );
assertEquals( "a=b,c=d,e=f", dn.toString() );
assertEquals( "a=b;c=d,e=f", dn.getUpName() );
}
/**
* test a simple DN with multiple NameComponents : a = b + c = d
*/
public void testLdapDNSimpleMultivaluedAttribute() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b + c = d" );
assertTrue( LdapDN.isValid( "a = b + c = d" ) );
assertEquals( "a=b+c=d", dn.toString() );
assertEquals( "a = b + c = d", dn.getUpName() );
}
/**
* test a composite DN with multiple NC and separators : a=b+c=d, e=f + g=h +
* i=j
*/
public void testLdapDNCompositeMultivaluedAttribute() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b+c=d, e=f + g=h + i=j" );
assertTrue( LdapDN.isValid( "a=b+c=d, e=f + g=h + i=j" ) );
assertEquals( "a=b+c=d,e=f+g=h+i=j", dn.toString() );
assertEquals( "a=b+c=d, e=f + g=h + i=j", dn.getUpName() );
}
/**
* Test to see if a DN with multiRdn values is preserved after an addAll.
*/
public void testAddAllWithMultivaluedAttribute() throws InvalidNameException
{
LdapDN dn = new LdapDN( "cn=Kate Bush+sn=Bush,ou=system" );
LdapDN target = new LdapDN();
assertTrue( LdapDN.isValid( "cn=Kate Bush+sn=Bush,ou=system" ) );
target.addAll( target.size(), dn );
assertEquals( "cn=Kate Bush+sn=Bush,ou=system", target.toString() );
assertEquals( "cn=Kate Bush+sn=Bush,ou=system", target.getUpName() );
}
/**
* test a simple DN with an oid prefix (uppercase) : OID.12.34.56 = azerty
*/
public void testLdapDNOidUpper() throws InvalidNameException
{
LdapDN dn = new LdapDN( "OID.12.34.56 = azerty" );
assertTrue( LdapDN.isValid( "OID.12.34.56 = azerty" ) );
assertEquals( "oid.12.34.56=azerty", dn.toString() );
assertEquals( "OID.12.34.56 = azerty", dn.getUpName() );
}
/**
* test a simple DN with an oid prefix (lowercase) : oid.12.34.56 = azerty
*/
public void testLdapDNOidLower() throws InvalidNameException
{
LdapDN dn = new LdapDN( "oid.12.34.56 = azerty" );
assertTrue( LdapDN.isValid( "oid.12.34.56 = azerty" ) );
assertEquals( "oid.12.34.56=azerty", dn.toString() );
assertEquals( "oid.12.34.56 = azerty", dn.getUpName() );
}
/**
* test a simple DN with an oid attribut without oid prefix : 12.34.56 =
* azerty
*/
public void testLdapDNOidWithoutPrefix() throws InvalidNameException
{
LdapDN dn = new LdapDN( "12.34.56 = azerty" );
assertTrue( LdapDN.isValid( "12.34.56 = azerty" ) );
assertEquals( "12.34.56=azerty", dn.toString() );
assertEquals( "12.34.56 = azerty", dn.getUpName() );
}
/**
* test a composite DN with an oid attribut wiithout oid prefix : 12.34.56 =
* azerty; 7.8 = test
*/
public void testLdapDNCompositeOidWithoutPrefix() throws InvalidNameException
{
LdapDN dn = new LdapDN( "12.34.56 = azerty; 7.8 = test" );
assertTrue( LdapDN.isValid( "12.34.56 = azerty; 7.8 = test" ) );
assertEquals( "12.34.56=azerty,7.8=test", dn.toString() );
assertEquals( "12.34.56 = azerty; 7.8 = test", dn.getUpName() );
}
/**
* test a simple DN with pair char attribute value : a = \,\=\+\<\>\#\;\\\"\C4\8D"
*/
public void testLdapDNPairCharAttributeValue() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C4\\8D" );
assertTrue( LdapDN.isValid( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C4\\8D" ) );
assertEquals( "a=\\,=\\+\\<\\>#\\;\\\\\\\"\\C4\\8D", dn.toString() );
assertEquals( "a = \\,\\=\\+\\<\\>\\#\\;\\\\\\\"\\C4\\8D", dn.getUpName() );
}
/**
* test a simple DN with pair char attribute value : "SN=Lu\C4\8Di\C4\87"
*/
public void testLdapDNRFC253_Lucic() throws InvalidNameException
{
LdapDN dn = new LdapDN( "SN=Lu\\C4\\8Di\\C4\\87" );
assertTrue( LdapDN.isValid( "SN=Lu\\C4\\8Di\\C4\\87" ) );
assertEquals( "sn=Lu\\C4\\8Di\\C4\\87", dn.toString() );
assertEquals( "SN=Lu\\C4\\8Di\\C4\\87", dn.getUpName() );
}
/**
* test a simple DN with hexString attribute value : a = #0010A0AAFF
*/
public void testLdapDNHexStringAttributeValue() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = #0010A0AAFF" );
assertTrue( LdapDN.isValid( "a = #0010A0AAFF" ) );
assertEquals( "a=#0010A0AAFF", dn.toString() );
assertEquals( "a = #0010A0AAFF", dn.getUpName() );
}
/**
* test a simple DN with a # on first position
*/
public void testLdapDNSharpFirst() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = \\#this is a sharp" );
assertTrue( LdapDN.isValid( "a = \\#this is a sharp" ) );
assertEquals( "a=\\#this is a sharp", dn.toString() );
assertEquals( "a = \\#this is a sharp", dn.getUpName() );
}
/**
* test a simple DN with a wrong hexString attribute value : a = #0010Z0AAFF
*/
public void testLdapDNWrongHexStringAttributeValue()
{
try
{
new LdapDN( "a = #0010Z0AAFF" );
fail();
}
catch ( InvalidNameException ine )
{
assertFalse( LdapDN.isValid( "a = #0010Z0AAFF" ) );
assertTrue( true );
}
}
/**
* test a simple DN with a wrong hexString attribute value : a = #AABBCCDD3
*/
public void testLdapDNWrongHexStringAttributeValue2()
{
try
{
new LdapDN( "a = #AABBCCDD3" );
fail();
}
catch ( InvalidNameException ine )
{
assertFalse( LdapDN.isValid( "a = #AABBCCDD3" ) );
assertTrue( true );
}
}
/**
* test a simple DN with a quote in attribute value : a = quoted \"value\"
*/
public void testLdapDNQuoteInAttributeValue() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = quoted \\\"value\\\"" );
assertTrue( LdapDN.isValid( "a = quoted \\\"value\\\"" ) );
assertEquals( "a=quoted \\\"value\\\"", dn.toString() );
assertEquals( "a = quoted \\\"value\\\"", dn.getUpName() );
}
/**
* test a simple DN with quoted attribute value : a = \" quoted value \"
*/
public void testLdapDNQuotedAttributeValue() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = \\\" quoted value \\\"" );
assertTrue( LdapDN.isValid( "a = \\\" quoted value \\\"" ) );
assertEquals( "a=\\\" quoted value \\\"", dn.toString() );
assertEquals( "a = \\\" quoted value \\\"", dn.getUpName() );
}
/**
* test a simple DN with a comma at the end
*/
public void testLdapDNComaAtEnd() throws InvalidNameException
{
assertFalse( LdapDN.isValid( "a = b," ) );
assertFalse( LdapDN.isValid( "a = b, " ) );
try
{
new LdapDN( "a = b," );
fail();
}
catch ( InvalidNameException ine )
{
assertTrue( true );
}
}
// REMOVE operation -------------------------------------------------------
/**
* test a remove from position 0
*/
public void testLdapDNRemove0() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d, e=f" );
assertTrue( LdapDN.isValid( "a=b, c=d, e=f" ) );
assertEquals( "e=f", dn.remove( 0 ).toString() );
assertEquals( "a=b,c=d", dn.toString() );
assertEquals( "a=b, c=d", dn.getUpName() );
}
/**
* test a remove from position 1
*/
public void testLdapDNRemove1() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d, e=f" );
assertTrue( LdapDN.isValid( "a=b, c=d, e=f" ) );
assertEquals( "c=d", dn.remove( 1 ).toString() );
assertEquals( "a=b, e=f", dn.getUpName() );
}
/**
* test a remove from position 2
*/
public void testLdapDNRemove2() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d, e=f" );
assertTrue( LdapDN.isValid( "a=b, c=d, e=f" ) );
assertEquals( "a=b", dn.remove( 2 ).toString() );
assertEquals( " c=d, e=f", dn.getUpName() );
}
/**
* test a remove from position 1 whith semi colon
*/
public void testLdapDNRemove1WithSemiColon() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d; e=f" );
assertTrue( LdapDN.isValid( "a=b, c=d; e=f" ) );
assertEquals( "c=d", dn.remove( 1 ).toString() );
assertEquals( "a=b, e=f", dn.getUpName() );
}
/**
* test a remove out of bound
*/
public void testLdapDNRemoveOutOfBound() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d; e=f" );
assertTrue( LdapDN.isValid( "a=b, c=d; e=f" ) );
try
{
dn.remove( 4 );
// We whould never reach this point
Assert.fail();
}
catch ( ArrayIndexOutOfBoundsException aoobe )
{
assertTrue( true );
}
}
// SIZE operations
/**
* test a 0 size
*/
public void testLdapDNSize0()
{
LdapDN dn = new LdapDN();
assertTrue( LdapDN.isValid( "" ) );
assertEquals( 0, dn.size() );
}
/**
* test a 1 size
*/
public void testLdapDNSize1() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b" );
assertTrue( LdapDN.isValid( "a=b" ) );
assertEquals( 1, dn.size() );
}
/**
* test a 3 size
*/
public void testLdapDNSize3() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d, e=f" );
assertTrue( LdapDN.isValid( "a=b, c=d, e=f" ) );
assertEquals( 3, dn.size() );
}
/**
* test a 3 size with NameComponents
*/
public void testLdapDNSize3NC() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b+c=d, c=d, e=f" );
assertTrue( LdapDN.isValid( "a=b+c=d, c=d, e=f" ) );
assertEquals( 3, dn.size() );
}
/**
* test size after operations
*/
public void testLdapResizing() throws InvalidNameException
{
LdapDN dn = new LdapDN();
assertEquals( 0, dn.size() );
dn.add( "e = f" );
assertEquals( 1, dn.size() );
dn.add( "c = d" );
assertEquals( 2, dn.size() );
dn.remove( 0 );
assertEquals( 1, dn.size() );
dn.remove( 0 );
assertEquals( 0, dn.size() );
}
// ADD Operations
/**
* test Add on a new LdapDN
*/
public void testLdapEmptyAdd() throws InvalidNameException
{
LdapDN dn = new LdapDN();
dn.add( "e = f" );
assertEquals( "e=f", dn.toString() );
assertEquals( "e = f", dn.getUpName() );
assertEquals( 1, dn.size() );
}
/**
* test Add to an existing LdapDN
*/
public void testLdapDNAdd() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d" );
dn.add( "e = f" );
assertEquals( "e=f,a=b,c=d", dn.toString() );
assertEquals( "e = f,a=b, c=d", dn.getUpName() );
assertEquals( 3, dn.size() );
}
/**
* test Add a composite RDN to an existing LdapDN
*/
public void testLdapDNAddComposite() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d" );
dn.add( "e = f + g = h" );
// Warning ! The order of AVAs has changed during the parsing
// This has no impact on the correctness of the DN, but the
// String used to do the comparizon should be inverted.
assertEquals( "e=f+g=h,a=b,c=d", dn.toString() );
assertEquals( 3, dn.size() );
}
/**
* test Add at the end of an existing LdapDN
*/
public void testLdapDNAddEnd() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d" );
dn.add( dn.size(), "e = f" );
assertEquals( "e = f,a=b, c=d", dn.getUpName() );
assertEquals( 3, dn.size() );
}
/**
* test Add at the start of an existing LdapDN
*/
public void testLdapDNAddStart() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d" );
dn.add( 0, "e = f" );
assertEquals( "a=b, c=d,e = f", dn.getUpName() );
assertEquals( 3, dn.size() );
}
/**
* test Add at the middle of an existing LdapDN
*/
public void testLdapDNAddMiddle() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d" );
dn.add( 1, "e = f" );
assertEquals( "a=b,e = f, c=d", dn.getUpName() );
assertEquals( 3, dn.size() );
}
// ADD ALL Operations
/**
* Test AddAll
*
* @throws InvalidNameException
*/
public void testLdapDNAddAll() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
LdapDN dn2 = new LdapDN( "c = d" );
dn.addAll( dn2 );
assertEquals( "c = d,a = b", dn.getUpName() );
}
/**
* Test AddAll with an empty added name
*
* @throws InvalidNameException
*/
public void testLdapDNAddAllAddedNameEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
LdapDN dn2 = new LdapDN();
dn.addAll( dn2 );
assertEquals( "a=b", dn.toString() );
assertEquals( "a = b", dn.getUpName() );
}
/**
* Test AddAll to an empty name
*
* @throws InvalidNameException
*/
public void testLdapDNAddAllNameEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN();
LdapDN dn2 = new LdapDN( "a = b" );
dn.addAll( dn2 );
assertEquals( "a = b", dn.getUpName() );
}
/**
* Test AddAll at position 0
*
* @throws InvalidNameException
*/
public void testLdapDNAt0AddAll() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
LdapDN dn2 = new LdapDN( "c = d" );
dn.addAll( 0, dn2 );
assertEquals( "a = b,c = d", dn.getUpName() );
}
/**
* Test AddAll at position 1
*
* @throws InvalidNameException
*/
public void testLdapDNAt1AddAll() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
LdapDN dn2 = new LdapDN( "c = d" );
dn.addAll( 1, dn2 );
assertEquals( "c = d,a = b", dn.getUpName() );
}
/**
* Test AddAll at the middle
*
* @throws InvalidNameException
*/
public void testLdapDNAtTheMiddleAddAll() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b, c = d" );
LdapDN dn2 = new LdapDN( "e = f" );
dn.addAll( 1, dn2 );
assertEquals( "a = b,e = f, c = d", dn.getUpName() );
}
/**
* Test AddAll with an empty added name at position 0
*
* @throws InvalidNameException
*/
public void testLdapDNAddAllAt0AddedNameEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
LdapDN dn2 = new LdapDN();
dn.addAll( 0, dn2 );
assertEquals( "a=b", dn.toString() );
assertEquals( "a = b", dn.getUpName() );
}
/**
* Test AddAll to an empty name at position 0
*
* @throws InvalidNameException
*/
public void testLdapDNAddAllAt0NameEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN();
LdapDN dn2 = new LdapDN( "a = b" );
dn.addAll( 0, dn2 );
assertEquals( "a = b", dn.getUpName() );
}
// GET PREFIX actions
/**
* Get the prefix at pos 0
*/
public void testLdapDNGetPrefixPos0() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getPrefix( 0 ) );
assertEquals( "", newDn.getUpName() );
}
/**
* Get the prefix at pos 1
*/
public void testLdapDNGetPrefixPos1() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getPrefix( 1 ) );
assertEquals( "e = f", newDn.getUpName() );
}
/**
* Get the prefix at pos 2
*/
public void testLdapDNGetPrefixPos2() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getPrefix( 2 ) );
assertEquals( " c=d,e = f", newDn.getUpName() );
}
/**
* Get the prefix at pos 3
*/
public void testLdapDNGetPrefixPos3() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getPrefix( 3 ) );
assertEquals( "a=b, c=d,e = f", newDn.getUpName() );
}
/**
* Get the prefix out of bound
*/
public void testLdapDNGetPrefixPos4() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
try
{
dn.getPrefix( 4 );
// We should not reach this point.
Assert.fail();
}
catch ( ArrayIndexOutOfBoundsException aoobe )
{
assertTrue( true );
}
}
/**
* Get the prefix of an empty LdapName
*/
public void testLdapDNGetPrefixEmptyDN()
{
LdapDN dn = new LdapDN();
LdapDN newDn = ( ( LdapDN ) dn.getPrefix( 0 ) );
assertEquals( "", newDn.getUpName() );
}
// GET SUFFIX operations
/**
* Get the suffix at pos 0
*/
public void testLdapDNGetSuffixPos0() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getSuffix( 0 ) );
assertEquals( "a=b, c=d,e = f", newDn.getUpName() );
}
/**
* Get the suffix at pos 1
*/
public void testLdapDNGetSuffixPos1() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getSuffix( 1 ) );
assertEquals( "a=b, c=d", newDn.getUpName() );
}
/**
* Get the suffix at pos 2
*/
public void testLdapDNGetSuffixPos2() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getSuffix( 2 ) );
assertEquals( "a=b", newDn.getUpName() );
}
/**
* Get the suffix at pos 3
*/
public void testLdapDNGetSuffixPos3() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
LdapDN newDn = ( ( LdapDN ) dn.getSuffix( 3 ) );
assertEquals( "", newDn.getUpName() );
}
/**
* Get the suffix out of bound
*/
public void testLdapDNGetSuffixPos4() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
try
{
dn.getSuffix( 4 );
// We should not reach this point.
Assert.fail();
}
catch ( ArrayIndexOutOfBoundsException aoobe )
{
assertTrue( true );
}
}
/**
* Get the suffix of an empty LdapName
*/
public void testLdapDNGetSuffixEmptyDN()
{
LdapDN dn = new LdapDN();
LdapDN newDn = ( ( LdapDN ) dn.getSuffix( 0 ) );
assertEquals( "", newDn.getUpName() );
}
// IS EMPTY operations
/**
* Test that a LdapDN is empty
*/
public void testLdapDNIsEmpty()
{
LdapDN dn = new LdapDN();
assertEquals( true, dn.isEmpty() );
}
/**
* Test that a LdapDN is empty
*/
public void testLdapDNNotEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b" );
assertEquals( false, dn.isEmpty() );
}
/**
* Test that a LdapDN is empty
*/
public void testLdapDNRemoveIsEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d" );
dn.remove( 0 );
dn.remove( 0 );
assertEquals( true, dn.isEmpty() );
}
// STARTS WITH operations
/**
* Test a startsWith a null LdapDN
*/
public void testLdapDNStartsWithNull() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.startsWith( null ) );
}
/**
* Test a startsWith an empty LdapDN
*/
public void testLdapDNStartsWithEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.startsWith( new LdapDN() ) );
}
/**
* Test a startsWith an simple LdapDN
*/
public void testLdapDNStartsWithSimple() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.startsWith( new LdapDN( "e=f" ) ) );
}
/**
* Test a startsWith a complex LdapDN
*/
public void testLdapDNStartsWithComplex() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.startsWith( new LdapDN( "c = d, e = f" ) ) );
}
/**
* Test a startsWith a complex LdapDN
*/
public void testLdapDNStartsWithComplexMixedCase() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( false, dn.startsWith( new LdapDN( "c = D, E = f" ) ) );
}
/**
* Test a startsWith a full LdapDN
*/
public void testLdapDNStartsWithFull() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.startsWith( new LdapDN( "a= b; c = d, e = f" ) ) );
}
/**
* Test a startsWith which returns false
*/
public void testLdapDNStartsWithWrong() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( false, dn.startsWith( new LdapDN( "c = t, e = f" ) ) );
}
// ENDS WITH operations
/**
* Test a endsWith a null LdapDN
*/
public void testLdapDNEndsWithNull() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.endsWith( null ) );
}
/**
* Test a endsWith an empty LdapDN
*/
public void testLdapDNEndsWithEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.endsWith( new LdapDN() ) );
}
/**
* Test a endsWith an simple LdapDN
*/
public void testLdapDNEndsWithSimple() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.endsWith( new LdapDN( "a=b" ) ) );
}
/**
* Test a endsWith a complex LdapDN
*/
public void testLdapDNEndsWithComplex() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.endsWith( new LdapDN( "a = b, c = d" ) ) );
}
/**
* Test a endsWith a complex LdapDN
*/
public void testLdapDNEndsWithComplexMixedCase() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( false, dn.endsWith( new LdapDN( "a = B, C = d" ) ) );
}
/**
* Test a endsWith a full LdapDN
*/
public void testLdapDNEndsWithFull() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( true, dn.endsWith( new LdapDN( "a= b; c = d, e = f" ) ) );
}
/**
* Test a endsWith which returns false
*/
public void testLdapDNEndsWithWrong() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b, c=d,e = f" );
assertEquals( false, dn.endsWith( new LdapDN( "a = b, e = f" ) ) );
}
// GET ALL operations
/**
* test a getAll operation on a null DN
*/
public void testLdapDNGetAllNull()
{
LdapDN dn = new LdapDN();
Enumeration nc = dn.getAll();
assertEquals( false, nc.hasMoreElements() );
}
/**
* test a getAll operation on an empty DN
*/
public void testLdapDNGetAllEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "" );
Enumeration nc = dn.getAll();
assertEquals( false, nc.hasMoreElements() );
}
/**
* test a getAll operation on a simple DN
*/
public void testLdapDNGetAllSimple() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b" );
Enumeration nc = dn.getAll();
assertEquals( true, nc.hasMoreElements() );
assertEquals( "a=b", nc.nextElement() );
assertEquals( false, nc.hasMoreElements() );
}
/**
* test a getAll operation on a complex DN
*/
public void testLdapDNGetAllComplex() throws InvalidNameException
{
LdapDN dn = new LdapDN( "e=f+g=h,a=b,c=d" );
Enumeration nc = dn.getAll();
assertEquals( true, nc.hasMoreElements() );
assertEquals( "c=d", nc.nextElement() );
assertEquals( true, nc.hasMoreElements() );
assertEquals( "a=b", nc.nextElement() );
assertEquals( true, nc.hasMoreElements() );
assertEquals( "e=f+g=h", nc.nextElement() );
assertEquals( false, nc.hasMoreElements() );
}
/**
* test a getAll operation on a complex DN
*/
public void testLdapDNGetAllComplexOrdered() throws InvalidNameException
{
LdapDN dn = new LdapDN( "g=h+e=f,a=b,c=d" );
Enumeration nc = dn.getAll();
assertEquals( true, nc.hasMoreElements() );
assertEquals( "c=d", nc.nextElement() );
assertEquals( true, nc.hasMoreElements() );
assertEquals( "a=b", nc.nextElement() );
assertEquals( true, nc.hasMoreElements() );
// The lowest atav should be the first one
assertEquals( "e=f+g=h", nc.nextElement() );
assertEquals( false, nc.hasMoreElements() );
}
// CLONE Operation
/**
* test a clone operation on a empty DN
*/
public void testLdapDNCloneEmpty()
{
LdapDN dn = new LdapDN();
LdapDN clone = ( LdapDN ) dn.clone();
assertEquals( "", clone.getUpName() );
}
/**
* test a clone operation on a simple DN
*/
public void testLdapDNCloneSimple() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a=b" );
LdapDN clone = ( LdapDN ) dn.clone();
assertEquals( "a=b", clone.getUpName() );
dn.remove( 0 );
assertEquals( "a=b", clone.getUpName() );
}
/**
* test a clone operation on a complex DN
*/
public void testLdapDNCloneComplex() throws InvalidNameException
{
LdapDN dn = new LdapDN( "e=f+g=h,a=b,c=d" );
LdapDN clone = ( LdapDN ) dn.clone();
assertEquals( "e=f+g=h,a=b,c=d", clone.getUpName() );
dn.remove( 2 );
assertEquals( "e=f+g=h,a=b,c=d", clone.getUpName() );
}
// GET operations
/**
* test a get in a null DN
*/
public void testLdapDNGetNull()
{
LdapDN dn = new LdapDN();
assertEquals( "", dn.get( 0 ) );
}
/**
* test a get in an empty DN
*/
public void testLdapDNGetEmpty() throws InvalidNameException
{
LdapDN dn = new LdapDN( "" );
assertEquals( "", dn.get( 0 ) );
}
/**
* test a get in a simple DN
*/
public void testLdapDNGetSimple() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b" );
assertEquals( "a=b", dn.get( 0 ) );
}
/**
* test a get in a complex DN
*/
public void testLdapDNGetComplex() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b + c= d, e= f; g =h" );
assertEquals( "g=h", dn.get( 0 ) );
assertEquals( "e=f", dn.get( 1 ) );
assertEquals( "a=b+c=d", dn.get( 2 ) );
}
/**
* test a get out of bound
*/
public void testLdapDNGetOutOfBound() throws InvalidNameException
{
LdapDN dn = new LdapDN( "a = b + c= d, e= f; g =h" );
try
{
dn.get( 4 );
Assert.fail();
}
catch ( ArrayIndexOutOfBoundsException aioob )
{
assertTrue( true );
}
}
/**
* Tests the examples from the JNDI tutorials to make sure LdapName behaves
* appropriately. The example can be found online <a href="">here</a>.
*
* @throws Exception
* if anything goes wrong
*/
public void testJNDITutorialExample() throws Exception
{
// Parse the name
Name name = new LdapDN( "cn=John,ou=People,ou=Marketing" );
// Remove the second component from the head: ou=People
String out = name.remove( 1 ).toString();
// System.out.println( l_out ) ;
assertEquals( "ou=People", out );
// Add to the head (first): cn=John,ou=Marketing,ou=East
out = name.add( 0, "ou=East" ).toString();
assertEquals( "cn=John,ou=Marketing,ou=East", out );
// Add to the tail (last): cn=HomeDir,cn=John,ou=Marketing,ou=East
out = name.add( "cn=HomeDir" ).toString();
assertEquals( "cn=HomeDir,cn=John,ou=Marketing,ou=East", out );
}
public void testAttributeEqualsIsCaseInSensitive() throws Exception
{
Name name1 = new LdapDN( "cn=HomeDir" );
Name name2 = new LdapDN( "CN=HomeDir" );
assertTrue( name1.equals( name2 ) );
}
public void testAttributeTypeEqualsIsCaseInsensitive() throws Exception
{
Name name1 = new LdapDN( "cn=HomeDir+cn=WorkDir" );
Name name2 = new LdapDN( "cn=HomeDir+CN=WorkDir" );
assertTrue( name1.equals( name2 ) );
}
public void testNameEqualsIsInsensitiveToAttributesOrder() throws Exception
{
Name name1 = new LdapDN( "cn=HomeDir+cn=WorkDir" );
Name name2 = new LdapDN( "cn=WorkDir+cn=HomeDir" );
assertTrue( name1.equals( name2 ) );
}
public void testAttributeComparisonIsCaseInSensitive() throws Exception
{
Name name1 = new LdapDN( "cn=HomeDir" );
Name name2 = new LdapDN( "CN=HomeDir" );
assertEquals( 0, name1.compareTo( name2 ) );
}
public void testAttributeTypeComparisonIsCaseInsensitive() throws Exception
{
Name name1 = new LdapDN( "cn=HomeDir+cn=WorkDir" );
Name name2 = new LdapDN( "cn=HomeDir+CN=WorkDir" );
assertEquals( 0, name1.compareTo( name2 ) );
}
public void testNameComparisonIsInsensitiveToAttributesOrder() throws Exception
{
Name name1 = new LdapDN( "cn=HomeDir+cn=WorkDir" );
Name name2 = new LdapDN( "cn=WorkDir+cn=HomeDir" );
assertEquals( 0, name1.compareTo( name2 ) );
}
public void testNameComparisonIsInsensitiveToAttributesOrderFailure() throws Exception
{
Name name1 = new LdapDN( "cn= HomeDir+cn=Workdir" );
Name name2 = new LdapDN( "cn = Work+cn=HomeDir" );
assertEquals( 1, name1.compareTo( name2 ) );
}
/**
* Test the encoding of a LdanDN
*/
public void testNameToBytes() throws Exception
{
LdapDN dn = new LdapDN( "cn = John, ou = People, OU = Marketing" );
byte[] bytes = LdapDN.getBytes( dn );
assertEquals( 30, LdapDN.getNbBytes( dn ) );
assertEquals( "cn=John,ou=People,ou=Marketing", new String( bytes, "UTF-8" ) );
}
public void testStringParser() throws Exception
{
String dn = StringTools.utf8ToString( new byte[]{'C', 'N', ' ', '=', ' ', 'E', 'm', 'm', 'a', 'n', 'u', 'e',
'l', ' ', ' ', 'L', (byte)0xc3, (byte)0xa9, 'c', 'h', 'a', 'r', 'n', 'y'} );
Name name = LdapDnParser.getNameParser().parse( dn );
assertEquals( dn, ( ( LdapDN ) name ).getUpName() );
assertEquals( "cn=Emmanuel L\\C3\\A9charny", name.toString() );
}
/**
* Class to test for void LdapName(String)
*
* @throws Exception
* if anything goes wrong.
*/
public void testLdapNameString() throws Exception
{
Name name = new LdapDN( "" );
Name name50 = new LdapDN();
assertEquals( name50, name );
Name name0 = new LdapDN( "ou=Marketing,ou=East" );
Name copy = new LdapDN( "ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name2 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name3 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Name name4 = new LdapDN( "cn=Website,cn=John,ou=Marketing,ou=West" );
Name name5 = new LdapDN( "cn=Airline,cn=John,ou=Marketing,ou=West" );
assertTrue( name0.compareTo( copy ) == 0 );
assertTrue( name0.compareTo( name1 ) < 0 );
assertTrue( name0.compareTo( name2 ) < 0 );
assertTrue( name1.compareTo( name2 ) < 0 );
assertTrue( name2.compareTo( name1 ) > 0 );
assertTrue( name2.compareTo( name0 ) > 0 );
assertTrue( name2.compareTo( name3 ) < 0 );
assertTrue( name2.compareTo( name4 ) < 0 );
assertTrue( name3.compareTo( name4 ) < 0 );
assertTrue( name3.compareTo( name5 ) > 0 );
assertTrue( name4.compareTo( name5 ) > 0 );
assertTrue( name2.compareTo( name5 ) < 0 );
}
/**
* Class to test for void LdapName()
*/
public void testLdapName()
{
Name name = new LdapDN();
assertTrue( name.toString().equals( "" ) );
}
/**
* Class to test for void LdapName(List)
*/
public void testLdapNameList() throws InvalidNameException
{
List<String> list = new ArrayList<String>();
list.add( "ou=People" );
list.add( "dc=example" );
list.add( "dc=com" );
Name name = new LdapDN( list );
assertTrue( name.toString().equals( "ou=People,dc=example,dc=com" ) );
}
/**
* Class to test for void LdapName(Iterator)
*/
public void testLdapNameIterator() throws InvalidNameException
{
List<String> list = new ArrayList<String>();
list.add( "ou=People" );
list.add( "dc=example" );
list.add( "dc=com" );
Name name = new LdapDN( list.iterator() );
assertTrue( name.toString().equals( "ou=People,dc=example,dc=com" ) );
}
/**
* Class to test for Object clone()
*
* @throws Exception
* if anything goes wrong.
*/
public void testClone() throws Exception
{
String strName = "cn=HomeDir,cn=John,ou=Marketing,ou=East";
Name name = new LdapDN( strName );
assertEquals( name, name.clone() );
}
/**
* Class to test for compareTo
*
* @throws Exception
* if anything goes wrong.
*/
public void testCompareTo() throws Exception
{
Name name0 = new LdapDN( "ou=Marketing,ou=East" );
Name copy = new LdapDN( "ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name2 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name3 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Name name4 = new LdapDN( "cn=Website,cn=John,ou=Marketing,ou=West" );
Name name5 = new LdapDN( "cn=Airline,cn=John,ou=Marketing,ou=West" );
assertTrue( name0.compareTo( copy ) == 0 );
assertTrue( name0.compareTo( name1 ) < 0 );
assertTrue( name0.compareTo( name2 ) < 0 );
assertTrue( name1.compareTo( name2 ) < 0 );
assertTrue( name2.compareTo( name1 ) > 0 );
assertTrue( name2.compareTo( name0 ) > 0 );
assertTrue( name2.compareTo( name3 ) < 0 );
assertTrue( name2.compareTo( name4 ) < 0 );
assertTrue( name3.compareTo( name4 ) < 0 );
assertTrue( name3.compareTo( name5 ) > 0 );
assertTrue( name4.compareTo( name5 ) > 0 );
assertTrue( name2.compareTo( name5 ) < 0 );
List<Name> list = new ArrayList<Name>();
Comparator<Name> comparator = new Comparator<Name>()
{
public int compare( Name obj1, Name obj2 )
{
Name n1 = obj1;
Name n2 = obj2;
return n1.compareTo( n2 );
}
public boolean equals( Object obj )
{
return super.equals( obj );
}
public int hashCode()
{
return super.hashCode();
}
};
list.add( name0 );
list.add( name1 );
list.add( name2 );
list.add( name3 );
list.add( name4 );
list.add( name5 );
Collections.sort( list, comparator );
assertEquals( name0, list.get( 0 ) );
assertEquals( name1, list.get( 1 ) );
assertEquals( name2, list.get( 2 ) );
assertEquals( name5, list.get( 3 ) );
assertEquals( name3, list.get( 4 ) );
assertEquals( name4, list.get( 5 ) );
}
/**
* Class to test for size
*
* @throws Exception
* if anything goes wrong.
*/
public void testSize() throws Exception
{
Name name0 = new LdapDN( "" );
Name name1 = new LdapDN( "ou=East" );
Name name2 = new LdapDN( "ou=Marketing,ou=East" );
Name name3 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name4 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name5 = new LdapDN( "cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Name name6 = new LdapDN( "cn=Airline,cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
assertEquals( 0, name0.size() );
assertEquals( 1, name1.size() );
assertEquals( 2, name2.size() );
assertEquals( 3, name3.size() );
assertEquals( 4, name4.size() );
assertEquals( 5, name5.size() );
assertEquals( 6, name6.size() );
}
/**
* Class to test for isEmpty
*
* @throws Exception
* if anything goes wrong.
*/
public void testIsEmpty() throws Exception
{
Name name0 = new LdapDN( "" );
Name name1 = new LdapDN( "ou=East" );
Name name2 = new LdapDN( "ou=Marketing,ou=East" );
Name name3 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name4 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name5 = new LdapDN( "cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Name name6 = new LdapDN( "cn=Airline,cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
assertEquals( true, name0.isEmpty() );
assertEquals( false, name1.isEmpty() );
assertEquals( false, name2.isEmpty() );
assertEquals( false, name3.isEmpty() );
assertEquals( false, name4.isEmpty() );
assertEquals( false, name5.isEmpty() );
assertEquals( false, name6.isEmpty() );
}
/**
* Class to test for getAll
*
* @throws Exception
* if anything goes wrong.
*/
public void testGetAll() throws Exception
{
Name name0 = new LdapDN( "" );
Name name1 = new LdapDN( "ou=East" );
Name name2 = new LdapDN( "ou=Marketing,ou=East" );
Name name3 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name4 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name5 = new LdapDN( "cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Name name6 = new LdapDN( "cn=Airline,cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Enumeration enum0 = name0.getAll();
assertEquals( false, enum0.hasMoreElements() );
Enumeration enum1 = name1.getAll();
assertEquals( true, enum1.hasMoreElements() );
for ( int i = 0; enum1.hasMoreElements(); i++ )
{
String element = ( String ) enum1.nextElement();
if ( i == 0 )
{
assertEquals( "ou=East", element );
}
}
Enumeration enum2 = name2.getAll();
assertEquals( true, enum2.hasMoreElements() );
for ( int i = 0; enum2.hasMoreElements(); i++ )
{
String element = ( String ) enum2.nextElement();
if ( i == 0 )
{
assertEquals( "ou=East", element );
}
if ( i == 1 )
{
assertEquals( "ou=Marketing", element );
}
}
Enumeration enum3 = name3.getAll();
assertEquals( true, enum3.hasMoreElements() );
for ( int i = 0; enum3.hasMoreElements(); i++ )
{
String element = ( String ) enum3.nextElement();
if ( i == 0 )
{
assertEquals( "ou=East", element );
}
if ( i == 1 )
{
assertEquals( "ou=Marketing", element );
}
if ( i == 2 )
{
assertEquals( "cn=John", element );
}
}
Enumeration enum4 = name4.getAll();
assertEquals( true, enum4.hasMoreElements() );
for ( int i = 0; enum4.hasMoreElements(); i++ )
{
String element = ( String ) enum4.nextElement();
if ( i == 0 )
{
assertEquals( "ou=East", element );
}
if ( i == 1 )
{
assertEquals( "ou=Marketing", element );
}
if ( i == 2 )
{
assertEquals( "cn=John", element );
}
if ( i == 3 )
{
assertEquals( "cn=HomeDir", element );
}
}
Enumeration enum5 = name5.getAll();
assertEquals( true, enum5.hasMoreElements() );
for ( int i = 0; enum5.hasMoreElements(); i++ )
{
String element = ( String ) enum5.nextElement();
if ( i == 0 )
{
assertEquals( "ou=West", element );
}
if ( i == 1 )
{
assertEquals( "ou=Marketing", element );
}
if ( i == 2 )
{
assertEquals( "cn=John", element );
}
if ( i == 3 )
{
assertEquals( "cn=HomeDir", element );
}
if ( i == 4 )
{
assertEquals( "cn=Website", element );
}
}
Enumeration enum6 = name6.getAll();
assertEquals( true, enum6.hasMoreElements() );
for ( int i = 0; enum6.hasMoreElements(); i++ )
{
String element = ( String ) enum6.nextElement();
if ( i == 0 )
{
assertEquals( "ou=West", element );
}
if ( i == 1 )
{
assertEquals( "ou=Marketing", element );
}
if ( i == 2 )
{
assertEquals( "cn=John", element );
}
if ( i == 3 )
{
assertEquals( "cn=HomeDir", element );
}
if ( i == 4 )
{
assertEquals( "cn=Website", element );
}
if ( i == 5 )
{
assertEquals( "cn=Airline", element );
}
}
}
/**
* Class to test for getAllRdn
*
* @throws Exception
* if anything goes wrong.
*/
public void testGetAllRdn() throws Exception
{
LdapDN name = new LdapDN( "cn=Airline,cn=Website,cn=HomeDir,cn=John,ou=Marketing,ou=West" );
Enumeration rdns = name.getAllRdn();
assertEquals( true, rdns.hasMoreElements() );
for ( int i = 0; rdns.hasMoreElements(); i++ )
{
Rdn element = ( Rdn ) rdns.nextElement();
if ( i == 0 )
{
assertEquals( "ou=West", element.toString() );
}
if ( i == 1 )
{
assertEquals( "ou=Marketing", element.toString() );
}
if ( i == 2 )
{
assertEquals( "cn=John", element.toString() );
}
if ( i == 3 )
{
assertEquals( "cn=HomeDir", element.toString() );
}
if ( i == 4 )
{
assertEquals( "cn=Website", element.toString() );
}
if ( i == 5 )
{
assertEquals( "cn=Airline", element.toString() );
}
}
}
/**
* Class to test for get
*
* @throws Exception
* anything goes wrong
*/
public void testGet() throws Exception
{
Name name = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertEquals( "cn=HomeDir", name.get( 3 ) );
assertEquals( "cn=John", name.get( 2 ) );
assertEquals( "ou=Marketing", name.get( 1 ) );
assertEquals( "ou=East", name.get( 0 ) );
}
/**
* Class to test for getSuffix
*
* @throws Exception
* anything goes wrong
*/
public void testGetXSuffix() throws Exception
{
Name name = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertEquals( "", name.getSuffix( 4 ).toString() );
assertEquals( "cn=HomeDir", name.getSuffix( 3 ).toString() );
assertEquals( "cn=HomeDir,cn=John", name.getSuffix( 2 ).toString() );
assertEquals( "cn=HomeDir,cn=John,ou=Marketing", name.getSuffix( 1 ).toString() );
assertEquals( "cn=HomeDir,cn=John,ou=Marketing,ou=East", name.getSuffix( 0 ).toString() );
}
/**
* Class to test for getPrefix
*
* @throws Exception
* anything goes wrong
*/
public void testGetPrefix() throws Exception
{
Name name = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertEquals( "cn=HomeDir,cn=John,ou=Marketing,ou=East", name.getPrefix( 4 ).toString() );
assertEquals( "cn=John,ou=Marketing,ou=East", name.getPrefix( 3 ).toString() );
assertEquals( "ou=Marketing,ou=East", name.getPrefix( 2 ).toString() );
assertEquals( "ou=East", name.getPrefix( 1 ).toString() );
assertEquals( "", name.getPrefix( 0 ).toString() );
}
/**
* Class to test for startsWith
*
* @throws Exception
* anything goes wrong
*/
public void testStartsWith() throws Exception
{
Name name0 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name2 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name3 = new LdapDN( "ou=Marketing,ou=East" );
Name name4 = new LdapDN( "ou=East" );
Name name5 = new LdapDN( "" );
Name name6 = new LdapDN( "cn=HomeDir" );
Name name7 = new LdapDN( "cn=HomeDir,cn=John" );
Name name8 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing" );
assertTrue( name0.startsWith( name1 ) );
assertTrue( name0.startsWith( name2 ) );
assertTrue( name0.startsWith( name3 ) );
assertTrue( name0.startsWith( name4 ) );
assertTrue( name0.startsWith( name5 ) );
assertTrue( !name0.startsWith( name6 ) );
assertTrue( !name0.startsWith( name7 ) );
assertTrue( !name0.startsWith( name8 ) );
}
/**
* Class to test for endsWith
*
* @throws Exception
* anything goes wrong
*/
public void testEndsWith() throws Exception
{
Name name0 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
Name name2 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
Name name3 = new LdapDN( "ou=Marketing,ou=East" );
Name name4 = new LdapDN( "ou=East" );
Name name5 = new LdapDN( "" );
Name name6 = new LdapDN( "cn=HomeDir" );
Name name7 = new LdapDN( "cn=HomeDir,cn=John" );
Name name8 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing" );
assertTrue( name0.endsWith( name1 ) );
assertTrue( !name0.endsWith( name2 ) );
assertTrue( !name0.endsWith( name3 ) );
assertTrue( !name0.endsWith( name4 ) );
assertTrue( name0.endsWith( name5 ) );
assertTrue( name0.endsWith( name6 ) );
assertTrue( name0.endsWith( name7 ) );
assertTrue( name0.endsWith( name8 ) );
}
/**
* Class to test for Name addAll(Name)
*
* @throws Exception
* when anything goes wrong
*/
public void testAddAllName0() throws Exception
{
Name name = new LdapDN();
Name name0 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertTrue( name0.equals( name.addAll( name0 ) ) );
}
/**
* Class to test for Name addAll(Name)
*
* @throws Exception
* when anything goes wrong
*/
public void testAddAllNameExisting0() throws Exception
{
Name name1 = new LdapDN( "ou=Marketing,ou=East" );
Name name2 = new LdapDN( "cn=HomeDir,cn=John" );
Name nameAdded = new LdapDN( "cn=HomeDir,cn=John, ou=Marketing,ou=East" );
assertTrue( nameAdded.equals( name1.addAll( name2 ) ) );
}
/**
* Class to test for Name addAll(Name)
*
* @throws Exception
* when anything goes wrong
*/
public void testAddAllName1() throws Exception
{
Name name = new LdapDN();
Name name0 = new LdapDN( "ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=HomeDir,cn=John" );
Name name2 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertTrue( name0.equals( name.addAll( name0 ) ) );
assertTrue( name2.equals( name.addAll( name1 ) ) );
}
/**
* Class to test for Name addAll(int, Name)
*
* @throws Exception
* when something goes wrong
*/
public void testAddAllintName0() throws Exception
{
Name name = new LdapDN();
Name name0 = new LdapDN( "ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=HomeDir,cn=John" );
Name name2 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertTrue( name0.equals( name.addAll( name0 ) ) );
assertTrue( name2.equals( name.addAll( 2, name1 ) ) );
}
/**
* Class to test for Name addAll(int, Name)
*
* @throws Exception
* when something goes wrong
*/
public void testAddAllintName1() throws Exception
{
Name name = new LdapDN();
Name name0 = new LdapDN( "cn=HomeDir,ou=Marketing,ou=East" );
Name name1 = new LdapDN( "cn=John" );
Name name2 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertTrue( name0.equals( name.addAll( name0 ) ) );
assertTrue( name2.equals( name.addAll( 2, name1 ) ) );
Name name3 = new LdapDN( "cn=Airport" );
Name name4 = new LdapDN( "cn=Airport,cn=HomeDir,cn=John,ou=Marketing,ou=East" );
assertTrue( name4.equals( name.addAll( 4, name3 ) ) );
Name name5 = new LdapDN( "cn=ABC123" );
Name name6 = new LdapDN( "cn=Airport,cn=HomeDir,cn=ABC123,cn=John,ou=Marketing,ou=East" );
assertTrue( name6.equals( name.addAll( 3, name5 ) ) );
}
/**
* Class to test for Name add(String)
*
* @throws Exception
* when something goes wrong
*/
public void testAddString() throws Exception
{
Name name = new LdapDN();
assertEquals( name, new LdapDN( "" ) );
Name name4 = new LdapDN( "ou=East" );
name.add( "ou=East" );
assertEquals( name4, name );
Name name3 = new LdapDN( "ou=Marketing,ou=East" );
name.add( "ou=Marketing" );
assertEquals( name3, name );
Name name2 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
name.add( "cn=John" );
assertEquals( name2, name );
Name name0 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
name.add( "cn=HomeDir" );
assertEquals( name0, name );
}
/**
* Class to test for Name add(int, String)
*
* @throws Exception
* if anything goes wrong
*/
public void testAddintString() throws Exception
{
Name name = new LdapDN();
assertEquals( name, new LdapDN( "" ) );
Name name4 = new LdapDN( "ou=East" );
name.add( "ou=East" );
assertEquals( name4, name );
Name name3 = new LdapDN( "ou=Marketing,ou=East" );
name.add( 1, "ou=Marketing" );
assertEquals( name3, name );
Name name2 = new LdapDN( "cn=John,ou=Marketing,ou=East" );
name.add( 2, "cn=John" );
assertEquals( name2, name );
Name name0 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East" );
name.add( 3, "cn=HomeDir" );
assertEquals( name0, name );
Name name5 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East,o=LL " + "Bean Inc." );
name.add( 0, "o=LL Bean Inc." );
assertEquals( name5, name );
Name name6 = new LdapDN( "cn=HomeDir,cn=John,ou=Marketing,ou=East,c=US,o=LL " + "Bean Inc." );
name.add( 1, "c=US" );
assertEquals( name6, name );
Name name7 = new LdapDN( "cn=HomeDir,cn=John,ou=Advertising,ou=Marketing," + "ou=East,c=US,o=LL " + "Bean Inc." );
name.add( 4, "ou=Advertising" );
assertEquals( name7, name );
}
/**
* Class to test for remove
*
* @throws Exception
* if anything goes wrong
*/
public void testRemove() throws Exception
{
Name name = new LdapDN();
assertEquals( new LdapDN( "" ), name );
Name name3 = new LdapDN( "ou=Marketing" );
name.add( "ou=East" );
name.add( 1, "ou=Marketing" );
name.remove( 0 );
assertEquals( name3, name );
Name name2 = new LdapDN( "cn=HomeDir,ou=Marketing,ou=East" );
name.add( 0, "ou=East" );
name.add( 2, "cn=John" );
name.add( "cn=HomeDir" );
name.remove( 2 );
assertEquals( name2, name );
name.remove( 1 );
Name name1 = new LdapDN( "cn=HomeDir,ou=East" );
assertEquals( name1, name );
name.remove( 1 );
Name name0 = new LdapDN( "ou=East" );
assertEquals( name0, name );
name.remove( 0 );
assertEquals( new LdapDN( "" ), name );
}
/**
* Class to test for String toString()
*
* @throws Exception
* if anything goes wrong
*/
public void testToString() throws Exception
{
Name name = new LdapDN();
assertEquals( "", name.toString() );
name.add( "ou=East" );
assertEquals( "ou=East", name.toString() );
name.add( 1, "ou=Marketing" );
assertEquals( "ou=Marketing,ou=East", name.toString() );
name.add( "cn=John" );
assertEquals( "cn=John,ou=Marketing,ou=East", name.toString() );
name.add( "cn=HomeDir" );
assertEquals( "cn=HomeDir,cn=John,ou=Marketing,ou=East", name.toString() );
}
/**
* Class to test for boolean equals(Object)
*
* @throws Exception
* if anything goes wrong
*/
public void testEqualsObject() throws Exception
{
assertTrue( new LdapDN( "ou=People" ).equals( new LdapDN( "ou=People" ) ) );
assertTrue( !new LdapDN( "ou=People,dc=example,dc=com" ).equals( new LdapDN( "ou=People" ) ) );
assertTrue( !new LdapDN( "ou=people" ).equals( new LdapDN( "ou=People" ) ) );
assertTrue( !new LdapDN( "ou=Groups" ).equals( new LdapDN( "ou=People" ) ) );
}
public void testNameFrenchChars() throws Exception
{
String cn = new String( new byte[]
{ 'c', 'n', '=', 0x4A, ( byte ) 0xC3, ( byte ) 0xA9, 0x72, ( byte ) 0xC3, ( byte ) 0xB4, 0x6D, 0x65 }, "UTF-8" );
Name name = new LdapDN( cn );
assertEquals( "cn=J\\C3\\A9r\\C3\\B4me", name.toString() );
}
public void testNameGermanChars() throws Exception
{
String cn = new String( new byte[]
{ 'c', 'n', '=', ( byte ) 0xC3, ( byte ) 0x84, ( byte ) 0xC3, ( byte ) 0x96, ( byte ) 0xC3, ( byte ) 0x9C,
( byte ) 0xC3, ( byte ) 0x9F, ( byte ) 0xC3, ( byte ) 0xA4, ( byte ) 0xC3, ( byte ) 0xB6,
( byte ) 0xC3, ( byte ) 0xBC }, "UTF-8" );
Name name = new LdapDN( cn );
assertEquals( "cn=\\C3\\84\\C3\\96\\C3\\9C\\C3\\9F\\C3\\A4\\C3\\B6\\C3\\BC", name.toString() );
}
public void testNameTurkishChars() throws Exception
{
String cn = new String( new byte[]
{ 'c', 'n', '=', ( byte ) 0xC4, ( byte ) 0xB0, ( byte ) 0xC4, ( byte ) 0xB1, ( byte ) 0xC5, ( byte ) 0x9E,
( byte ) 0xC5, ( byte ) 0x9F, ( byte ) 0xC3, ( byte ) 0x96, ( byte ) 0xC3, ( byte ) 0xB6,
( byte ) 0xC3, ( byte ) 0x9C, ( byte ) 0xC3, ( byte ) 0xBC, ( byte ) 0xC4, ( byte ) 0x9E,
( byte ) 0xC4, ( byte ) 0x9F }, "UTF-8" );
Name name = new LdapDN( cn );
assertEquals( "cn=\\C4\\B0\\C4\\B1\\C5\\9E\\C5\\9F\\C3\\96\\C3\\B6\\C3\\9C\\C3\\BC\\C4\\9E\\C4\\9F", name.toString() );
}
/**
* Class to test for toOid( Name, Map)
*/
public void testLdapNameToName() throws Exception
{
List<String> list = new ArrayList<String>();
list.add( "ou= Some People " );
list.add( "dc = eXample" );
list.add( "dc= cOm" );
LdapDN name = new LdapDN( list.iterator() );
Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
oids.put( "dc", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "domaincomponent", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "0.9.2342.19200300.100.1.25", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "ou", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "organizationalUnitName", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "2.5.4.11", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
assertTrue( name.getUpName().equals( "ou= Some People ,dc = eXample,dc= cOm" ) );
Name result = LdapDN.normalize( name, oids );
assertTrue( result.toString().equals( "ou=some people,dc=example,dc=com" ) );
}
/**
* Class to test for toOid( Name, Map) with a NULL dn
*/
public void testLdapNameToNameEmpty() throws Exception
{
LdapDN name = new LdapDN();
Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
oids.put( "dc", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "domaincomponent", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "0.9.2342.19200300.100.1.25", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "ou", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "organizationalUnitName", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "2.5.4.11", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
Name result = LdapDN.normalize( name, oids );
assertTrue( result.toString().equals( "" ) );
}
/**
* Class to test for toOid( Name, Map) with a multiple NameComponent
*/
public void testLdapNameToNameMultiNC() throws Exception
{
LdapDN name = new LdapDN(
"2.5.4.11= Some People + 0.9.2342.19200300.100.1.25= And Some anImAls,0.9.2342.19200300.100.1.25 = eXample,dc= cOm" );
Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
oids.put( "dc", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "domaincomponent", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "0.9.2342.19200300.100.1.25", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "ou", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "organizationalUnitName", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "2.5.4.11", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
Name result = LdapDN.normalize( name, oids );
assertTrue( result.toString().equals( "dc=and some animals+ou=some people,dc=example,dc=com" ) );
assertTrue( ( ( LdapDN ) result )
.getUpName()
.equals(
"2.5.4.11= Some People + 0.9.2342.19200300.100.1.25= And Some anImAls,0.9.2342.19200300.100.1.25 = eXample,dc= cOm" ) );
}
/**
* Class to test for toOid( Name, Map) with a multiple NameComponent
*/
public void testLdapNameToNameAliasMultiNC() throws Exception
{
LdapDN name = new LdapDN(
"2.5.4.11= Some People + domainComponent= And Some anImAls,DomainComponent = eXample,0.9.2342.19200300.100.1.25= cOm" );
Map<String, OidNormalizer> oids = new HashMap<String, OidNormalizer>();
oids.put( "dc", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "domaincomponent", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "0.9.2342.19200300.100.1.25", new OidNormalizer( "dc", new DeepTrimToLowerNormalizer() ) );
oids.put( "ou", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "organizationalUnitName", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
oids.put( "2.5.4.11", new OidNormalizer( "ou", new DeepTrimToLowerNormalizer() ) );
LdapDN result = LdapDN.normalize( name, oids );
assertTrue( result.toString().equals( "dc=and some animals+ou=some people,dc=example,dc=com" ) );
assertTrue( result
.getUpName()
.equals(
"2.5.4.11= Some People + domainComponent= And Some anImAls,DomainComponent = eXample,0.9.2342.19200300.100.1.25= cOm" ) );
}
/**
* Test the serialization of a DN
*
* @throws Exception
*/
public void testNameSerialization() throws Exception
{
LdapDN name = new LdapDN( "ou= Some People + dc= And Some anImAls,dc = eXample,dc= cOm" );
FileOutputStream fOut = null;
ObjectOutputStream oOut = null;
File file = new File( "LdapDN.ser" );
try
{
fOut = new FileOutputStream( file );
oOut = new ObjectOutputStream( fOut );
oOut.writeObject( name );
}
catch ( IOException ioe )
{
throw ioe;
}
finally
{
try
{
if ( oOut != null )
{
oOut.flush();
oOut.close();
}
if ( fOut != null )
{
fOut.close();
}
}
catch ( IOException ioe )
{
throw ioe;
}
}
FileInputStream fIn = null;
ObjectInputStream oIn = null;
try
{
fIn = new FileInputStream( file );
oIn = new ObjectInputStream( fIn );
LdapDN nameSer = ( LdapDN ) oIn.readObject();
assertEquals( 0, nameSer.compareTo( name ) );
}
catch ( IOException ioe )
{
throw ioe;
}
finally
{
try
{
if ( oIn != null )
{
oIn.close();
}
if ( fIn != null )
{
fIn.close();
}
file.delete();
}
catch ( IOException ioe )
{
throw ioe;
}
}
}
/**
* Class to test for hashCode(). Commmented as the values are not normalized.
*/
//public void testLdapNameHashCode() throws Exception
//{
// Name name1 = new LdapDN(
// "2.5.4.11= Some People + domainComponent= And Some anImAls,DomainComponent = eXample,0.9.2342.19200300.100.1.25= cOm" );
//
// Name name2 = new LdapDN(
// "2.5.4.11=some people+domainComponent=and some animals,DomainComponent=example,0.9.2342.19200300.100.1.25=com" );
//
// assertEquals( name1.hashCode(), name2.hashCode() );
//}
/**
* Test for DIRSERVER-191
*/
public void testName() throws NamingException
{
Name jName = new javax.naming.ldap.LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.toString(), "cn=four,cn=three,cn=two,cn=one");
assertEquals(aName.toString(), "cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.toString(), aName.toString());
}
/**
* Test for DIRSERVER-191
*/
public void testGetPrefixName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.getPrefix(0).toString(), aName.getPrefix(0).toString());
assertEquals(jName.getPrefix(1).toString(), aName.getPrefix(1).toString());
assertEquals(jName.getPrefix(2).toString(), aName.getPrefix(2).toString());
assertEquals(jName.getPrefix(3).toString(), aName.getPrefix(3).toString());
assertEquals(jName.getPrefix(4).toString(), aName.getPrefix(4).toString());
}
/**
* Test for DIRSERVER-191
*/
public void testGetSuffix() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.getSuffix(0).toString(), aName.getSuffix(0).toString());
assertEquals(jName.getSuffix(1).toString(), aName.getSuffix(1).toString());
assertEquals(jName.getSuffix(2).toString(), aName.getSuffix(2).toString());
assertEquals(jName.getSuffix(3).toString(), aName.getSuffix(3).toString());
assertEquals(jName.getSuffix(4).toString(), aName.getSuffix(4).toString());
}
/**
* Test for DIRSERVER-191
*/
public void testAddStringName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertSame(jName, jName.add("cn=five"));
assertSame(aName, aName.add("cn=five"));
assertEquals(jName.toString(), aName.toString());
}
/**
* Test for DIRSERVER-191
*/
public void testAddIntString() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertSame(jName, jName.add(0,"cn=zero"));
assertSame(aName, aName.add(0,"cn=zero"));
assertEquals(jName.toString(), aName.toString());
assertSame(jName, jName.add(2,"cn=one.5"));
assertSame(aName, aName.add(2,"cn=one.5"));
assertEquals(jName.toString(), aName.toString());
assertSame(jName, jName.add(jName.size(),"cn=five"));
assertSame(aName, aName.add(aName.size(),"cn=five"));
assertEquals(jName.toString(), aName.toString());
}
/**
* Test for DIRSERVER-191
*/
public void testAddAllName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertSame(jName, jName.addAll(new LdapName("cn=seven,cn=six")));
assertSame(aName, aName.addAll(new LdapDN("cn=seven,cn=six")));
assertEquals(jName.toString(), aName.toString());
}
/**
* Test for DIRSERVER-191
*/
public void testAddAllIntName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertSame(jName, jName.addAll(0, new LdapName("cn=zero,cn=zero.5")));
assertSame(aName, aName.addAll(0, new LdapDN("cn=zero,cn=zero.5")));
assertEquals(jName.toString(), aName.toString());
assertSame(jName, jName.addAll(2, new LdapName("cn=zero,cn=zero.5")));
assertSame(aName, aName.addAll(2, new LdapDN("cn=zero,cn=zero.5")));
assertEquals(jName.toString(), aName.toString());
assertSame(jName, jName.addAll(jName.size(), new LdapName("cn=zero,cn=zero.5")));
assertSame(aName, aName.addAll(aName.size(), new LdapDN("cn=zero,cn=zero.5")));
assertEquals(jName.toString(), aName.toString());
}
/**
* Test for DIRSERVER-191
*/
public void testStartsWithName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.startsWith(new LdapName("cn=seven,cn=six,cn=five")),
aName.startsWith(new LdapDN("cn=seven,cn=six,cn=five")));
assertEquals(jName.startsWith(new LdapName("cn=three,cn=two,cn=one")),
aName.startsWith(new LdapDN("cn=three,cn=two,cn=one")));
}
/**
* Test for DIRSERVER-191
*/
public void testEndsWithName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.endsWith(new LdapName("cn=seven,cn=six,cn=five")),
aName.endsWith(new LdapDN("cn=seven,cn=six,cn=five")));
assertEquals(jName.endsWith(new LdapName("cn=three,cn=two,cn=one")),
aName.endsWith(new LdapDN("cn=three,cn=two,cn=one")));
}
/**
* Test for DIRSERVER-191
*/
public void testRemoveName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
assertEquals(jName.remove(0).toString(), aName.remove(0).toString());
assertEquals(jName.toString(), aName.toString());
assertEquals(jName.remove(jName.size() - 1).toString(), aName.remove(aName.size() - 1).toString());
assertEquals(jName.toString(), aName.toString());
}
/**
* Test for DIRSERVER-191
*/
public void testGetAllName() throws NamingException
{
Name jName = new LdapName("cn=four,cn=three,cn=two,cn=one");
Name aName = new LdapDN("cn=four,cn=three,cn=two,cn=one");
Enumeration j = jName.getAll();
Enumeration a = aName.getAll();
while (j.hasMoreElements())
{
assertTrue(j.hasMoreElements());
assertEquals(j.nextElement(), a.nextElement());
}
}
/**
* Test for DIRSERVER-642
* @throws NamingException
*/
public void testDoubleQuoteInNameDIRSERVER_642() throws NamingException
{
Name name1 = new LdapDN( "cn=\"Kylie Minogue\",dc=example,dc=com" );
Name name2 = new LdapName( "cn=\"Kylie Minogue\",dc=example,dc=com" );
Enumeration j = name1.getAll();
Enumeration a = name2.getAll();
while (j.hasMoreElements())
{
assertTrue(j.hasMoreElements());
assertEquals(j.nextElement(), a.nextElement());
}
}
/**
* Test for DIRSERVER-642
* @throws NamingException
*/
public void testDoubleQuoteInNameDIRSERVER_642_1() throws NamingException
{
LdapDN dn = new LdapDN( "cn=\" Kylie Minogue \",dc=example,dc=com" );
assertEquals( "cn=\" Kylie Minogue \",dc=example,dc=com", dn.getUpName() );
assertEquals( "cn=\\ Kylie Minogue\\ ,dc=example,dc=com", dn.toString() );
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testLeadingAndTrailingSpacesDIRSERVER_184() throws NamingException
{
LdapDN name = new LdapDN( "dn= \\ four spaces leading and 3 trailing \\ " );
assertEquals( "dn=\\ four spaces leading and 3 trailing \\ ", name.toString() );
assertEquals( "dn= \\ four spaces leading and 3 trailing \\ ", name.getUpName() );
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_1()
{
try
{
new LdapDN( "dn=middle\\ spaces" );
}
catch ( InvalidNameException ine )
{
assertTrue( true );
}
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_2()
{
try
{
new LdapDN( "dn=# a leading pound" );
}
catch ( InvalidNameException ine )
{
assertTrue( true );
}
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_3() throws NamingException
{
LdapDN name = new LdapDN( "dn=\\# a leading pound" );
assertEquals( "dn=\\# a leading pound", name.toString() );
assertEquals( "dn=\\# a leading pound", name.getUpName() );
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_4() throws NamingException
{
LdapDN name = new LdapDN( "dn=a middle \\# pound" );
assertEquals( "dn=a middle # pound", name.toString() );
assertEquals( "dn=a middle \\# pound", name.getUpName() );
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_5() throws NamingException
{
LdapDN name = new LdapDN( "dn=a trailing pound \\#" );
assertEquals( "dn=a trailing pound #", name.toString() );
assertEquals( "dn=a trailing pound \\#", name.getUpName() );
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_6()
{
try
{
new LdapDN( "dn=a middle # pound" );
}
catch ( InvalidNameException ine )
{
assertTrue( true );
}
}
/**
* Test for DIRSERVER-184
* @throws NamingException
*/
public void testDIRSERVER_184_7()
{
try
{
new LdapDN( "dn=a trailing pound #" );
}
catch ( InvalidNameException ine )
{
assertTrue( true );
}
}
public void testDIRSERVER_631_1() throws NamingException
{
LdapDN name = new LdapDN( "cn=Bush\\, Kate,dc=example,dc=com" );
assertEquals( "cn=Bush\\, Kate,dc=example,dc=com", name.toString() );
assertEquals( "cn=Bush\\, Kate,dc=example,dc=com", name.getUpName() );
}
/**
* Added a test to check the parsing of a DN with more than one RDN
* which are OIDs, and with one RDN which has more than one atav.
* @throws NamingException
*/
public void testDNWithMultiOidsRDN() throws NamingException
{
LdapDN name = new LdapDN( "0.9.2342.19200300.100.1.1=00123456789+2.5.4.3=pablo picasso,2.5.4.11=search,2.5.4.10=imc,2.5.4.6=us" );
assertEquals( "0.9.2342.19200300.100.1.1=00123456789+2.5.4.3=pablo picasso,2.5.4.11=search,2.5.4.10=imc,2.5.4.6=us", name.toString() );
assertEquals( "0.9.2342.19200300.100.1.1=00123456789+2.5.4.3=pablo picasso,2.5.4.11=search,2.5.4.10=imc,2.5.4.6=us", name.getUpName() );
}
public void testNameAddAll() throws NamingException
{
Properties props = new Properties();
props.setProperty( "jndi.syntax.direction", "right_to_left" );
props.setProperty( "jndi.syntax.separator", "," );
props.setProperty( "jndi.syntax.ignorecase", "true" );
props.setProperty( "jndi.syntax.trimblanks", "true" );
Name dn = new CompoundName( "cn=blah,dc=example,dc=com", props );
LdapDN ldapDn = new LdapDN();
ldapDn.addAll( 0, dn );
assertEquals( "cn=blah,dc=example,dc=com", ldapDn.toString() );
dn = new CompoundName( "cn=blah,dc=example,dc=com", props );
ldapDn = new LdapDN( "cn=xyz" );
ldapDn.addAll( 0, dn );
System.out.println( ldapDn.toString() );
assertEquals( "cn=xyz,cn=blah,dc=example,dc=com", ldapDn.toString() );
}
public void testDNEquals() throws NamingException
{
LdapDN dn1 = new LdapDN( "a=b,c=d,e=f" );
LdapDN dn2 = new LdapDN( "a=b\\,c\\=d,e=f" );
assertFalse( dn1.toString().equals( dn2.toString() ) );
}
public void testDNAddEmptyString() throws NamingException
{
LdapDN dn = new LdapDN();
assertTrue( dn.size() == 0 );
assertTrue( dn.add( "" ).size() == 0 );
}
/**
* This leads to the bug in DIRSERVER-832.
*/
public void testPreserveAttributeIdCase() throws NamingException
{
LdapDN dn = new LdapDN( "uID=kevin" );
assertEquals( "uID", dn.getRdn().getUpType() );
}
}