/*
* 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 2007-2008 Sun Microsystems, Inc.
*/
package org.opends.server.admin;
import static org.testng.Assert.*;
import java.util.Collection;
import java.util.Collections;
import org.opends.server.DirectoryServerTestCase;
import org.opends.server.TestCaseUtils;
import org.opends.server.admin.std.meta.ConnectionHandlerCfgDefn;
import org.opends.server.admin.std.meta.JMXConnectionHandlerCfgDefn;
import org.opends.server.admin.std.meta.LDAPConnectionHandlerCfgDefn;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* AbstractManagedObjectDefinition test cases.
*/
@Test(sequential=true)
public class AbstractManagedObjectDefinitionTest extends DirectoryServerTestCase {
/**
* A test managed object definition.
*/
private static class TestDefinition extends AbstractManagedObjectDefinition {
/**
* Creates a new test definition.
*
* @param name
* The name of the test definition.
* @param parent
* The parent definition (can be null).
*/
@SuppressWarnings("unchecked")
protected TestDefinition(String name, AbstractManagedObjectDefinition parent) {
super(name, parent);
}
}
// Test definitions.
private TestDefinition top = new TestDefinition("topmost", null);
private TestDefinition middle1 = new TestDefinition("middle1", top);
private TestDefinition middle2 = new TestDefinition("middle2", top);
private TestDefinition bottom1 = new TestDefinition("bottom1", middle1);
private TestDefinition bottom2 = new TestDefinition("bottom2", middle1);
private TestDefinition bottom3 = new TestDefinition("bottom3", middle1);
/**
* 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();
TestCfg.setUp();
}
/**
* Tears down test environment.
*/
@AfterClass
public void tearDown() {
TestCfg.cleanup();
}
/**
* @return data for testIsChildOf.
*/
@DataProvider(name = "testIsChildOf")
public Object[][] createTestIsChildOf() {
return new Object[][] { { top, top, true }, { middle1, middle1, true },
{ bottom1, bottom1, true }, { top, middle1, false },
{ top, bottom1, false }, { middle1, top, true },
{ bottom1, top, true }, { bottom1, middle1, true }, };
}
/**
* Tests isChildOf method.
*
* @param d1
* The child definition.
* @param d2
* The parent definition.
* @param expected
* The expected result.
*/
@SuppressWarnings("unchecked")
@Test(dataProvider = "testIsChildOf")
public void testIsChildOf(TestDefinition d1, TestDefinition d2,
boolean expected) {
assertEquals(d1.isChildOf(d2), expected);
}
/**
* @return data for testIsParentOf.
*/
@DataProvider(name = "testIsParentOf")
public Object[][] createTestIsParentOf() {
return new Object[][] { { top, top, true }, { middle1, middle1, true },
{ bottom1, bottom1, true }, { top, middle1, true },
{ top, bottom1, true }, { middle1, top, false },
{ bottom1, top, false }, { bottom1, middle1, false }, };
}
/**
* Tests isParentOf method.
*
* @param d1
* The parent definition.
* @param d2
* The child definition.
* @param expected
* The expected result.
*/
@SuppressWarnings("unchecked")
@Test(dataProvider = "testIsParentOf")
public void testIsParentOf(TestDefinition d1, TestDefinition d2,
boolean expected) {
assertEquals(d1.isParentOf(d2), expected);
}
/**
* Tests getAllChildren method.
*/
@SuppressWarnings("unchecked")
@Test
public void testGetAllChildren1() {
Collection<AbstractManagedObjectDefinition> children = top.getAllChildren();
assertEquals(children.size(), 5);
assertTrue(children.contains(middle1));
assertTrue(children.contains(middle2));
assertTrue(children.contains(bottom1));
assertTrue(children.contains(bottom2));
assertTrue(children.contains(bottom3));
}
/**
* Tests getAllChildren method.
*/
@SuppressWarnings("unchecked")
@Test
public void testGetAllChildren2() {
Collection<AbstractManagedObjectDefinition> children = middle1
.getAllChildren();
assertEquals(children.size(), 3);
assertTrue(children.contains(bottom1));
assertTrue(children.contains(bottom2));
assertTrue(children.contains(bottom3));
}
/**
* Tests getAllChildren method.
*/
@SuppressWarnings("unchecked")
@Test
public void testGetAllChildren3() {
Collection<AbstractManagedObjectDefinition> children = middle2
.getAllChildren();
assertEquals(children.size(), 0);
}
/**
* Tests getChildren method.
*/
@SuppressWarnings("unchecked")
@Test
public void testGetChildren1() {
Collection<AbstractManagedObjectDefinition> children = top.getChildren();
assertEquals(children.size(), 2);
assertTrue(children.contains(middle1));
assertTrue(children.contains(middle2));
}
/**
* Tests getChildren method.
*/
@SuppressWarnings("unchecked")
@Test
public void testGetChildren2() {
Collection<AbstractManagedObjectDefinition> children = middle2
.getChildren();
assertEquals(children.size(), 0);
}
/**
* Tests that overridden properties work properly. FIXME: should not
* use Connection Handlers - should define our own definitions.
* <p>
* Check that the generic connection handler definition does not
* have a default behavior defined for the
* java-class.
*/
@Test
public void testPropertyOverride1() {
AbstractManagedObjectDefinition<?, ?> d = ConnectionHandlerCfgDefn
.getInstance();
PropertyDefinition<?> pd = d
.getPropertyDefinition("java-class");
DefaultBehaviorProvider<?> dbp = pd.getDefaultBehaviorProvider();
assertEquals(dbp.getClass(), UndefinedDefaultBehaviorProvider.class);
}
/**
* Tests that overridden properties work properly. FIXME: should not
* use Connection Handlers - should define our own definitions.
* <p>
* Check that the LDAP connection handler definition does have a
* default behavior defined for the java-class.
*/
@Test
public void testPropertyOverride2() {
AbstractManagedObjectDefinition<?, ?> d = LDAPConnectionHandlerCfgDefn
.getInstance();
PropertyDefinition<?> pd = d
.getPropertyDefinition("java-class");
DefaultBehaviorProvider<?> dbp = pd.getDefaultBehaviorProvider();
assertEquals(dbp.getClass(), DefinedDefaultBehaviorProvider.class);
DefinedDefaultBehaviorProvider<?> ddbp = (DefinedDefaultBehaviorProvider<?>) dbp;
assertEquals(ddbp.getDefaultValues(), Collections
.singleton("org.opends.server.protocols.ldap.LDAPConnectionHandler"));
}
/**
* Tests that overridden properties work properly. FIXME: should not
* use Connection Handlers - should define our own definitions.
* <p>
* Check that the JMX connection handler definition does have a
* default behavior defined for the java-class.
*/
@Test
public void testPropertyOverride3() {
AbstractManagedObjectDefinition<?, ?> d = JMXConnectionHandlerCfgDefn
.getInstance();
PropertyDefinition<?> pd = d
.getPropertyDefinition("java-class");
DefaultBehaviorProvider<?> dbp = pd.getDefaultBehaviorProvider();
assertEquals(dbp.getClass(), DefinedDefaultBehaviorProvider.class);
DefinedDefaultBehaviorProvider<?> ddbp = (DefinedDefaultBehaviorProvider<?>) dbp;
assertEquals(ddbp.getDefaultValues(), Collections
.singleton("org.opends.server.protocols.jmx.JmxConnectionHandler"));
}
/**
* Tests that the getReverseRelationDefinitions() method returns
* relations referring to a managed object.
*/
@Test
public void testGetReverseRelationDefinitions() {
Collection<RelationDefinition<TestParentCfgClient, TestParentCfg>> rdlist1 = TestParentCfgDefn
.getInstance().getReverseRelationDefinitions();
assertEquals(rdlist1.size(), 2);
assertTrue(rdlist1.contains(TestCfg
.getTestOneToManyParentRelationDefinition()));
assertTrue(rdlist1.contains(TestCfg
.getTestOneToZeroOrOneParentRelationDefinition()));
Collection<RelationDefinition<TestChildCfgClient, TestChildCfg>> rdlist2 = TestChildCfgDefn
.getInstance().getReverseRelationDefinitions();
assertEquals(rdlist2.size(), 2);
assertTrue(rdlist2.contains(TestParentCfgDefn.getInstance()
.getTestChildrenRelationDefinition()));
assertTrue(rdlist2.contains(TestParentCfgDefn.getInstance()
.getOptionalTestChildRelationDefinition()));
}
/**
* Tests that the getAllReverseRelationDefinitions() method returns
* all relations referring to a managed object.
*/
@Test
public void testGetAllReverseRelationDefinitions() {
Collection<RelationDefinition<? super TestParentCfgClient, ? super TestParentCfg>> rdlist1 = TestParentCfgDefn
.getInstance().getAllReverseRelationDefinitions();
assertEquals(rdlist1.size(), 2);
assertTrue(rdlist1.contains(TestCfg
.getTestOneToManyParentRelationDefinition()));
assertTrue(rdlist1.contains(TestCfg
.getTestOneToZeroOrOneParentRelationDefinition()));
Collection<RelationDefinition<? super TestChildCfgClient, ? super TestChildCfg>> rdlist2 = TestChildCfgDefn
.getInstance().getAllReverseRelationDefinitions();
assertEquals(rdlist2.size(), 2);
assertTrue(rdlist2.contains(TestParentCfgDefn.getInstance()
.getTestChildrenRelationDefinition()));
assertTrue(rdlist2.contains(TestParentCfgDefn.getInstance()
.getOptionalTestChildRelationDefinition()));
}
}