[jboss-cvs] JBossAS SVN: r100083 - in projects/kernel/trunk/dependency/src: test/java/org/jboss/test/dependency/controller/test and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jan 28 15:26:13 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-01-28 15:26:13 -0500 (Thu, 28 Jan 2010)
New Revision: 100083
Added:
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/DependsOnMeCleanupTestCase.java
Modified:
projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerTestSuite.java
Log:
[JBKERNEL-84] remove dependsOnMe when a context is installed
Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-01-28 20:21:58 UTC (rev 100082)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-01-28 20:26:13 UTC (rev 100083)
@@ -1459,7 +1459,40 @@
}
}
}
-
+
+ Set<DependencyItem> iDependOn = dependencies.getIDependOn(null);
+ if (iDependOn.isEmpty() == false)
+ {
+ for (DependencyItem item : iDependOn)
+ {
+ if (item.isResolved())
+ {
+ ControllerState whenRequired = item.getWhenRequired();
+ if (whenRequired == null || whenRequired.equals(fromState))
+ {
+ if (item.unresolved(this))
+ {
+ try
+ {
+ ControllerContext dependency = getContext(item.getIDependOn(), item.getDependentState());
+ if (dependency != null)
+ {
+ DependencyInfo info = dependency.getDependencyInfo();
+ if (info != null)
+ {
+ info.removeDependsOnMe(item);
+ }
+ }
+ }
+ catch(RuntimeException e)
+ {
+ log.warn("Problem finding dependency for " + item, e);
+ }
+ }
+ }
+ }
+ }
+ }
}
catch (Throwable error)
{
@@ -1530,63 +1563,60 @@
{
for (DependencyItem item : iDependOn)
{
- if (item.isResolved()) //TODO Is this check necessary
+ Object name = item.getIDependOn();
+ if (name == null)
+ continue;
+
+ ControllerContext other = getContext(name, null);
+ if (other == null)
{
- Object name = item.getIDependOn();
- if (name == null)
- continue;
-
- ControllerContext other = getContext(name, null);
- if (other == null)
- {
- log.debug("Could not find dependency '" + name + "' while uninstalling on demand contexts for " + item);
- continue;
- }
- if (other.getMode() != ControllerMode.ON_DEMAND)
- continue;
-
- DependencyInfo otherDependencies = other.getDependencyInfo();
- if (otherDependencies == null)
- continue;
+ log.debug("Could not find dependency '" + name + "' while uninstalling on demand contexts for " + item);
+ continue;
+ }
+ if (other.getMode() != ControllerMode.ON_DEMAND)
+ continue;
+
+ DependencyInfo otherDependencies = other.getDependencyInfo();
+ if (otherDependencies == null)
+ continue;
+
+ Set<DependencyItem> dependsOnOther = otherDependencies.getDependsOnMe(null);
+ boolean isRequired = false;
+ for (DependencyItem dependsOnOtherItem : dependsOnOther)
+ {
+ Set<ControllerContext> dependsContexts = CollectionsFactory.createLazySet();
+ getContexts(dependsOnOtherItem.getName(), dependsContexts);
- Set<DependencyItem> dependsOnOther = otherDependencies.getDependsOnMe(null);
- boolean isRequired = false;
- for (DependencyItem dependsOnOtherItem : dependsOnOther)
+ if (!dependsContexts.isEmpty())
{
- Set<ControllerContext> dependsContexts = CollectionsFactory.createLazySet();
- getContexts(dependsOnOtherItem.getName(), dependsContexts);
-
- if (!dependsContexts.isEmpty())
+ for (ControllerContext dependsContext : dependsContexts)
{
- for (ControllerContext dependsContext : dependsContexts)
+ if (dependsContext == null)
{
- if (dependsContext == null)
- {
- log.debug("Could not find reverse dependency '" + dependsOnOtherItem.getName() + "' while uninstalling on demand contexts for " + item);
- continue;
- }
-
- ControllerState requiredState = item.getWhenRequired();
- ControllerState actualState = dependsContext.getState();
-
- if (requiredState.equals(actualState) || stateModel.isBeforeState(requiredState, actualState))
- {
- isRequired = true;
- break;
- }
+ log.debug("Could not find reverse dependency '" + dependsOnOtherItem.getName() + "' while uninstalling on demand contexts for " + item);
+ continue;
}
+
+ ControllerState requiredState = item.getWhenRequired();
+ ControllerState actualState = dependsContext.getState();
+
+ if (requiredState.equals(actualState) || stateModel.isBeforeState(requiredState, actualState))
+ {
+ isRequired = true;
+ break;
+ }
}
-
- if (isRequired)
- break;
}
- if (!isRequired)
- {
- //For some reason uninstallContext() uninstalls to the state below the passed in one, add one
- ControllerState state = stateModel.getNextState(ControllerMode.ON_DEMAND.getRequiredState());
- uninstallContext(other, state, trace);
- }
+
+ if (isRequired)
+ break;
}
+ if (!isRequired)
+ {
+ //For some reason uninstallContext() uninstalls to the state below the passed in one, add one
+ ControllerState state = stateModel.getNextState(ControllerMode.ON_DEMAND.getRequiredState());
+ uninstallContext(other, state, trace);
+ }
}
}
}
Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerTestSuite.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerTestSuite.java 2010-01-28 20:21:58 UTC (rev 100082)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/ControllerTestSuite.java 2010-01-28 20:26:13 UTC (rev 100083)
@@ -21,6 +21,8 @@
*/
package org.jboss.test.dependency.controller.test;
+import org.jboss.test.DependencyAllTestSuite;
+
import junit.framework.Test;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
@@ -56,6 +58,7 @@
suite.addTest(CrossContextDependencyBadObjectName2TestCase.suite());
suite.addTest(CrossContextDependencyBadObjectNameTestCase.suite());
suite.addTest(CrossContextDependencyTestCase.suite());
+ suite.addTest(DependsOnMeCleanupTestCase.suite());
suite.addTest(DisabledControllerTestCase.suite());
suite.addTest(ErrorControllerActionTestCase.suite());
suite.addTest(ManualControllerTestCase.suite());
Added: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/DependsOnMeCleanupTestCase.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/DependsOnMeCleanupTestCase.java (rev 0)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/DependsOnMeCleanupTestCase.java 2010-01-28 20:26:13 UTC (rev 100083)
@@ -0,0 +1,190 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.test;
+
+import java.util.Set;
+
+import junit.framework.Test;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.test.dependency.controller.support.TestDelegate;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DependsOnMeCleanupTestCase extends AbstractDependencyTest
+{
+ public DependsOnMeCleanupTestCase(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return suite(DependsOnMeCleanupTestCase.class);
+ }
+
+ public void testDependsOnMeSimple() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ installContext2();
+ assertDependsOnMe(context1, "Name2");
+ }
+
+ public void testDependsOnMeUninstallDependency() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ installContext2();
+ assertDependsOnMe(context1, "Name2");
+
+ uninstall(context1);
+ assertNoDependsOnMe(context1);
+
+ }
+
+ public void testDependsOnMeReinstallDependency() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ installContext2();
+ assertDependsOnMe(context1, "Name2");
+
+ uninstall(context1);
+ assertNoDependsOnMe(context1);
+
+ context1 = assertInstall(getDelegate1());
+ assertDependsOnMe(context1, "Name2");
+ }
+
+ public void testDependsOnMeChangeDependency() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ installContext2();
+ assertDependsOnMe(context1, "Name2");
+
+ controller.change(context1, ControllerState.START);
+ assertNoDependsOnMe(context1);
+ controller.change(context1, ControllerState.INSTALLED);
+ assertDependsOnMe(context1, "Name2");
+ }
+
+ public void testDependsOnMeUninstallDependent() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ ControllerContext context2 = installContext2();
+ assertDependsOnMe(context1, "Name2");
+
+ uninstall(context2);
+ assertNoDependsOnMe(context1);
+ }
+
+ public void testDependsOnMeReinstallDependent() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ ControllerContext context2 = installContext2();
+ assertDependsOnMe(context1, "Name2");
+
+ uninstall(context2);
+ assertNoDependsOnMe(context1);
+
+ context2 = installContext2();
+ assertDependsOnMe(context1, "Name2");
+ }
+
+ public void testDependsOnMeChangeDependent() throws Throwable
+ {
+ ControllerContext context1 = assertInstall(getDelegate1());
+ assertNoDependsOnMe(context1);
+
+ ControllerContext context2 = installContext2();
+ assertDependsOnMe(context1, "Name2");
+
+ controller.change(context2, ControllerState.PRE_INSTALL);
+ assertNoDependsOnMe(context1);
+ controller.change(context2, ControllerState.DESCRIBED);
+ }
+
+ private ControllerContext installContext2() throws Throwable
+ {
+ TestDelegate delegate2 = getDelegate2();
+ ControllerContext context2 = assertInstall(delegate2);
+ assertNoDependsOnMe(context2);
+ return context2;
+ }
+
+
+ private void assertNoDependsOnMe(ControllerContext context)
+ {
+ if (context.getDependencyInfo() == null)
+ return;
+ assertTrue(context.getDependencyInfo().getDependsOnMe(null) == null || context.getDependencyInfo().getDependsOnMe(null).size() == 0);
+ }
+
+ private void assertDependsOnMe(ControllerContext context, Object...names)
+ {
+ assertNotNull(context.getDependencyInfo());
+ Set<DependencyItem> items = context.getDependencyInfo().getDependsOnMe(null);
+ for (Object name : names)
+ {
+ boolean found = false;
+ for (DependencyItem item : items)
+ {
+ if (item.getName().equals(name))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ fail("Could not find '" + name + "' in dependencies");
+ }
+ }
+
+ protected TestDelegate getDelegate1()
+ {
+ return new TestDelegate("Name1");
+ }
+
+ protected TestDelegate getDelegate2()
+ {
+ TestDelegate result = new TestDelegate("Name2");
+ result.addDependency(new AbstractDependencyItem("Name2", "Name1", ControllerState.DESCRIBED, ControllerState.INSTALLED));
+ return result;
+ }
+
+}
More information about the jboss-cvs-commits
mailing list