/*
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE
* or https://OpenDS.dev.java.net/OpenDS.LICENSE.
* 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
* trunk/opends/resource/legal-notices/OpenDS.LICENSE. 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 2008 Sun Microsystems, Inc.
*/
package org.opends.server.admin;
import static org.testng.Assert.assertEquals;
import org.opends.server.TestCaseUtils;
import org.opends.server.DirectoryServerTestCase;
import org.opends.server.admin.std.meta.RootCfgDefn;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* ClassPropertyDefinition Tester.
*/
public class DNPropertyDefinitionTest extends DirectoryServerTestCase {
/**
* Sets up tests
*
* @throws Exception
* If the server could not be initialized.
*/
@BeforeClass
public void setUp() throws Exception {
// This test suite depends on having the schema available, so
// we'll start the server.
TestCaseUtils.startServer();
}
/**
* @return data for testing
*/
@DataProvider(name = "testBuilderSetBaseDN")
public Object[][] createBuilderSetBaseDN() {
return new Object[][] { { null },
{ "cn=key manager providers, cn=config" } };
}
/**
* Tests builder.setBaseDN with valid data.
*
* @param baseDN
* The base DN.
* @throws DirectoryException
* If the DN could not be decoded.
*/
@Test(dataProvider = "testBuilderSetBaseDN")
public void testBuilderSetBaseDN(String baseDN)
throws DirectoryException {
DNPropertyDefinition.Builder localBuilder = DNPropertyDefinition
.createBuilder(RootCfgDefn.getInstance(), "test-property");
localBuilder.setBaseDN(baseDN);
DNPropertyDefinition pd = localBuilder.getInstance();
DN actual = pd.getBaseDN();
DN expected = baseDN == null ? null : DN.decode(baseDN);
assertEquals(actual, expected);
}
/**
* @return data for testing
*/
@DataProvider(name = "testLegalValues")
public Object[][] createLegalValues() {
return new Object[][] {
{ null, "cn=config" },
{ null, "dc=example,dc=com" },
{ "", "cn=config" },
{ "cn=config", "cn=key manager providers, cn=config" },
{ "cn=key manager providers, cn=config",
"cn=my provider, cn=key manager providers, cn=config" }, };
}
/**
* @return data for testing
*/
@DataProvider(name = "testIllegalValues")
public Object[][] createIllegalValues() {
return new Object[][] {
// Above base DN.
{ "cn=config", "" },
// Same as base DN.
{ "cn=config", "cn=config" },
// Same as base DN.
{ "cn=key manager providers, cn=config",
"cn=key manager providers, cn=config" },
// Too far beneath base DN.
{ "cn=config",
"cn=my provider, cn=key manager providers, cn=config" },
// Unrelated to base DN.
{ "cn=config", "dc=example, dc=com" }, };
}
/**
* Tests validation with valid data.
*
* @param baseDN
* The base DN.
* @param value
* The value to be validated.
* @throws DirectoryException
* If the DN could not be decoded.
*/
@Test(dataProvider = "testLegalValues")
public void testValidateLegalValues(String baseDN, String value)
throws DirectoryException {
DNPropertyDefinition.Builder localBuilder = DNPropertyDefinition
.createBuilder(RootCfgDefn.getInstance(), "test-property");
localBuilder.setBaseDN(baseDN);
DNPropertyDefinition pd = localBuilder.getInstance();
pd.validateValue(DN.decode(value));
}
/**
* Tests validation with invalid data.
*
* @param baseDN
* The base DN.
* @param value
* The value to be validated.
* @throws DirectoryException
* If the DN could not be decoded.
*/
@Test(dataProvider = "testIllegalValues", expectedExceptions = IllegalPropertyValueException.class)
public void testValidateIllegalValues(String baseDN, String value)
throws DirectoryException {
DNPropertyDefinition.Builder localBuilder = DNPropertyDefinition
.createBuilder(RootCfgDefn.getInstance(), "test-property");
localBuilder.setBaseDN(baseDN);
DNPropertyDefinition pd = localBuilder.getInstance();
pd.validateValue(DN.decode(value));
}
/**
* Tests decoding with valid data.
*
* @param baseDN
* The base DN.
* @param value
* The value to be validated.
*/
@Test(dataProvider = "testLegalValues")
public void testDecodeLegalValues(String baseDN, String value) {
DNPropertyDefinition.Builder localBuilder = DNPropertyDefinition
.createBuilder(RootCfgDefn.getInstance(), "test-property");
localBuilder.setBaseDN(baseDN);
DNPropertyDefinition pd = localBuilder.getInstance();
pd.decodeValue(value);
}
/**
* Tests validation with invalid data.
*
* @param baseDN
* The base DN.
* @param value
* The value to be validated.
*/
@Test(dataProvider = "testIllegalValues", expectedExceptions = IllegalPropertyValueStringException.class)
public void testDecodeIllegalValues(String baseDN, String value) {
DNPropertyDefinition.Builder localBuilder = DNPropertyDefinition
.createBuilder(RootCfgDefn.getInstance(), "test-property");
localBuilder.setBaseDN(baseDN);
DNPropertyDefinition pd = localBuilder.getInstance();
pd.decodeValue(value);
}
}