/*
|
* CDDL HEADER START
|
*
|
* The contents of this file are subject to the terms of the
|
* Common Development and Distribution License, Version 1.0 only
|
* (the "License"). You may not use this file except in compliance
|
* with the License.
|
*
|
* You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
|
* or http://forgerock.org/license/CDDLv1.0.html.
|
* See the License for the specific language governing permissions
|
* and limitations under the License.
|
*
|
* When distributing Covered Code, include this CDDL HEADER in each
|
* file and include the License file at legal-notices/CDDLv1_0.txt.
|
* If applicable, add the following below this CDDL HEADER, with the
|
* fields enclosed by brackets "[]" replaced with your own identifying
|
* information:
|
* Portions Copyright [yyyy] [name of copyright owner]
|
*
|
* CDDL HEADER END
|
*
|
*
|
* Copyright 2010 Sun Microsystems, Inc.
|
* Portions copyright 2011-2012 ForgeRock AS.
|
*/
|
|
package org.forgerock.opendj.ldap;
|
|
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertFalse;
|
import static org.testng.Assert.assertTrue;
|
import static org.testng.Assert.fail;
|
|
import org.forgerock.i18n.LocalizedIllegalArgumentException;
|
import org.testng.annotations.DataProvider;
|
import org.testng.annotations.Test;
|
|
/**
|
* This class defines a set of tests for the org.forgerock.opendj.ldap.DN class.
|
*/
|
@SuppressWarnings("javadoc")
|
public class DNTestCase extends SdkTestCase {
|
/**
|
* child DN test data provider.
|
*
|
* @return The array of test data.
|
*/
|
@DataProvider(name = "createChildDNTestData")
|
public Object[][] createChildDNTestData() {
|
return new Object[][] { { "", "", "" }, { "", "dc=org", "dc=org" },
|
{ "", "dc=opendj,dc=org", "dc=opendj,dc=org" }, { "dc=org", "", "dc=org" },
|
{ "dc=org", "dc=opendj", "dc=opendj,dc=org" },
|
{ "dc=org", "dc=foo,dc=opendj", "dc=foo,dc=opendj,dc=org" },
|
{ "dc=opendj,dc=org", "", "dc=opendj,dc=org" },
|
{ "dc=opendj,dc=org", "dc=foo", "dc=foo,dc=opendj,dc=org" },
|
{ "dc=opendj,dc=org", "dc=bar,dc=foo", "dc=bar,dc=foo,dc=opendj,dc=org" }, };
|
}
|
|
/**
|
* Child RDN test data provider.
|
*
|
* @return The array of test data.
|
*/
|
@DataProvider(name = "createChildRDNTestData")
|
public Object[][] createChildRDNTestData() {
|
return new Object[][] { { "", "dc=org", "dc=org" },
|
{ "dc=org", "dc=opendj", "dc=opendj,dc=org" },
|
{ "dc=opendj,dc=org", "dc=foo", "dc=foo,dc=opendj,dc=org" }, };
|
}
|
|
/**
|
* DN test data provider.
|
*
|
* @return The array of test DN strings.
|
*/
|
@DataProvider(name = "testDNs")
|
public Object[][] createData() {
|
return new Object[][] {
|
{ "", "", "" },
|
{ " ", "", "" },
|
{ "cn=", "cn=", "cn=" },
|
{ "cn= ", "cn=", "cn=" },
|
{ "cn =", "cn=", "cn=" },
|
{ "cn = ", "cn=", "cn=" },
|
{ "dc=com", "dc=com", "dc=com" },
|
{ "dc=com+o=com", "dc=com+o=com", "dc=com+o=com" },
|
{ "DC=COM", "dc=com", "DC=COM" },
|
{ "dc = com", "dc=com", "dc=com" },
|
{ " dc = com ", "dc=com", "dc=com" },
|
{ "dc=example,dc=com", "dc=example,dc=com", "dc=example,dc=com" },
|
{ "dc=example, dc=com", "dc=example,dc=com", "dc=example,dc=com" },
|
{ "dc=example ,dc=com", "dc=example,dc=com", "dc=example,dc=com" },
|
{ "dc =example , dc = com", "dc=example,dc=com", "dc=example,dc=com" },
|
{ "givenName=John+cn=Doe,ou=People,dc=example,dc=com",
|
"cn=doe+givenname=john,ou=people,dc=example,dc=com",
|
"givenName=John+cn=Doe,ou=People,dc=example,dc=com" },
|
{ "givenName=John\\+cn=Doe,ou=People,dc=example,dc=com",
|
"givenname=john\\+cn\\=doe,ou=people,dc=example,dc=com",
|
"givenName=John\\+cn=Doe,ou=People,dc=example,dc=com" },
|
{ "cn=Doe\\, John,ou=People,dc=example,dc=com",
|
"cn=doe\\, john,ou=people,dc=example,dc=com",
|
"cn=Doe\\, John,ou=People,dc=example,dc=com" },
|
{ "UID=jsmith,DC=example,DC=net", "uid=jsmith,dc=example,dc=net",
|
"UID=jsmith,DC=example,DC=net" },
|
{ "OU=Sales+CN=J. Smith,DC=example,DC=net", "cn=j. smith+ou=sales,dc=example,dc=net",
|
"OU=Sales+CN=J. Smith,DC=example,DC=net" },
|
{ "CN=James \\\"Jim\\\" Smith\\, III,DC=example,DC=net",
|
"cn=james \\\"jim\\\" smith\\, iii,dc=example,dc=net",
|
"CN=James \\\"Jim\\\" Smith\\, III,DC=example,DC=net" },
|
{ "CN=John Smith\\2C III,DC=example,DC=net", "cn=john smith\\, iii,dc=example,dc=net",
|
"CN=John Smith\\, III,DC=example,DC=net" },
|
{ "CN=\\23John Smith\\20,DC=example,DC=net", "cn=\\#john smith,dc=example,dc=net",
|
"CN=\\#John Smith\\ ,DC=example,DC=net" },
|
{ "CN=Before\\0dAfter,DC=example,DC=net",
|
// \0d is a hex representation of Carriage return. It is mapped
|
// to a SPACE as defined in the MAP ( RFC 4518)
|
"cn=before after,dc=example,dc=net", "CN=Before\\0dAfter,DC=example,DC=net" },
|
{ "2.5.4.3=#04024869",
|
// Unicode codepoints from 0000-0008 are mapped to nothing.
|
"cn=hi", "2.5.4.3=\\04\\02Hi" },
|
{ "1.1.1=", "1.1.1=", "1.1.1=" },
|
{ "CN=Lu\\C4\\8Di\\C4\\87", "cn=lu\u010di\u0107", "CN=Lu\u010di\u0107" },
|
{ "ou=\\e5\\96\\b6\\e6\\a5\\ad\\e9\\83\\a8,o=Airius", "ou=\u55b6\u696d\u90e8,o=airius",
|
"ou=\u55b6\u696d\u90e8,o=Airius" },
|
{ "photo=\\ john \\ ,dc=com", "photo=\\ john \\ ,dc=com", "photo=\\ john \\ ,dc=com" },
|
{ "AB-global=", "ab-global=", "AB-global=" },
|
{ "OU= Sales + CN = J. Smith ,DC=example,DC=net",
|
"cn=j. smith+ou=sales,dc=example,dc=net", "OU=Sales+CN=J. Smith,DC=example,DC=net" },
|
{ "cn=John+a=", "a=+cn=john", "cn=John+a=" },
|
{ "O=\"Sue, Grabbit and Runn\",C=US", "o=sue\\, grabbit and runn,c=us",
|
"O=Sue\\, Grabbit and Runn,C=US" }, };
|
}
|
|
/**
|
* DN comparison test data provider.
|
*
|
* @return The array of test DN strings.
|
*/
|
@DataProvider(name = "createDNComparisonData")
|
public Object[][] createDNComparisonData() {
|
return new Object[][] { { "cn=hello world,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=hello world,dc=com", "CN=hello world,dc=com", 0 },
|
{ "cn=hello world,dc=com", "cn=hello world,dc=com", 0 },
|
{ " cn = hello world ,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=hello world\\ ,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=HELLO WORLD,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=HELLO+sn=WORLD,dc=com", "sn=world+cn=hello,dc=com", 0 },
|
/**
|
* { "x-test-integer-type=10,dc=com",
|
* "x-test-integer-type=9,dc=com", 1 }, {
|
* "x-test-integer-type=999,dc=com",
|
* "x-test-integer-type=1000,dc=com", -1 }, {
|
* "x-test-integer-type=-1,dc=com", "x-test-integer-type=0,dc=com",
|
* -1 }, { "x-test-integer-type=0,dc=com",
|
* "x-test-integer-type=-1,dc=com", 1 },
|
**/
|
{ "cn=aaa,dc=com", "cn=aaaa,dc=com", -1 }, { "cn=AAA,dc=com", "cn=aaaa,dc=com", -1 },
|
{ "cn=aaa,dc=com", "cn=AAAA,dc=com", -1 }, { "cn=aaaa,dc=com", "cn=aaa,dc=com", 1 },
|
{ "cn=AAAA,dc=com", "cn=aaa,dc=com", 1 }, { "cn=aaaa,dc=com", "cn=AAA,dc=com", 1 },
|
{ "cn=aaab,dc=com", "cn=aaaa,dc=com", 1 }, { "cn=aaaa,dc=com", "cn=aaab,dc=com", -1 },
|
{ "dc=aaa,dc=aaa", "dc=bbb", -1 }, { "dc=bbb,dc=aaa", "dc=bbb", -1 },
|
{ "dc=ccc,dc=aaa", "dc=bbb", -1 }, { "dc=aaa,dc=bbb", "dc=bbb", 1 },
|
{ "dc=bbb,dc=bbb", "dc=bbb", 1 }, { "dc=ccc,dc=bbb", "dc=bbb", 1 },
|
{ "dc=aaa,dc=ccc", "dc=bbb", 1 }, { "dc=bbb,dc=ccc", "dc=bbb", 1 },
|
{ "dc=ccc,dc=ccc", "dc=bbb", 1 }, { "", "dc=bbb", -1 }, { "dc=bbb", "", 1 } };
|
}
|
|
/**
|
* DN equality test data provider.
|
*
|
* @return The array of test DN strings.
|
*/
|
@DataProvider(name = "createDNEqualityData")
|
public Object[][] createDNEqualityData() {
|
return new Object[][] { { "cn=hello world,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=hello world,dc=com", "CN=hello world,dc=com", 0 },
|
{ "cn=hello world,dc=com", "cn=hello world,dc=com", 0 },
|
{ " cn = hello world ,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=hello world\\ ,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=HELLO WORLD,dc=com", "cn=hello world,dc=com", 0 },
|
{ "cn=HELLO+sn=WORLD,dc=com", "sn=world+cn=hello,dc=com", 0 },
|
{ "x-test-integer-type=10,dc=com", "x-test-integer-type=9,dc=com", 1 },
|
{ "x-test-integer-type=999,dc=com", "x-test-integer-type=1000,dc=com", -1 },
|
{ "x-test-integer-type=-1,dc=com", "x-test-integer-type=0,dc=com", -1 },
|
{ "x-test-integer-type=0,dc=com", "x-test-integer-type=-1,dc=com", 1 },
|
{ "cn=aaa,dc=com", "cn=aaaa,dc=com", -1 }, { "cn=AAA,dc=com", "cn=aaaa,dc=com", -1 },
|
{ "cn=aaa,dc=com", "cn=AAAA,dc=com", -1 }, { "cn=aaaa,dc=com", "cn=aaa,dc=com", 1 },
|
{ "cn=AAAA,dc=com", "cn=aaa,dc=com", 1 }, { "cn=aaaa,dc=com", "cn=AAA,dc=com", 1 },
|
{ "cn=aaab,dc=com", "cn=aaaa,dc=com", 1 }, { "cn=aaaa,dc=com", "cn=aaab,dc=com", -1 },
|
{ "dc=aaa,dc=aaa", "dc=bbb", -1 }, { "dc=bbb,dc=aaa", "dc=bbb", -1 },
|
{ "dc=ccc,dc=aaa", "dc=bbb", -1 }, { "dc=aaa,dc=bbb", "dc=bbb", 1 },
|
{ "dc=bbb,dc=bbb", "dc=bbb", 1 }, { "dc=ccc,dc=bbb", "dc=bbb", 1 },
|
{ "dc=aaa,dc=ccc", "dc=bbb", 1 }, { "dc=bbb,dc=ccc", "dc=bbb", 1 },
|
{ "dc=ccc,dc=ccc", "dc=bbb", 1 }, { "", "dc=bbb", -1 }, { "dc=bbb", "", 1 } };
|
}
|
|
/**
|
* Illegal DN test data provider.
|
*
|
* @return The array of illegal test DN strings.
|
*/
|
@DataProvider(name = "illegalDNs")
|
public Object[][] createIllegalData() {
|
return new Object[][] { { "manager" }, { "manager " },
|
{ "=Jim" },
|
{ " =Jim" },
|
{ "= Jim" },
|
{ " = Jim" },
|
{ "cn+Jim" },
|
{ "cn + Jim" },
|
{ "cn=Jim+" },
|
{ "cn=Jim+manager" },
|
{ "cn=Jim+manager " },
|
{ "cn=Jim+manager," }, // { "cn=Jim," }, { "cn=Jim, " }, {
|
// "c[n]=Jim" },
|
{ "_cn=Jim" }, { "c_n=Jim" }, { "cn\"=Jim" }, { "c\"n=Jim" }, { "1cn=Jim" },
|
{ "cn+uid=Jim" }, { "-cn=Jim" }, { "/tmp=a" }, { "\\tmp=a" }, { "cn;lang-en=Jim" },
|
{ "@cn=Jim" }, { "_name_=Jim" },
|
{ "\u03c0=pi" },
|
{ "v1.0=buggy" }, // { "1.=buggy" }, { ".1=buggy" },
|
{ "oid.1." }, { "1.3.6.1.4.1.1466..0=#04024869" }, { "cn=#a" }, { "cn=#ag" },
|
{ "cn=#ga" }, { "cn=#abcdefgh" },
|
{ "cn=a\\b" }, // { "cn=a\\bg" }, { "cn=\"hello" },
|
{ "cn=+mail=,dc=example,dc=com" }, { "cn=xyz+sn=,dc=example,dc=com" },
|
{ "cn=,dc=example,dc=com" } };
|
}
|
|
/**
|
* Is Child of test data provider.
|
*
|
* @return The array of test data.
|
*/
|
@DataProvider(name = "createIsChildOfTestData")
|
public Object[][] createIsChildOfTestData() {
|
return new Object[][] { { "", "", false }, { "", "dc=org", false },
|
{ "", "dc=opendj,dc=org", false }, { "", "dc=foo,dc=opendj,dc=org", false },
|
{ "dc=org", "", true }, { "dc=org", "dc=org", false },
|
{ "dc=org", "dc=opendj,dc=org", false },
|
{ "dc=org", "dc=foo,dc=opendj,dc=org", false }, { "dc=opendj,dc=org", "", false },
|
{ "dc=opendj,dc=org", "dc=org", true },
|
{ "dc=opendj,dc=org", "dc=opendj,dc=org", false },
|
{ "dc=opendj,dc=org", "dc=foo,dc=opendj,dc=org", false },
|
{ "dc=foo,dc=opendj,dc=org", "", false },
|
{ "dc=foo,dc=opendj,dc=org", "dc=org", false },
|
{ "dc=foo,dc=opendj,dc=org", "dc=opendj,dc=org", true },
|
{ "dc=foo,dc=opendj,dc=org", "dc=foo,dc=opendj,dc=org", false },
|
{ "dc=org", "dc=com", false }, { "dc=opendj,dc=org", "dc=foo,dc=org", false },
|
{ "dc=opendj,dc=org", "dc=opendj,dc=com", false }, };
|
}
|
|
/**
|
* DN test data provider.
|
*
|
* @return The array of test DN strings.
|
*/
|
@DataProvider(name = "createNumComponentsTestData")
|
public Object[][] createNumComponentsTestData() {
|
return new Object[][] { { "", 0 }, { "dc=com", 1 }, { "dc=opendj,dc=com", 2 },
|
{ "dc=world,dc=opendj,dc=com", 3 }, { "dc=hello,dc=world,dc=opendj,dc=com", 4 }, };
|
}
|
|
/**
|
* DN test data provider.
|
*
|
* @return The array of test DN strings.
|
*/
|
@DataProvider(name = "createParentAndRDNTestData")
|
public Object[][] createParentAndRDNTestData() {
|
return new Object[][] { { "", null, null }, { "dc=com", "", "dc=com" },
|
{ "dc=opendj,dc=com", "dc=com", "dc=opendj" },
|
{ "dc=world,dc=opendj,dc=com", "dc=opendj,dc=com", "dc=world" },
|
{ "dc=hello,dc=world,dc=opendj,dc=com", "dc=world,dc=opendj,dc=com", "dc=hello" }, };
|
}
|
|
/**
|
* DN test data provider.
|
*
|
* @return The array of test DN strings.
|
*/
|
@DataProvider(name = "createRDNTestData")
|
public Object[][] createRDNTestData() {
|
return new Object[][] { { "dc=com", 0, "dc=com" }, { "dc=opendj,dc=com", 0, "dc=opendj" },
|
{ "dc=opendj,dc=com", 1, "dc=com" },
|
{ "dc=hello,dc=world,dc=opendj,dc=com", 0, "dc=hello" },
|
{ "dc=hello,dc=world,dc=opendj,dc=com", 1, "dc=world" },
|
{ "dc=hello,dc=world,dc=opendj,dc=com", 2, "dc=opendj" },
|
{ "dc=hello,dc=world,dc=opendj,dc=com", 3, "dc=com" }, };
|
}
|
|
/**
|
* Subordinate test data provider.
|
*
|
* @return The array of subordinate and superior DN Strings.
|
*/
|
@DataProvider(name = "createSubordinateTestData")
|
public Object[][] createSubordinateTestData() {
|
return new Object[][] { { "", "", true }, { "", "dc=org", false },
|
{ "", "dc=opendj,dc=org", false }, { "", "dc=foo,dc=opendj,dc=org", false },
|
{ "dc=org", "", true }, { "dc=org", "dc=org", true },
|
{ "dc=org", "dc=opendj,dc=org", false },
|
{ "dc=org", "dc=foo,dc=opendj,dc=org", false }, { "dc=opendj,dc=org", "", true },
|
{ "dc=opendj,dc=org", "dc=org", true },
|
{ "dc=opendj,dc=org", "dc=opendj,dc=org", true },
|
{ "dc=opendj,dc=org", "dc=foo,dc=opendj,dc=org", false },
|
{ "dc=foo,dc=opendj,dc=org", "", true }, { "dc=foo,dc=opendj,dc=org", "dc=org", true },
|
{ "dc=foo,dc=opendj,dc=org", "dc=opendj,dc=org", true },
|
{ "dc=foo,dc=opendj,dc=org", "dc=foo,dc=opendj,dc=org", true },
|
{ "dc=org", "dc=com", false }, { "dc=opendj,dc=org", "dc=foo,dc=org", false },
|
{ "dc=opendj,dc=org", "dc=opendj,dc=com", false }, };
|
}
|
|
/**
|
* Superior test data provider.
|
*
|
* @return The array of superior and subordindate DN Strings.
|
*/
|
@DataProvider(name = "createSuperiorTestData")
|
public Object[][] createSuperiorTestData() {
|
return new Object[][] { { "", "", true }, { "", "dc=org", true },
|
{ "", "dc=opendj,dc=org", true }, { "", "dc=foo,dc=opendj,dc=org", true },
|
{ "dc=org", "", false }, { "dc=org", "dc=org", true },
|
{ "dc=org", "dc=opendj,dc=org", true }, { "dc=org", "dc=foo,dc=opendj,dc=org", true },
|
{ "dc=opendj,dc=org", "", false }, { "dc=opendj,dc=org", "dc=org", false },
|
{ "dc=opendj,dc=org", "dc=opendj,dc=org", true },
|
{ "dc=opendj,dc=org", "dc=foo,dc=opendj,dc=org", true },
|
{ "dc=foo,dc=opendj,dc=org", "", false },
|
{ "dc=foo,dc=opendj,dc=org", "dc=org", false },
|
{ "dc=foo,dc=opendj,dc=org", "dc=opendj,dc=org", false },
|
{ "dc=foo,dc=opendj,dc=org", "dc=foo,dc=opendj,dc=org", true },
|
{ "dc=org", "dc=com", false }, { "dc=opendj,dc=org", "dc=foo,dc=org", false },
|
{ "dc=opendj,dc=org", "dc=opendj,dc=com", false }, };
|
}
|
|
@Test()
|
public void testAdminData() {
|
DN.valueOf("cn=cn\\=admin data");
|
final DN theDN = DN.valueOf("cn=my dn");
|
final RDN theRDN = new RDN("cn", "my rdn");
|
final DN theChildDN = theDN.child(theRDN);
|
DN.valueOf(theChildDN.toString());
|
}
|
|
/**
|
* Test the child(DN) method.
|
*
|
* @param s
|
* The test DN string.
|
* @param l
|
* The local name to be appended.
|
* @param e
|
* The expected DN.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createChildDNTestData")
|
public void testChildDN(final String s, final String l, final String e) throws Exception {
|
final DN dn = DN.valueOf(s);
|
final DN localName = DN.valueOf(l);
|
final DN expected = DN.valueOf(e);
|
|
assertEquals(dn.child(localName), expected);
|
}
|
|
/**
|
* Test the child(DN) method.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(expectedExceptions = { NullPointerException.class, AssertionError.class })
|
public void testChildDNException() throws Exception {
|
final DN dn = DN.valueOf("dc=org");
|
dn.child((DN) null);
|
}
|
|
/**
|
* Test the child(DN) method's interaction with other methods.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test
|
public void testChildDNInteraction() throws Exception {
|
final DN p = DN.valueOf("dc=opendj,dc=org");
|
final DN l = DN.valueOf("dc=foo");
|
final DN e = DN.valueOf("dc=foo,dc=opendj,dc=org");
|
final DN c = p.child(l);
|
|
assertEquals(c.size(), 3);
|
|
assertEquals(c.compareTo(p), 1);
|
assertEquals(p.compareTo(c), -1);
|
|
assertTrue(p.isParentOf(c));
|
assertFalse(c.isParentOf(p));
|
|
assertTrue(c.isChildOf(p));
|
assertFalse(p.isChildOf(c));
|
|
assertEquals(c, e);
|
assertEquals(c.hashCode(), e.hashCode());
|
|
assertEquals(c.toString(), e.toString());
|
|
assertEquals(c.rdn(), RDN.valueOf("dc=foo"));
|
|
assertEquals(c.parent(), DN.valueOf("dc=opendj,dc=org"));
|
assertEquals(c.parent(), e.parent());
|
|
assertEquals(c.child(RDN.valueOf("dc=xxx")), DN.valueOf("dc=xxx,dc=foo,dc=opendj,dc=org"));
|
assertEquals(c.child(DN.valueOf("dc=xxx,dc=yyy")), DN
|
.valueOf("dc=xxx,dc=yyy,dc=foo,dc=opendj,dc=org"));
|
}
|
|
/**
|
* Test the child(RDN...) method.
|
*
|
* @param s
|
* The test DN string.
|
* @param r
|
* The RDN to be appended.
|
* @param e
|
* The expected DN.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createChildRDNTestData")
|
public void testChildSingleRDN(final String s, final String r, final String e) throws Exception {
|
final DN dn = DN.valueOf(s);
|
final RDN rdn = RDN.valueOf(r);
|
final DN expected = DN.valueOf(e);
|
|
assertEquals(dn.child(rdn), expected);
|
}
|
|
/**
|
* Test the child(String attributeType, Object attributeValue) method.
|
*
|
* @param s
|
* The test DN string.
|
* @param r
|
* The RDN to be appended.
|
* @param e
|
* The expected DN.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createChildRDNTestData")
|
public void testChildTypeValue(final String s, final String r, final String e) throws Exception {
|
final DN dn = DN.valueOf(s);
|
final RDN rdn = RDN.valueOf(r);
|
final DN expected = DN.valueOf(e);
|
|
assertEquals(dn.child(rdn.getFirstAVA().getAttributeType().getNameOrOID(), rdn
|
.getFirstAVA().getAttributeValue()), expected);
|
}
|
|
/**
|
* Test DN compareTo
|
*
|
* @param first
|
* First DN to compare.
|
* @param second
|
* Second DN to compare.
|
* @param result
|
* Expected comparison result.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createDNComparisonData")
|
public void testCompareTo(final String first, final String second, final int result)
|
throws Exception {
|
final DN dn1 = DN.valueOf(first);
|
final DN dn2 = DN.valueOf(second);
|
|
int rc = dn1.compareTo(dn2);
|
|
// Normalize the result.
|
if (rc < 0) {
|
rc = -1;
|
} else if (rc > 0) {
|
rc = 1;
|
}
|
|
assertEquals(rc, result, "Comparison for <" + first + "> and <" + second + ">.");
|
}
|
|
/**
|
* Test DN equality
|
*
|
* @param first
|
* First DN to compare.
|
* @param second
|
* Second DN to compare.
|
* @param result
|
* Expected comparison result.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createDNEqualityData")
|
public void testEquality(final String first, final String second, final int result)
|
throws Exception {
|
final DN dn1 = DN.valueOf(first);
|
final DN dn2 = DN.valueOf(second);
|
|
if (result == 0) {
|
assertTrue(dn1.equals(dn2), "DN equality for <" + first + "> and <" + second + ">");
|
} else {
|
assertFalse(dn1.equals(dn2), "DN equality for <" + first + "> and <" + second + ">");
|
}
|
}
|
|
/**
|
* Tests the equals method with a value that's not a DN.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(expectedExceptions = LocalizedIllegalArgumentException.class)
|
public void testEqualsNonDN() throws Exception {
|
final DN dn = DN.valueOf("dc=example,dc=com");
|
|
assertFalse(dn.equals(DN.valueOf("not a DN")));
|
}
|
|
/**
|
* Test DN hashCode
|
*
|
* @param first
|
* First DN to compare.
|
* @param second
|
* Second DN to compare.
|
* @param result
|
* Expected comparison result.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createDNEqualityData")
|
public void testHashCode(final String first, final String second, final int result)
|
throws Exception {
|
final DN dn1 = DN.valueOf(first);
|
final DN dn2 = DN.valueOf(second);
|
|
final int h1 = dn1.hashCode();
|
final int h2 = dn2.hashCode();
|
|
if (result == 0) {
|
if (h1 != h2) {
|
fail("Hash codes for <" + first + "> and <" + second + "> should be the same.");
|
}
|
} else {
|
if (h1 == h2) {
|
fail("Hash codes for <" + first + "> and <" + second + "> should be the same.");
|
}
|
}
|
}
|
|
/**
|
* Test that decoding an illegal DN as a String throws an exception.
|
*
|
* @param dn
|
* The illegal DN to be tested.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "illegalDNs", expectedExceptions = {
|
LocalizedIllegalArgumentException.class, NullPointerException.class })
|
public void testIllegalStringDNs(final String dn) throws Exception {
|
DN.valueOf(dn);
|
}
|
|
/**
|
* Test the isChildOf method.
|
*
|
* @param s
|
* The test DN string.
|
* @param d
|
* The dn parameter.
|
* @param e
|
* The expected result.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createIsChildOfTestData")
|
public void testIsChildOf(final String s, final String d, final boolean e) throws Exception {
|
final DN dn = DN.valueOf(s);
|
final DN other = DN.valueOf(d);
|
|
assertEquals(dn.isChildOf(other), e, s + " isChildOf " + d);
|
}
|
|
/**
|
* Test the isChildOf method.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(expectedExceptions = { NullPointerException.class, AssertionError.class })
|
public void testIsChildOfException() throws Exception {
|
final DN dn = DN.valueOf("dc=com");
|
dn.isChildOf((String) null);
|
}
|
|
/**
|
* Tests the parent method that require iteration.
|
*/
|
@Test()
|
public void testIterableParent() {
|
final String str = "ou=people,dc=example,dc=com";
|
final DN dn = DN.valueOf(str);
|
// Parent at index 0 is self.
|
assertEquals(dn, dn.parent(0));
|
assertEquals(dn.parent(1), DN.valueOf("dc=example,dc=com"));
|
assertEquals(dn.parent(2), DN.valueOf("dc=com"));
|
assertEquals(dn.parent(3), DN.rootDN());
|
}
|
|
/**
|
* Test the getNumComponents method.
|
*
|
* @param s
|
* The test DN string.
|
* @param sz
|
* The expected number of RDNs.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createNumComponentsTestData")
|
public void testNumComponents(final String s, final int sz) throws Exception {
|
final DN dn = DN.valueOf(s);
|
assertEquals(dn.size(), sz);
|
}
|
|
/**
|
* Test the parent method.
|
*
|
* @param s
|
* The test DN string.
|
* @param p
|
* The expected parent.
|
* @param r
|
* The expected rdn.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createParentAndRDNTestData")
|
public void testParent(final String s, final String p, final String r) throws Exception {
|
final DN dn = DN.valueOf(s);
|
final DN parent = (p != null ? DN.valueOf(p) : null);
|
|
assertEquals(dn.parent(), parent, "For DN " + s);
|
}
|
|
/**
|
* Test the parent method's interaction with other methods.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test
|
public void testParentInteraction() throws Exception {
|
final DN c = DN.valueOf("dc=foo,dc=bar,dc=opendj,dc=org");
|
final DN e = DN.valueOf("dc=bar,dc=opendj,dc=org");
|
final DN p = c.parent();
|
|
assertEquals(p.size(), 3);
|
|
assertEquals(p.compareTo(c), -1);
|
assertEquals(c.compareTo(p), 1);
|
|
assertTrue(p.isParentOf(c));
|
assertFalse(c.isParentOf(p));
|
|
assertTrue(c.isChildOf(p));
|
assertFalse(p.isChildOf(c));
|
|
assertEquals(p, e);
|
assertEquals(p.hashCode(), e.hashCode());
|
|
assertEquals(p.toString(), e.toString());
|
|
assertEquals(p.rdn(), RDN.valueOf("dc=bar"));
|
|
assertEquals(p.rdn(), RDN.valueOf("dc=bar"));
|
|
assertEquals(p.parent(), DN.valueOf("dc=opendj,dc=org"));
|
assertEquals(p.parent(), e.parent());
|
|
assertEquals(p.child(RDN.valueOf("dc=foo")), DN.valueOf("dc=foo,dc=bar,dc=opendj,dc=org"));
|
assertEquals(p.child(RDN.valueOf("dc=foo")), c);
|
assertEquals(p.child(DN.valueOf("dc=xxx,dc=foo")), DN
|
.valueOf("dc=xxx,dc=foo,dc=bar,dc=opendj,dc=org"));
|
}
|
|
/**
|
* Test the getRDN method.
|
*
|
* @param s
|
* The test DN string.
|
* @param p
|
* The expected parent.
|
* @param r
|
* The expected rdn.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "createParentAndRDNTestData")
|
public void testRDN(final String s, final String p, final String r) throws Exception {
|
final DN dn = DN.valueOf(s);
|
final RDN rdn = (r != null ? RDN.valueOf(r) : null);
|
|
assertEquals(dn.rdn(), rdn, "For DN " + s);
|
}
|
|
/**
|
* Tests the root DN.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test
|
public void testRootDN1() throws Exception {
|
final DN dn = DN.valueOf("");
|
assertTrue(dn.isRootDN());
|
assertEquals(dn, DN.rootDN());
|
}
|
|
/**
|
* Tests the root DN.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(expectedExceptions = { NullPointerException.class, AssertionError.class })
|
public void testRootDN2() throws Exception {
|
final DN dn = DN.valueOf(null);
|
assertEquals(dn, DN.rootDN());
|
}
|
|
/**
|
* Test the root dn.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test
|
public void testRootDN3() throws Exception {
|
final DN nullDN = DN.rootDN();
|
assertTrue(nullDN.isRootDN());
|
assertTrue(nullDN.size() == 0);
|
}
|
|
/**
|
* Test the root dn.
|
*
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test
|
public void testRootDN4() throws Exception {
|
final DN dn = DN.valueOf("dc=com");
|
assertFalse(dn.isRootDN());
|
}
|
|
/**
|
* Tests the subordinate dns.
|
*/
|
@Test(dataProvider = "createSubordinateTestData")
|
public void testSubordinateDN(final String sub, final String base, final boolean e)
|
throws Exception {
|
final DN dn = DN.valueOf(sub);
|
final DN other = DN.valueOf(base);
|
assertEquals(dn.isSubordinateOrEqualTo(other), e, sub + " isSubordinateOf " + base);
|
}
|
|
/**
|
* Tests the supeiror dns.
|
*/
|
@Test(dataProvider = "createSuperiorTestData")
|
public void testSuperiorDN(final String base, final String sub, final boolean e)
|
throws Exception {
|
final DN dn = DN.valueOf(base);
|
final DN other = DN.valueOf(sub);
|
assertEquals(dn.isSuperiorOrEqualTo(other), e, base + " isSuperiorOf " + sub);
|
}
|
|
/**
|
* Test the RFC 4514 string representation of the DN.
|
*
|
* @param rawDN
|
* Raw DN string representation.
|
* @param normDN
|
* Normalized DN string representation.
|
* @param stringDN
|
* String representation.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "testDNs")
|
public void testToString(final String rawDN, final String normDN, final String stringDN)
|
throws Exception {
|
// DN dn = DN.valueOf(rawDN);
|
// assertEquals(dn.toString(), stringDN);
|
}
|
|
/**
|
* Tests the <CODE>valueOf</CODE> method which takes a String argument.
|
*
|
* @param rawDN
|
* Raw DN string representation.
|
* @param normDN
|
* Normalized DN string representation.
|
* @param stringDN
|
* String representation.
|
* @throws Exception
|
* If the test failed unexpectedly.
|
*/
|
@Test(dataProvider = "testDNs")
|
public void testValueOfString(final String rawDN, final String normDN, final String stringDN)
|
throws Exception {
|
final DN raw = DN.valueOf(rawDN);
|
final DN string = DN.valueOf(stringDN);
|
assertEquals(raw, string);
|
}
|
|
/**
|
* Test data for testInScopeOf tests.
|
*
|
* @return Test data.
|
*/
|
@DataProvider
|
public Object[][] createIsInScopeOfTestData() {
|
// @formatter:off
|
return new Object[][] {
|
{ "dc=x,dc=y", "dc=x,dc=y", SearchScope.BASE_OBJECT, true },
|
{ "dc=x,dc=y", "dc=z,dc=y", SearchScope.BASE_OBJECT, false },
|
{ "dc=x,dc=z", "dc=x,dc=y", SearchScope.BASE_OBJECT, false },
|
{ "dc=x,dc=y", "dc=y", SearchScope.BASE_OBJECT, false },
|
{ "dc=y", "dc=x,dc=y", SearchScope.BASE_OBJECT, false },
|
|
{ "dc=x,dc=y", "dc=x,dc=y", SearchScope.SINGLE_LEVEL, false },
|
{ "dc=x,dc=y", "dc=y", SearchScope.SINGLE_LEVEL, true },
|
{ "dc=z,dc=x,dc=y", "dc=y", SearchScope.SINGLE_LEVEL, false },
|
{ "dc=y", "dc=x,dc=y", SearchScope.SINGLE_LEVEL, false },
|
{ "dc=x,dc=z", "dc=y", SearchScope.SINGLE_LEVEL, false },
|
|
{ "dc=x,dc=y", "dc=x,dc=y", SearchScope.SUBORDINATES, false },
|
{ "dc=x,dc=y", "dc=y", SearchScope.SUBORDINATES, true },
|
{ "dc=z,dc=x,dc=y", "dc=y", SearchScope.SUBORDINATES, true },
|
{ "dc=y", "dc=x,dc=y", SearchScope.SUBORDINATES, false },
|
{ "dc=x,dc=z", "dc=y", SearchScope.SUBORDINATES, false },
|
|
{ "dc=x,dc=y", "dc=x,dc=y", SearchScope.WHOLE_SUBTREE, true },
|
{ "dc=x,dc=y", "dc=y", SearchScope.WHOLE_SUBTREE, true },
|
{ "dc=z,dc=x,dc=y", "dc=y", SearchScope.WHOLE_SUBTREE, true },
|
{ "dc=y", "dc=x,dc=y", SearchScope.WHOLE_SUBTREE, false },
|
{ "dc=x,dc=z", "dc=y", SearchScope.WHOLE_SUBTREE, false },
|
};
|
// @formatter:on
|
}
|
|
/**
|
* Tests {@link DN#isInScopeOf(String, SearchScope)}.
|
*
|
* @param dn
|
* The target DN.
|
* @param baseDN
|
* The scope base DN.
|
* @param scope
|
* The search scope.
|
* @param expectedResult
|
* The expected result.
|
*/
|
@Test(dataProvider = "createIsInScopeOfTestData")
|
public void testIsInScopeOfString(final String dn, final String baseDN,
|
final SearchScope scope, final boolean expectedResult) {
|
assertEquals(DN.valueOf(dn).isInScopeOf(baseDN, scope), expectedResult);
|
}
|
|
/**
|
* Tests {@link DN#isInScopeOf(DN, SearchScope)}.
|
*
|
* @param dn
|
* The target DN.
|
* @param baseDN
|
* The scope base DN.
|
* @param scope
|
* The search scope.
|
* @param expectedResult
|
* The expected result.
|
*/
|
@Test(dataProvider = "createIsInScopeOfTestData")
|
public void testIsInScopeOfDN(final String dn, final String baseDN, final SearchScope scope,
|
final boolean expectedResult) {
|
assertEquals(DN.valueOf(dn).isInScopeOf(DN.valueOf(baseDN), scope), expectedResult);
|
}
|
|
/**
|
* Test data for testLocalName tests.
|
*
|
* @return Test data.
|
*/
|
@DataProvider
|
public Object[][] createLocalNameTestData() {
|
// @formatter:off
|
return new Object[][] {
|
{ "", 0, "" },
|
{ "", 1, "" },
|
|
{ "dc=x", 0, "" },
|
{ "dc=x", 1, "dc=x" },
|
{ "dc=x", 2, "dc=x" },
|
|
{ "dc=x,dc=y", 0, "" },
|
{ "dc=x,dc=y", 1, "dc=x" },
|
{ "dc=x,dc=y", 2, "dc=x,dc=y" },
|
{ "dc=x,dc=y", 3, "dc=x,dc=y" },
|
|
{ "dc=x,dc=y,dc=z", 0, "" },
|
{ "dc=x,dc=y,dc=z", 1, "dc=x" },
|
{ "dc=x,dc=y,dc=z", 2, "dc=x,dc=y" },
|
{ "dc=x,dc=y,dc=z", 3, "dc=x,dc=y,dc=z" },
|
{ "dc=x,dc=y,dc=z", 4, "dc=x,dc=y,dc=z" },
|
};
|
// @formatter:on
|
}
|
|
/**
|
* Tests {@link DN#localName(int)}.
|
*
|
* @param dn
|
* The DN whose local name is to be obtained.
|
* @param index
|
* The number of RDNs in the local name.
|
* @param expectedDN
|
* The expected local name.
|
*/
|
@Test(dataProvider = "createLocalNameTestData")
|
public void testLocalName(final String dn, final int index, final String expectedDN) {
|
assertEquals(DN.valueOf(dn).localName(index), DN.valueOf(expectedDN));
|
}
|
|
/**
|
* Test data for testLocalName tests.
|
*
|
* @return Test data.
|
*/
|
@DataProvider
|
public Object[][] createRenameTestData() {
|
// @formatter:off
|
return new Object[][] {
|
{ "", "", "", "" },
|
{ "", "", "dc=x", "dc=x" },
|
{ "dc=x", "", "dc=y", "dc=x,dc=y" },
|
{ "dc=x", "dc=x", "dc=y", "dc=y" },
|
{ "dc=x,dc=y", "dc=y", "dc=z", "dc=x,dc=z" },
|
{ "dc=x,dc=y", "dc=x,dc=y", "dc=z", "dc=z" },
|
{ "dc=x,dc=y", "dc=x", "dc=z", "dc=x,dc=y" },
|
};
|
// @formatter:on
|
}
|
|
/**
|
* Tests {@link DN#rename(DN, DN)}.
|
*
|
* @param dn
|
* The DN to be renamed.
|
* @param fromDN
|
* The source DN.
|
* @param toDN
|
* The destination DN.
|
* @param expectedDN
|
* The expected result.
|
*/
|
@Test(dataProvider = "createRenameTestData")
|
public void testRename(final String dn, final String fromDN, final String toDN,
|
final String expectedDN) {
|
assertEquals(DN.valueOf(dn).rename(DN.valueOf(fromDN), DN.valueOf(toDN)), DN
|
.valueOf(expectedDN));
|
}
|
|
/**
|
* Tests the {@link DN#format(String, Object...)} method.
|
*/
|
@Test
|
public void testFormatNoEscape() {
|
DN actual = DN.format("deviceId=%s,uid=%s,dc=test", 123, "bjensen");
|
DN expected = DN.valueOf("dc=test").child("uid", "bjensen").child("deviceId", 123);
|
assertEquals(actual, expected);
|
assertEquals(actual.toString(), "deviceId=123,uid=bjensen,dc=test");
|
}
|
|
/**
|
* Tests the {@link DN#format(String, Object...)} method.
|
*/
|
@Test
|
public void testFormatEscape() {
|
DN actual = DN.format("uid=%s,dc=test", "#cn=foo+sn=bar");
|
DN expected = DN.valueOf("dc=test").child("uid", "#cn=foo+sn=bar");
|
assertEquals(actual, expected);
|
assertEquals(actual.toString(), "uid=\\#cn\\=foo\\+sn\\=bar,dc=test");
|
}
|
|
/**
|
* Tests the {@link DN#escapeAttributeValue(Object)} method.
|
*/
|
@Test
|
public void testEscapeAttributeValue() {
|
String actual = DN.escapeAttributeValue("#cn=foo+sn=bar");
|
assertEquals(actual, "\\#cn\\=foo\\+sn\\=bar");
|
}
|
}
|