ConfigFileHandlerTestCase.java revision 530e312594f469609337996570cf0ea504554a68
/*
* 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 2008-2010 Sun Microsystems, Inc.
*/
package org.opends.server.extensions;
import java.io.File;
import java.util.ArrayList;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.opends.server.TestCaseUtils;
import org.opends.server.config.ConfigEntry;
import org.opends.server.core.DirectoryServer;
import org.opends.server.types.DN;
import static org.testng.Assert.*;
import static org.opends.server.util.ServerConstants.*;
/**
* A set of test cases for the config file handler.
*/
public class ConfigFileHandlerTestCase
extends ExtensionsTestCase
{
/**
* Makes sure that the server is running before performing any tests.
*
* @throws Exception If an unexpected problem occurs.
*/
@BeforeClass()
public void setUp()
throws Exception
{
TestCaseUtils.startServer();
String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
String buildDir = System.getProperty(TestCaseUtils.PROPERTY_BUILD_DIR,
buildRoot + File.separator + "build");
String startOKFile = buildDir + File.separator +
"unit-tests" + File.separator + "package-instance" +
File.separator + "config" + File.separator +
"config.ldif.startok";
assertTrue(new File(startOKFile).exists(),
startOKFile + " does not exist but it should");
assertFalse(new File(startOKFile + ".tmp").exists(),
startOKFile + ".tmp exists but should not");
assertFalse(new File(startOKFile + ".old").exists(),
startOKFile + ".old exists but should not");
}
/**
* Tests to verify that attempts to change the structural object class of a
* config entry will be rejected.
*
* @throws Exception If an unexpected problem occurs.
*/
@Test
public void testChangingStructuralClass()
throws Exception
{
int resultCode = TestCaseUtils.applyModifications(true,
"dn: cn=config",
"changetype: modify",
"replace: objectClass",
"objectClass: top",
"objectClass: device",
"objectClass: extensibleObject"
);
assertFalse(resultCode == 0);
}
/**
* Tests to ensure that none of the configuration entries are using the
* extensibleObject object class.
*/
@Test
public void testNoExtensibleObjects()
throws Exception
{
ArrayList<DN> violatingDNs = new ArrayList<DN>();
recursivelyTestNoExtensibleObjects(
DirectoryServer.getConfigHandler().getConfigRootEntry(), violatingDNs);
if (! violatingDNs.isEmpty())
{
StringBuilder message = new StringBuilder();
message.append("The extensibleObject object class is not allowed for " +
"use in the server configuration.");
message.append(EOL);
message.append("Configuration entries containing the extensibleObject " +
"object class:");
message.append(EOL);
for (DN dn : violatingDNs)
{
message.append("- ");
message.append(dn.toString());
message.append(EOL);
}
throw new AssertionError(message.toString());
}
}
/**
* Tests that the provided configuration entry does not contain the
* extensibleObject object class, and neither do any of its subordinate
* entries.
*
* @param configEntry The configuration entry to be checked.
* @param violatingDNs A list to which the DN of any entry containing the
* extensibleObject class should be added.
*/
private void recursivelyTestNoExtensibleObjects(ConfigEntry configEntry,
ArrayList<DN> violatingDNs)
{
if (configEntry.hasObjectClass("extensibleObject"))
{
violatingDNs.add(configEntry.getDN());
}
for (ConfigEntry ce : configEntry.getChildren().values())
{
recursivelyTestNoExtensibleObjects(ce, violatingDNs);
}
}
}