/* * 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.fest.assertions.Assertions.*; import static org.testng.Assert.*; import java.util.Collection; import java.util.Collections; import org.forgerock.opendj.config.ConfigTestCase; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @SuppressWarnings({"javadoc", "unchecked", "rawtypes"}) @Test(singleThreaded = true) public class AbstractManagedObjectDefinitionTest extends ConfigTestCase { /** A test managed object definition. */ private static class ManagedObjectDef extends AbstractManagedObjectDefinition { protected ManagedObjectDef(String name, AbstractManagedObjectDefinition parent) { super(name, parent); } } private ManagedObjectDef top = new ManagedObjectDef("topmost", null); private ManagedObjectDef middle1 = new ManagedObjectDef("middle1", top); private ManagedObjectDef middle2 = new ManagedObjectDef("middle2", top); private ManagedObjectDef bottom1 = new ManagedObjectDef("bottom1", middle1); private ManagedObjectDef bottom2 = new ManagedObjectDef("bottom2", middle1); private ManagedObjectDef bottom3 = new ManagedObjectDef("bottom3", middle1); @BeforeClass public void setUp() throws Exception { disableClassValidationForProperties(); TestCfg.setUp(); } @AfterClass public void tearDown() { TestCfg.cleanup(); } @DataProvider(name = "isChildOf") public Object[][] createIsChildOf() { return new Object[][] { // child def, parent def, is child of { top, top, true }, { middle1, middle1, true }, { bottom1, bottom1, true }, { top, middle1, false }, { top, bottom1, false }, { middle1, top, true }, { bottom1, top, true }, { bottom1, middle1, true }, }; } @Test(dataProvider = "isChildOf") public void testIsChildOf(ManagedObjectDef childDef, ManagedObjectDef parentDef, boolean expectedIsChildOf) { assertEquals(childDef.isChildOf(parentDef), expectedIsChildOf); } @DataProvider(name = "isParentOf") public Object[][] createIsParentOf() { return new Object[][] { // parent def, child def, is parent of { top, top, true }, { middle1, middle1, true }, { bottom1, bottom1, true }, { top, middle1, true }, { top, bottom1, true }, { middle1, top, false }, { bottom1, top, false }, { bottom1, middle1, false }, }; } @Test(dataProvider = "isParentOf") public void testIsParentOf(ManagedObjectDef parentDef, ManagedObjectDef childDef, boolean expectedIsParentOf) { assertEquals(parentDef.isParentOf(childDef), expectedIsParentOf); } @Test public void testGetAllChildrenOfTop() { Collection children = top.getAllChildren(); assertThat(children).hasSize(5); assertThat(children).containsOnly(middle1, middle2, bottom1, bottom2, bottom3); } @Test public void testGetAllChildrenOfMiddle() { Collection children = middle1.getAllChildren(); assertThat(children).hasSize(3); assertThat(children).containsOnly(bottom1, bottom2, bottom3); } @Test public void testGetAllChildrenNoChild() { Collection children = middle2.getAllChildren(); assertThat(children).isEmpty(); } @Test public void testGetChildrenTop() { Collection children = top.getChildren(); assertThat(children).hasSize(2); assertThat(children).containsOnly(middle1, middle2); } @Test public void testGetChildrenMiddleNoChild() { Collection children = middle2.getChildren(); assertThat(children).isEmpty(); } /** Check default value of "class" property provided for parent. */ @Test public void testPropertyOverrideParent() { AbstractManagedObjectDefinition def = TestParentCfgDefn.getInstance(); PropertyDefinition propertyDef = def.getPropertyDefinition("mandatory-class-property"); DefaultBehaviorProvider provider = propertyDef.getDefaultBehaviorProvider(); assertEquals(provider.getClass(), DefinedDefaultBehaviorProvider.class); DefinedDefaultBehaviorProvider definedProvider = (DefinedDefaultBehaviorProvider) provider; assertEquals(definedProvider.getDefaultValues(), Collections.singleton("org.opends.server.extensions.SomeVirtualAttributeProvider")); } /** Check default value of "class" property provided for child. */ @Test public void testPropertyOverrideChild() { AbstractManagedObjectDefinition def = TestChildCfgDefn.getInstance(); PropertyDefinition propertyDef = def.getPropertyDefinition("mandatory-class-property"); DefaultBehaviorProvider provider = propertyDef.getDefaultBehaviorProvider(); assertEquals(provider.getClass(), DefinedDefaultBehaviorProvider.class); DefinedDefaultBehaviorProvider definedProvider = (DefinedDefaultBehaviorProvider) provider; assertEquals(definedProvider.getDefaultValues(), Collections.singleton("org.opends.server.extensions.UserDefinedVirtualAttributeProvider")); } @Test public void testGetReverseRelationDefinitions() { Collection> parentRelDef = TestParentCfgDefn.getInstance().getReverseRelationDefinitions(); assertThat(parentRelDef).hasSize(2); assertThat(parentRelDef).contains(TestCfg.getTestOneToManyParentRelationDefinition()); assertThat(parentRelDef).contains(TestCfg.getTestOneToZeroOrOneParentRelationDefinition()); Collection> childRelDef = TestChildCfgDefn.getInstance() .getReverseRelationDefinitions(); assertThat(childRelDef).hasSize(2); assertThat(childRelDef).contains(TestParentCfgDefn.getInstance().getTestChildrenRelationDefinition()); assertThat(childRelDef).contains(TestParentCfgDefn.getInstance().getOptionalTestChildRelationDefinition()); } @Test public void testGetAllReverseRelationDefinitions() { Collection> parentRelDef = TestParentCfgDefn.getInstance().getAllReverseRelationDefinitions(); assertThat(parentRelDef).hasSize(2); assertThat(parentRelDef).contains(TestCfg.getTestOneToManyParentRelationDefinition()); assertThat(parentRelDef).contains(TestCfg.getTestOneToZeroOrOneParentRelationDefinition()); Collection> childRelDef = TestChildCfgDefn.getInstance().getAllReverseRelationDefinitions(); assertThat(childRelDef).hasSize(2); assertThat(childRelDef).contains(TestParentCfgDefn.getInstance().getTestChildrenRelationDefinition()); assertThat(childRelDef).contains(TestParentCfgDefn.getInstance().getOptionalTestChildRelationDefinition()); } }