/* * 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 Sun Microsystems, Inc. */ package org.forgerock.opendj.config; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import org.forgerock.opendj.ldap.DN; import org.forgerock.opendj.server.config.client.ConnectionHandlerCfgClient; import org.forgerock.opendj.server.config.client.GlobalCfgClient; import org.forgerock.opendj.server.config.client.LDAPConnectionHandlerCfgClient; import org.forgerock.opendj.server.config.meta.ConnectionHandlerCfgDefn; import org.forgerock.opendj.server.config.meta.GlobalCfgDefn; import org.forgerock.opendj.server.config.meta.LDAPConnectionHandlerCfgDefn; import org.forgerock.opendj.server.config.meta.ReplicationDomainCfgDefn; import org.forgerock.opendj.server.config.meta.ReplicationSynchronizationProviderCfgDefn; import org.forgerock.opendj.server.config.meta.RootCfgDefn; import org.forgerock.opendj.server.config.server.ConnectionHandlerCfg; import org.forgerock.opendj.server.config.server.GlobalCfg; import org.forgerock.opendj.server.config.server.LDAPConnectionHandlerCfg; import org.testng.annotations.Test; @SuppressWarnings("javadoc") public class ManagedObjectPathTest extends ConfigTestCase { @Test public void testEmptyPathIsEmpty() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); assertTrue(path.isEmpty()); } @Test public void testEmptyPathHasZeroElements() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); assertEquals(path.size(), 0); } @Test(expectedExceptions = IllegalArgumentException.class) public void testEmptyPathHasNoParent() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); path.parent(); } @Test public void testEmptyPathIsRootConfiguration() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); assertEquals(path.getManagedObjectDefinition(), RootCfgDefn.getInstance()); } @Test public void testEmptyPathHasNoRelation() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); assertEquals(path.getRelationDefinition(), null); } @Test public void testEmptyPathHasNoName() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); assertNull(path.getName()); } @Test public void testEmptyPathString() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); assertEquals(path.toString(), "/"); } @Test public void testEmptyPathDecode() { ManagedObjectPath<?, ?> path = ManagedObjectPath.valueOf("/"); assertEquals(path, ManagedObjectPath.emptyPath()); } @Test public void testSingletonChild() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); ManagedObjectPath<GlobalCfgClient, GlobalCfg> child = path.child(RootCfgDefn.getInstance() .getGlobalConfigurationRelationDefinition()); assertFalse(child.isEmpty()); assertEquals(child.size(), 1); assertEquals(child.parent(), path); assertNull(child.getName()); assertEquals(child.getManagedObjectDefinition(), GlobalCfgDefn.getInstance()); assertEquals(child.getRelationDefinition(), RootCfgDefn.getInstance() .getGlobalConfigurationRelationDefinition()); assertEquals(child.toString(), "/relation=global-configuration"); assertEquals(child, ManagedObjectPath.valueOf("/relation=global-configuration")); } @Test public void testInstantiableChild() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); ManagedObjectPath<ConnectionHandlerCfgClient, ConnectionHandlerCfg> child = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), "LDAP connection handler"); assertFalse(child.isEmpty()); assertEquals(child.size(), 1); assertEquals(child.parent(), path); assertEquals(child.getName(), "LDAP connection handler"); assertEquals(child.getManagedObjectDefinition(), ConnectionHandlerCfgDefn.getInstance()); assertEquals(child.getRelationDefinition(), RootCfgDefn.getInstance() .getConnectionHandlersRelationDefinition()); assertEquals(child.toString(), "/relation=connection-handler+name=LDAP connection handler"); assertEquals(child, ManagedObjectPath.valueOf("/relation=connection-handler+name=LDAP connection handler")); } @Test public void testInstantiableChildWithSubtype() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); ManagedObjectPath<LDAPConnectionHandlerCfgClient, LDAPConnectionHandlerCfg> child = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), LDAPConnectionHandlerCfgDefn.getInstance(), "LDAP connection handler"); assertFalse(child.isEmpty()); assertEquals(child.size(), 1); assertEquals(child.parent(), path); assertEquals(child.getManagedObjectDefinition(), LDAPConnectionHandlerCfgDefn.getInstance()); assertEquals(child.getRelationDefinition(), RootCfgDefn.getInstance() .getConnectionHandlersRelationDefinition()); String childAsString = "/relation=connection-handler+type=ldap-connection-handler+name=LDAP connection handler"; assertEquals(child.toString(), childAsString); assertEquals(child, ManagedObjectPath.valueOf(childAsString)); } @Test public void testInstantiableChildMultipleLevels() { ManagedObjectPath<?, ?> root = ManagedObjectPath.emptyPath(); ManagedObjectPath<?, ?> mmr = root.child(RootCfgDefn.getInstance() .getSynchronizationProvidersRelationDefinition(), ReplicationSynchronizationProviderCfgDefn .getInstance(), "MMR"); ManagedObjectPath<?, ?> domain = mmr.child(ReplicationSynchronizationProviderCfgDefn.getInstance() .getReplicationDomainsRelationDefinition(), "Domain"); assertFalse(domain.isEmpty()); assertEquals(domain.size(), 2); assertEquals(domain.parent(), mmr); assertEquals(domain.parent(2), root); assertEquals(domain.getManagedObjectDefinition(), ReplicationDomainCfgDefn.getInstance()); assertEquals(domain.getRelationDefinition(), ReplicationSynchronizationProviderCfgDefn.getInstance() .getReplicationDomainsRelationDefinition()); String domainAsString = "/relation=synchronization-provider+type=replication-synchronization-provider" + "+name=MMR/relation=replication-domain+name=Domain"; assertEquals(domain.toString(), domainAsString); assertEquals(domain, ManagedObjectPath.valueOf(domainAsString)); } @Test public void testMatchesAndEqualsBehavior() { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); ManagedObjectPath<ConnectionHandlerCfgClient, ConnectionHandlerCfg> child1 = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), "LDAP connection handler"); ManagedObjectPath<LDAPConnectionHandlerCfgClient, LDAPConnectionHandlerCfg> child2 = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), LDAPConnectionHandlerCfgDefn.getInstance(), "LDAP connection handler"); ManagedObjectPath<LDAPConnectionHandlerCfgClient, LDAPConnectionHandlerCfg> child3 = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), LDAPConnectionHandlerCfgDefn.getInstance(), "Another LDAP connection handler"); // child 1 and child2 matches each other assertTrue(child1.matches(child1)); assertTrue(child2.matches(child2)); assertTrue(child1.matches(child2)); assertTrue(child2.matches(child1)); // child 1 and child2 are not equal to each other assertTrue(child1.equals(child1)); assertTrue(child2.equals(child2)); assertFalse(child1.equals(child2)); assertFalse(child2.equals(child1)); // child 1/2 does not match nor equals child3 assertFalse(child1.matches(child3)); assertFalse(child2.matches(child3)); assertFalse(child3.matches(child1)); assertFalse(child3.matches(child2)); assertFalse(child1.equals(child3)); assertFalse(child2.equals(child3)); assertFalse(child3.equals(child1)); assertFalse(child3.equals(child2)); } @Test public void testToDN() throws Exception { ManagedObjectPath<?, ?> path = ManagedObjectPath.emptyPath(); ManagedObjectPath<ConnectionHandlerCfgClient, ConnectionHandlerCfg> child1 = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), "LDAP connection handler"); ManagedObjectPath<LDAPConnectionHandlerCfgClient, LDAPConnectionHandlerCfg> child2 = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), LDAPConnectionHandlerCfgDefn.getInstance(), "LDAP connection handler"); ManagedObjectPath<LDAPConnectionHandlerCfgClient, LDAPConnectionHandlerCfg> child3 = path.child(RootCfgDefn .getInstance().getConnectionHandlersRelationDefinition(), LDAPConnectionHandlerCfgDefn.getInstance(), "Another LDAP connection handler"); DN expectedEmpty = DN.rootDN(); DN expectedChild1 = DN.valueOf("cn=LDAP connection handler,cn=connection handlers,cn=config"); DN expectedChild2 = DN.valueOf("cn=LDAP connection handler,cn=connection handlers,cn=config"); DN expectedChild3 = DN.valueOf("cn=Another LDAP connection handler,cn=connection handlers,cn=config"); assertEquals(path.toDN(), expectedEmpty); assertEquals(child1.toDN(), expectedChild1); assertEquals(child2.toDN(), expectedChild2); assertEquals(child3.toDN(), expectedChild3); } }