[jboss-cvs] JBossAS SVN: r91923 - in projects/kernel/trunk: dependency/src/test/java/org/jboss/test/dependency/controller/support and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Aug 3 08:25:25 EDT 2009


Author: kabir.khan at jboss.com
Date: 2009-08-03 08:25:24 -0400 (Mon, 03 Aug 2009)
New Revision: 91923

Added:
   projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/TempOnDemandDependencyTestCaseXXXX.java
   projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependency_3.xml
   projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependency_3.xml
   projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testGenericBeanFactoryOnDemandDependencyReinstall2.xml
   projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testOnDemandDependencyReinstall2.xml
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/support/ProxyDependencyInfo.java
   projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyItem.java
   projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/OnDemandDependencyTestCase.java
   projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyTest.java
   projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyUnitTestCase.java
   projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependencyUnitTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/GenericBeanFactoryOnDemandDependencyTestCase.java
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/OnDemandDependencyTestCase.java
Log:
[JBKERNEL-4] Enable the uninstall ondemand contexts if there are no more dependencies, and adjust affected tests

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	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -1421,7 +1421,7 @@
          toContexts.add(context);
          context.setState(toState);
 
-         //uninstallUnusedOnDemandContexts(context, trace);
+         uninstallUnusedOnDemandContexts(context, trace);
       }
       catch (Throwable t)
       {
@@ -1434,71 +1434,82 @@
    }
 
    /**
-    * Uninstall On_Demand contexts that are not used anymore.
+    * If the context being uninstalled depends on On_Demand contexts that are not used anymore
+    * those On_Demand contexts are uninstalled back to the DESCRIBED state.<p>
+    * 
+    * This method must be called with NO locks taken.
     *
     * @param context the context which is being uninstalled.
     * @param trace do trace log
     */
    protected void uninstallUnusedOnDemandContexts(ControllerContext context, boolean trace)
    {
-      DependencyInfo dependencies = context.getDependencyInfo();
-      if (dependencies != null)
+      lockWrite();
+      try
       {
-         Set<DependencyItem> iDependOn = dependencies.getIDependOn(null);
-         if (iDependOn.isEmpty() == false)
+         DependencyInfo dependencies = context.getDependencyInfo();
+         if (dependencies != null)
          {
-            for (DependencyItem item : iDependOn)
+            Set<DependencyItem> iDependOn = dependencies.getIDependOn(null);
+            if (iDependOn.isEmpty() == false)
             {
-               if (item.isResolved()) //TODO Is this check necessary
+               for (DependencyItem item : iDependOn)
                {
-                  Object name = item.getIDependOn();
-                  if (name == null)
-                     continue;
-
-                  ControllerContext other = getContext(name, null);
-                  if (other == null)
+                  if (item.isResolved()) //TODO Is this check necessary
                   {
-                     log.warn("Could not find dependency 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)
-                  {
-                     ControllerContext dependsContext = getContext(dependsOnOtherItem.getName(), null);
-                     if (dependsContext == null)
+                     Object name = item.getIDependOn();
+                     if (name == null)
+                        continue;
+   
+                     ControllerContext other = getContext(name, null);
+                     if (other == null)
                      {
                         log.warn("Could not find dependency while uninstalling on demand contexts for " + item);
                         continue;
                      }
-                        
-                     int requiredIndex = states.indexOf(item.getWhenRequired());
-                     int actualIndex = states.indexOf(dependsContext.getState());
-                     if (requiredIndex <= actualIndex)
+                     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)
                      {
-                        isRequired = true;
-                        break;
+                        ControllerContext dependsContext = getContext(dependsOnOtherItem.getName(), null);
+                        if (dependsContext == null)
+                        {
+                           log.warn("Could not find dependency while uninstalling on demand contexts for " + item);
+                           continue;
+                        }
+                           
+                        int requiredIndex = states.indexOf(item.getWhenRequired());
+                        int actualIndex = states.indexOf(dependsContext.getState());
+                        if (requiredIndex <= actualIndex)
+                        {
+                           isRequired = true;
+                           break;
+                        }
                      }
+                     if (!isRequired)
+                     {
+                        //For some reason uninstallContext() uninstalls to the state below the passed in one, add one
+                        int index = states.indexOf(ControllerMode.ON_DEMAND.getRequiredState());
+                        index++;
+                        ControllerState state = states.get(index);
+                        uninstallContext(other, state, trace);
+                     }
                   }
-                  if (!isRequired)
-                  {
-                     //For some reason uninstallContext() uninstalls to the state below the passed in one, add one
-                     int index = states.indexOf(ControllerMode.ON_DEMAND.getRequiredState());
-                     index++;
-                     ControllerState state = states.get(index);
-                     uninstallContext(other, state, trace);
-                  }
                }
             }
          }
       }
+      finally
+      {
+         unlockWrite();
+      }
    }
 
    /**

Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyInfo.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyInfo.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyInfo.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -1,65 +1,83 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2006, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.support;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import org.jboss.dependency.plugins.AbstractDependencyInfo;
-import org.jboss.dependency.spi.DependencyInfo;
-
-/**
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class ProxyDependencyInfo extends AbstractDependencyInfo implements InvocationHandler
-{
-   private Method method;
-   private int allowedHits;
-
-   public ProxyDependencyInfo(Method method, int allowedHits)
-   {
-      this.method = method;
-      this.allowedHits = allowedHits;
-   }
-
-   public static DependencyInfo createDependencyInfo(Method method, int allowedHits)
-   {
-      return (DependencyInfo)Proxy.newProxyInstance(
-            DependencyInfo.class.getClassLoader(),
-            new Class<?>[]{DependencyInfo.class},
-            new ProxyDependencyInfo(method, allowedHits));
-   }
-
-   public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
-   {
-      if (m.equals(method))
-      {
-         if (allowedHits <= 0)
-            throw new RuntimeException("Failed");
-
-         allowedHits--;
-      }
-
-      return m.invoke(this, args);
-   }
-}
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.support;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.jboss.dependency.plugins.AbstractDependencyInfo;
+import org.jboss.dependency.spi.DependencyInfo;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ProxyDependencyInfo extends AbstractDependencyInfo implements InvocationHandler
+{
+   private Method method;
+   private int allowedHits;
+   private final int originalAllowedHits;
+
+   public ProxyDependencyInfo(Method method, int allowedHits)
+   {
+      this.method = method;
+      this.allowedHits = allowedHits;
+      this.originalAllowedHits = allowedHits;
+   }
+
+   public static DependencyInfo createDependencyInfo(Method method, int allowedHits)
+   {
+      return (DependencyInfo)Proxy.newProxyInstance(
+            DependencyInfo.class.getClassLoader(),
+            new Class<?>[]{DependencyInfo.class},
+            new ProxyDependencyInfo(method, allowedHits));
+   }
+
+   public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
+   {
+      if (enableChecking())
+      {
+         if (m.equals(method))
+         {
+            if (allowedHits <= 0)
+               throw new RuntimeException("Failed for method " + m.getName() + " " + originalAllowedHits);
+   
+            allowedHits--;
+         }
+      }
+
+      return m.invoke(this, args);
+   }
+   
+   private boolean enableChecking()
+   {
+//      StackTraceElement[] st = new Exception().getStackTrace();
+//      for (StackTraceElement element : st)
+//      {
+//         if (element.getMethodName().equals("uninstallUnusedOnDemandContexts"))
+//         {
+//            return false;
+//         }
+//      }
+      return true;
+   }
+}

Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyItem.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyItem.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/support/ProxyDependencyItem.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -1,67 +1,69 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2006, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.support;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-
-import org.jboss.dependency.plugins.AbstractDependencyItem;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.dependency.spi.DependencyItem;
-
-/**
- * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
- */
-public class ProxyDependencyItem extends AbstractDependencyItem implements InvocationHandler
-{
-   private Method method;
-   private int allowedHits;
-
-   public ProxyDependencyItem(Method method, int allowedHits, ControllerState whenRequired)
-   {
-      super(method.getName(), "bean", whenRequired, null);
-      this.method = method;
-      this.allowedHits = allowedHits;
-   }
-
-   public static DependencyItem createDependencyInfo(Method method, int allowedHits, ControllerState whenRequired)
-   {
-      return (DependencyItem)Proxy.newProxyInstance(
-            DependencyItem.class.getClassLoader(),
-            new Class<?>[]{DependencyItem.class},
-            new ProxyDependencyItem(method, allowedHits, whenRequired));
-   }
-
-   public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
-   {
-      if (m.equals(method))
-      {
-         if (allowedHits <= 0)
-            throw new RuntimeException("Failed");
-
-         allowedHits--;
-      }
-
-      return m.invoke(this, args);
-   }
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.support;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+
+/**
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public class ProxyDependencyItem extends AbstractDependencyItem implements InvocationHandler
+{
+   private Method method;
+   private int allowedHits;
+   private final int originalAllowedHits;
+
+   public ProxyDependencyItem(Method method, int allowedHits, ControllerState whenRequired)
+   {
+      super(method.getName(), "bean", whenRequired, null);
+      this.method = method;
+      this.allowedHits = allowedHits;
+      this.originalAllowedHits = allowedHits;
+   }
+
+   public static DependencyItem createDependencyInfo(Method method, int allowedHits, ControllerState whenRequired)
+   {
+      return (DependencyItem)Proxy.newProxyInstance(
+            DependencyItem.class.getClassLoader(),
+            new Class<?>[]{DependencyItem.class},
+            new ProxyDependencyItem(method, allowedHits, whenRequired));
+   }
+
+   public Object invoke(Object proxy, Method m, Object[] args) throws Throwable
+   {
+      if (m.equals(method))
+      {
+         if (allowedHits <= 0)
+            throw new RuntimeException("Failed for method " + m.getName() + " " + originalAllowedHits);
+
+         allowedHits--;
+      }
+
+      return m.invoke(this, args);
+   }
 }
\ No newline at end of file

Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/OnDemandDependencyTestCase.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/OnDemandDependencyTestCase.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/OnDemandDependencyTestCase.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -21,6 +21,7 @@
 */
 package org.jboss.test.dependency.controller.test;
 
+import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 
 import org.jboss.dependency.plugins.AbstractDependencyItem;
@@ -193,6 +194,20 @@
       assertEquals(-1, delegate1.configureUninstallOrder);
       assertEquals(-1, delegate1.instantiateUninstallOrder);
       assertEquals(-1, delegate1.describeUninstallOrder);
+      TestDelegate delegate3 = getDelegate3();
+      ControllerContext context3 = assertInstall(delegate3);
+      assertEquals(13, delegate3.describeInstallOrder);
+      assertEquals(14, delegate3.instantiateInstallOrder);
+      assertEquals(15, delegate3.configureInstallOrder);
+      assertEquals(16, delegate3.createInstallOrder);
+      assertEquals(17, delegate3.startInstallOrder);
+      assertEquals(18, delegate3.installInstallOrder);
+      assertEquals(-1, delegate3.installUninstallOrder);
+      assertEquals(-1, delegate3.startUninstallOrder);
+      assertEquals(-1, delegate3.createUninstallOrder);
+      assertEquals(-1, delegate3.configureUninstallOrder);
+      assertEquals(-1, delegate3.instantiateUninstallOrder);
+      assertEquals(-1, delegate3.describeUninstallOrder);
       assertUninstall(context2);
       assertEquals(2, delegate2.describeInstallOrder);
       assertEquals(3, delegate2.instantiateInstallOrder);
@@ -200,12 +215,12 @@
       assertEquals(10, delegate2.createInstallOrder);
       assertEquals(11, delegate2.startInstallOrder);
       assertEquals(12, delegate2.installInstallOrder);
-      assertEquals(13, delegate2.installUninstallOrder);
-      assertEquals(14, delegate2.startUninstallOrder);
-      assertEquals(15, delegate2.createUninstallOrder);
-      assertEquals(16, delegate2.configureUninstallOrder);
-      assertEquals(17, delegate2.instantiateUninstallOrder);
-      assertEquals(18, delegate2.describeUninstallOrder);
+      assertEquals(19, delegate2.installUninstallOrder);
+      assertEquals(20, delegate2.startUninstallOrder);
+      assertEquals(21, delegate2.createUninstallOrder);
+      assertEquals(22, delegate2.configureUninstallOrder);
+      assertEquals(23, delegate2.instantiateUninstallOrder);
+      assertEquals(24, delegate2.describeUninstallOrder);
       assertContext("Name1", ControllerState.INSTALLED);
       assertEquals(1, delegate1.describeInstallOrder);
       assertEquals(5, delegate1.instantiateInstallOrder);
@@ -220,18 +235,18 @@
       assertEquals(-1, delegate1.instantiateUninstallOrder);
       assertEquals(-1, delegate1.describeUninstallOrder);
       context2 = assertInstall(delegate2);
-      assertEquals(19, delegate2.describeInstallOrder);
-      assertEquals(20, delegate2.instantiateInstallOrder);
-      assertEquals(21, delegate2.configureInstallOrder);
-      assertEquals(22, delegate2.createInstallOrder);
-      assertEquals(23, delegate2.startInstallOrder);
-      assertEquals(24, delegate2.installInstallOrder);
-      assertEquals(13, delegate2.installUninstallOrder);
-      assertEquals(14, delegate2.startUninstallOrder);
-      assertEquals(15, delegate2.createUninstallOrder);
-      assertEquals(16, delegate2.configureUninstallOrder);
-      assertEquals(17, delegate2.instantiateUninstallOrder);
-      assertEquals(18, delegate2.describeUninstallOrder);
+      assertEquals(25, delegate2.describeInstallOrder);
+      assertEquals(26, delegate2.instantiateInstallOrder);
+      assertEquals(27, delegate2.configureInstallOrder);
+      assertEquals(28, delegate2.createInstallOrder);
+      assertEquals(29, delegate2.startInstallOrder);
+      assertEquals(30, delegate2.installInstallOrder);
+      assertEquals(19, delegate2.installUninstallOrder);
+      assertEquals(20, delegate2.startUninstallOrder);
+      assertEquals(21, delegate2.createUninstallOrder);
+      assertEquals(22, delegate2.configureUninstallOrder);
+      assertEquals(23, delegate2.instantiateUninstallOrder);
+      assertEquals(24, delegate2.describeUninstallOrder);
       assertUninstall(context1);
       assertEquals(1, delegate1.describeInstallOrder);
       assertEquals(5, delegate1.instantiateInstallOrder);
@@ -239,53 +254,159 @@
       assertEquals(7, delegate1.createInstallOrder);
       assertEquals(8, delegate1.startInstallOrder);
       assertEquals(9, delegate1.installInstallOrder);
-      assertEquals(28, delegate1.installUninstallOrder);
-      assertEquals(29, delegate1.startUninstallOrder);
-      assertEquals(30, delegate1.createUninstallOrder);
-      assertEquals(31, delegate1.configureUninstallOrder);
-      assertEquals(32, delegate1.instantiateUninstallOrder);
-      assertEquals(33, delegate1.describeUninstallOrder);
+      assertEquals(37, delegate1.installUninstallOrder);
+      assertEquals(38, delegate1.startUninstallOrder);
+      assertEquals(39, delegate1.createUninstallOrder);
+      assertEquals(40, delegate1.configureUninstallOrder);
+      assertEquals(41, delegate1.instantiateUninstallOrder);
+      assertEquals(42, delegate1.describeUninstallOrder);
       assertContext("Name2", ControllerState.CONFIGURED);
-      assertEquals(19, delegate2.describeInstallOrder);
-      assertEquals(20, delegate2.instantiateInstallOrder);
-      assertEquals(21, delegate2.configureInstallOrder);
-      assertEquals(22, delegate2.createInstallOrder);
-      assertEquals(23, delegate2.startInstallOrder);
-      assertEquals(24, delegate2.installInstallOrder);
-      assertEquals(25, delegate2.installUninstallOrder);
-      assertEquals(26, delegate2.startUninstallOrder);
-      assertEquals(27, delegate2.createUninstallOrder);
-      assertEquals(16, delegate2.configureUninstallOrder);
-      assertEquals(17, delegate2.instantiateUninstallOrder);
-      assertEquals(18, delegate2.describeUninstallOrder);
+      assertEquals(25, delegate2.describeInstallOrder);
+      assertEquals(26, delegate2.instantiateInstallOrder);
+      assertEquals(27, delegate2.configureInstallOrder);
+      assertEquals(28, delegate2.createInstallOrder);
+      assertEquals(29, delegate2.startInstallOrder);
+      assertEquals(30, delegate2.installInstallOrder);
+      assertEquals(22, delegate2.configureUninstallOrder);
+      assertEquals(23, delegate2.instantiateUninstallOrder);
+      assertEquals(24, delegate2.describeUninstallOrder);
+      assertContext("Name3", ControllerState.CONFIGURED);
+      assertEquals(13, delegate3.describeInstallOrder);
+      assertEquals(14, delegate3.instantiateInstallOrder);
+      assertEquals(15, delegate3.configureInstallOrder);
+      assertEquals(16, delegate3.createInstallOrder);
+      assertEquals(17, delegate3.startInstallOrder);
+      assertEquals(18, delegate3.installInstallOrder);
+      assertEquals(-1, delegate3.configureUninstallOrder);
+      assertEquals(-1, delegate3.instantiateUninstallOrder);
+      assertEquals(-1, delegate3.describeUninstallOrder);
+      assertDoubleEquals(31, 34, delegate2.installUninstallOrder, delegate3.installUninstallOrder);
+      assertDoubleEquals(32, 35, delegate2.startUninstallOrder, delegate3.startUninstallOrder);
+      assertDoubleEquals(33, 36, delegate2.createUninstallOrder, delegate3.createUninstallOrder);
       context1 = assertInstall(delegate1);
-      assertEquals(34, delegate1.describeInstallOrder);
-      assertEquals(35, delegate1.instantiateInstallOrder);
-      assertEquals(36, delegate1.configureInstallOrder);
-      assertEquals(37, delegate1.createInstallOrder);
-      assertEquals(38, delegate1.startInstallOrder);
-      assertEquals(39, delegate1.installInstallOrder);
-      assertEquals(28, delegate1.installUninstallOrder);
-      assertEquals(29, delegate1.startUninstallOrder);
-      assertEquals(30, delegate1.createUninstallOrder);
-      assertEquals(31, delegate1.configureUninstallOrder);
-      assertEquals(32, delegate1.instantiateUninstallOrder);
-      assertEquals(33, delegate1.describeUninstallOrder);
+      assertEquals(43, delegate1.describeInstallOrder);
+      assertEquals(44, delegate1.instantiateInstallOrder);
+      assertEquals(45, delegate1.configureInstallOrder);
+      assertEquals(46, delegate1.createInstallOrder);
+      assertEquals(47, delegate1.startInstallOrder);
+      assertEquals(48, delegate1.installInstallOrder);
+      assertEquals(37, delegate1.installUninstallOrder);
+      assertEquals(38, delegate1.startUninstallOrder);
+      assertEquals(39, delegate1.createUninstallOrder);
+      assertEquals(40, delegate1.configureUninstallOrder);
+      assertEquals(41, delegate1.instantiateUninstallOrder);
+      assertEquals(42, delegate1.describeUninstallOrder);
       assertContext("Name2", ControllerState.INSTALLED);
-      assertEquals(19, delegate2.describeInstallOrder);
-      assertEquals(20, delegate2.instantiateInstallOrder);
-      assertEquals(21, delegate2.configureInstallOrder);
-      assertEquals(40, delegate2.createInstallOrder);
-      assertEquals(41, delegate2.startInstallOrder);
-      assertEquals(42, delegate2.installInstallOrder);
-      assertEquals(25, delegate2.installUninstallOrder);
-      assertEquals(26, delegate2.startUninstallOrder);
-      assertEquals(27, delegate2.createUninstallOrder);
-      assertEquals(16, delegate2.configureUninstallOrder);
-      assertEquals(17, delegate2.instantiateUninstallOrder);
-      assertEquals(18, delegate2.describeUninstallOrder);
+      assertEquals(25, delegate2.describeInstallOrder);
+      assertEquals(26, delegate2.instantiateInstallOrder);
+      assertEquals(27, delegate2.configureInstallOrder);
+      assertEquals(22, delegate2.configureUninstallOrder);
+      assertEquals(23, delegate2.instantiateUninstallOrder);
+      assertEquals(24, delegate2.describeUninstallOrder);
+      assertContext("Name3", ControllerState.INSTALLED);
+      assertEquals(13, delegate3.describeInstallOrder);
+      assertEquals(14, delegate3.instantiateInstallOrder);
+      assertEquals(15, delegate3.configureInstallOrder);
+      assertEquals(-1, delegate3.configureUninstallOrder);
+      assertEquals(-1, delegate3.instantiateUninstallOrder);
+      assertEquals(-1, delegate3.describeUninstallOrder);
+      assertDoubleEquals(49, 50, delegate2.createInstallOrder, delegate3.createInstallOrder);
+      assertDoubleEquals(51, 52, delegate2.startInstallOrder, delegate3.startInstallOrder);
+      assertDoubleEquals(53, 54, delegate2.installInstallOrder, delegate3.installInstallOrder);
+      assertDoubleEquals(31, 34, delegate2.installUninstallOrder, delegate3.installUninstallOrder);
+      assertDoubleEquals(32, 35, delegate2.startUninstallOrder, delegate3.startUninstallOrder);
+      assertDoubleEquals(33, 36, delegate2.createUninstallOrder, delegate3.createUninstallOrder);
+      //Uninstall both dependencies and check that the on demand context goes back to described
+      assertUninstall(context3);
+      assertEquals(13, delegate3.describeInstallOrder);
+      assertEquals(14, delegate3.instantiateInstallOrder);
+      assertEquals(15, delegate3.configureInstallOrder);
+      assertDoubleEquals(49, 50, delegate2.createInstallOrder, delegate3.createInstallOrder);
+      assertDoubleEquals(51, 52, delegate2.startInstallOrder, delegate3.startInstallOrder);
+      assertDoubleEquals(53, 54, delegate2.installInstallOrder, delegate3.installInstallOrder);
+      assertEquals(55, delegate3.installUninstallOrder);
+      assertEquals(56, delegate3.startUninstallOrder);
+      assertEquals(57, delegate3.createUninstallOrder);
+      assertEquals(58, delegate3.configureUninstallOrder);
+      assertEquals(59, delegate3.instantiateUninstallOrder);
+      assertEquals(60, delegate3.describeUninstallOrder);
+      assertUninstall(context2);
+      assertEquals(25, delegate2.describeInstallOrder);
+      assertEquals(26, delegate2.instantiateInstallOrder);
+      assertEquals(27, delegate2.configureInstallOrder);
+      assertDoubleEquals(49, 50, delegate2.createInstallOrder, delegate3.createInstallOrder);
+      assertDoubleEquals(51, 52, delegate2.startInstallOrder, delegate3.startInstallOrder);
+      assertDoubleEquals(53, 54, delegate2.installInstallOrder, delegate3.installInstallOrder);
+      assertEquals(61, delegate2.installUninstallOrder);
+      assertEquals(62, delegate2.startUninstallOrder);
+      assertEquals(63, delegate2.createUninstallOrder);
+      assertEquals(69, delegate2.configureUninstallOrder);
+      assertEquals(70, delegate2.instantiateUninstallOrder);
+      assertEquals(71, delegate2.describeUninstallOrder);
+      assertContext(context1, ControllerState.DESCRIBED);
+      assertEquals(64, delegate1.installUninstallOrder);
+      assertEquals(65, delegate1.startUninstallOrder);
+      assertEquals(66, delegate1.createUninstallOrder);
+      assertEquals(67, delegate1.configureUninstallOrder);
+      assertEquals(68, delegate1.instantiateUninstallOrder);
    }
+
+   public void testAssertDoubleEquals() throws Exception
+   {
+      assertDoubleEquals(1, 2, 1, 2);
+      assertDoubleEquals(1, 2, 2, 1);
+      assertEqualsExpectFailure(1, 2, 1, 3);
+      assertEqualsExpectFailure(1, 2, 3, 2);
+      assertEqualsExpectFailure(1, 2, 3, 1);
+      assertEqualsExpectFailure(1, 2, 2, 3);
+      
+      try
+      {
+         assertEqualsExpectFailure(1, 2, 1, 2);
+      }
+      catch(AssertionFailedError expected)
+      {
+         return;
+      }
+      fail("Should have had a failure");
+   }
+
+
+   /**
+    * When installing 2 contexts as a result of resolving their dependencies or uninstalling
+    * 2 contexts as a result of undeploying their dependencies we cannot count on the order the 2 contexts are 
+    * (un)installed (that is an implementation detail), so check them both
+    */
+   private void assertDoubleEquals(int expectedA, int expectedB, int actualA, int actualB)
+   {
+      if (expectedA == expectedB)
+      {
+         fail("Did not expect same expected values <" + expectedA + ">, <" + expectedB + ">");
+      }
+      if (actualA == actualB)
+      {
+         fail("Did not expect same actual values <" + actualA + ">, <" + actualB + ">");
+      }
+      if ((expectedA != actualA && expectedA != actualB) || (expectedB != actualA && expectedB != actualB))
+      {
+         fail("expected <" + expectedA + ", " + expectedB + "> but was <" + actualA + ", " + actualB + ">");
+      }
+   }
    
+   private void assertEqualsExpectFailure(int expectedA, int expectedB, int actualA, int actualB)
+   {
+      try
+      {
+         assertDoubleEquals(expectedA, expectedB, actualA, actualB);
+      }
+      catch(AssertionFailedError expected)
+      {
+         return;
+      }
+      fail("Should have picked up failure");
+   }
+
+   
    protected TestDelegate getDelegate1()
    {
       TestDelegate result = new TestDelegate("Name1");
@@ -299,4 +420,11 @@
       result.addDependency(new AbstractDependencyItem("Name2", "Name1", ControllerState.CREATE, ControllerState.INSTALLED));
       return result;
    }
+   
+   protected TestDelegate getDelegate3()
+   {
+      TestDelegate result = new TestDelegate("Name3");
+      result.addDependency(new AbstractDependencyItem("Name3", "Name1", ControllerState.CREATE, ControllerState.INSTALLED));
+      return result;
+   }
 }

Added: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/TempOnDemandDependencyTestCaseXXXX.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/TempOnDemandDependencyTestCaseXXXX.java	                        (rev 0)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/test/TempOnDemandDependencyTestCaseXXXX.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -0,0 +1,320 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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 junit.framework.Test;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.dependency.controller.support.TestDelegate;
+
+/**
+ * A OnDemandDependencyTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 88815 $
+ */
+public class TempOnDemandDependencyTestCaseXXXX extends AbstractDependencyTest
+{
+   public static Test suite()
+   {
+      return suite(TempOnDemandDependencyTestCaseXXXX.class);
+   }
+   
+   public TempOnDemandDependencyTestCaseXXXX(String name)
+   {
+      super(name);
+   }
+   
+   public void testOnDemandDependencyOnDemandFirst() throws Throwable
+   {
+      TestDelegate delegate1 = getDelegate1();
+      ControllerContext context1 = assertInstall(delegate1, ControllerState.DESCRIBED);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(-1, delegate1.instantiateInstallOrder);
+      assertEquals(-1, delegate1.configureInstallOrder);
+      assertEquals(-1, delegate1.createInstallOrder);
+      assertEquals(-1, delegate1.startInstallOrder);
+      assertEquals(-1, delegate1.installInstallOrder);
+      assertEquals(-1, delegate1.installUninstallOrder);
+      assertEquals(-1, delegate1.startUninstallOrder);
+      assertEquals(-1, delegate1.createUninstallOrder);
+      assertEquals(-1, delegate1.configureUninstallOrder);
+      assertEquals(-1, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      TestDelegate delegate2 = getDelegate2();
+      ControllerContext context2 = assertInstall(delegate2);
+      assertEquals(2, delegate2.describeInstallOrder);
+      assertEquals(3, delegate2.instantiateInstallOrder);
+      assertEquals(4, delegate2.configureInstallOrder);
+      assertEquals(10, delegate2.createInstallOrder);
+      assertEquals(11, delegate2.startInstallOrder);
+      assertEquals(12, delegate2.installInstallOrder);
+      assertEquals(-1, delegate2.installUninstallOrder);
+      assertEquals(-1, delegate2.startUninstallOrder);
+      assertEquals(-1, delegate2.createUninstallOrder);
+      assertEquals(-1, delegate2.configureUninstallOrder);
+      assertEquals(-1, delegate2.instantiateUninstallOrder);
+      assertEquals(-1, delegate2.describeUninstallOrder);
+      assertContext(context1);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(5, delegate1.instantiateInstallOrder);
+      assertEquals(6, delegate1.configureInstallOrder);
+      assertEquals(7, delegate1.createInstallOrder);
+      assertEquals(8, delegate1.startInstallOrder);
+      assertEquals(9, delegate1.installInstallOrder);
+      assertEquals(-1, delegate1.installUninstallOrder);
+      assertEquals(-1, delegate1.startUninstallOrder);
+      assertEquals(-1, delegate1.createUninstallOrder);
+      assertEquals(-1, delegate1.configureUninstallOrder);
+      assertEquals(-1, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      
+      assertUninstall(context2);
+      assertContext(context1, ControllerState.DESCRIBED);
+      
+      assertEquals(13, delegate2.installUninstallOrder);
+      assertEquals(14, delegate2.startUninstallOrder);
+      assertEquals(15, delegate2.createUninstallOrder);
+
+      assertEquals(16, delegate1.installUninstallOrder);
+      assertEquals(17, delegate1.startUninstallOrder);
+      assertEquals(18, delegate1.createUninstallOrder);
+      assertEquals(19, delegate1.configureUninstallOrder);
+      assertEquals(20, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      
+      assertEquals(21, delegate2.configureUninstallOrder);
+      assertEquals(22, delegate2.instantiateUninstallOrder);
+      assertEquals(23, delegate2.describeUninstallOrder);
+   }
+   
+//   public void testOnDemandDependencyOnDemandSecond() throws Throwable
+//   {
+//      TestDelegate delegate2 = getDelegate2();
+//      ControllerContext context2 = assertInstall(delegate2, ControllerState.CONFIGURED);
+//      assertEquals(1, delegate2.describeInstallOrder);
+//      assertEquals(2, delegate2.instantiateInstallOrder);
+//      assertEquals(3, delegate2.configureInstallOrder);
+//      assertEquals(-1, delegate2.createInstallOrder);
+//      assertEquals(-1, delegate2.startInstallOrder);
+//      assertEquals(-1, delegate2.installInstallOrder);
+//      assertEquals(-1, delegate2.installUninstallOrder);
+//      assertEquals(-1, delegate2.startUninstallOrder);
+//      assertEquals(-1, delegate2.createUninstallOrder);
+//      assertEquals(-1, delegate2.configureUninstallOrder);
+//      assertEquals(-1, delegate2.instantiateUninstallOrder);
+//      assertEquals(-1, delegate2.describeUninstallOrder);
+//      assertChange(context2, ControllerState.INSTALLED, ControllerState.CONFIGURED);
+//      assertEquals(1, delegate2.describeInstallOrder);
+//      assertEquals(2, delegate2.instantiateInstallOrder);
+//      assertEquals(3, delegate2.configureInstallOrder);
+//      assertEquals(-1, delegate2.createInstallOrder);
+//      assertEquals(-1, delegate2.startInstallOrder);
+//      assertEquals(-1, delegate2.installInstallOrder);
+//      assertEquals(-1, delegate2.installUninstallOrder);
+//      assertEquals(-1, delegate2.startUninstallOrder);
+//      assertEquals(-1, delegate2.createUninstallOrder);
+//      assertEquals(-1, delegate2.configureUninstallOrder);
+//      assertEquals(-1, delegate2.instantiateUninstallOrder);
+//      assertEquals(-1, delegate2.describeUninstallOrder);
+//      TestDelegate delegate1 = getDelegate1();
+//      assertInstall(delegate1);
+//      assertEquals(4, delegate1.describeInstallOrder);
+//      assertEquals(5, delegate1.instantiateInstallOrder);
+//      assertEquals(6, delegate1.configureInstallOrder);
+//      assertEquals(7, delegate1.createInstallOrder);
+//      assertEquals(8, delegate1.startInstallOrder);
+//      assertEquals(9, delegate1.installInstallOrder);
+//      assertEquals(-1, delegate1.installUninstallOrder);
+//      assertEquals(-1, delegate1.startUninstallOrder);
+//      assertEquals(-1, delegate1.createUninstallOrder);
+//      assertEquals(-1, delegate1.configureUninstallOrder);
+//      assertEquals(-1, delegate1.instantiateUninstallOrder);
+//      assertEquals(-1, delegate1.describeUninstallOrder);
+//      assertContext(context2, ControllerState.INSTALLED);
+//      assertEquals(1, delegate2.describeInstallOrder);
+//      assertEquals(2, delegate2.instantiateInstallOrder);
+//      assertEquals(3, delegate2.configureInstallOrder);
+//      assertEquals(10, delegate2.createInstallOrder);
+//      assertEquals(11, delegate2.startInstallOrder);
+//      assertEquals(12, delegate2.installInstallOrder);
+//      assertEquals(-1, delegate2.installUninstallOrder);
+//      assertEquals(-1, delegate2.startUninstallOrder);
+//      assertEquals(-1, delegate2.createUninstallOrder);
+//      assertEquals(-1, delegate2.configureUninstallOrder);
+//      assertEquals(-1, delegate2.instantiateUninstallOrder);
+//      assertEquals(-1, delegate2.describeUninstallOrder);
+//   }
+//   
+//   public void testChangeDependencyReinstall() throws Throwable
+//   {
+//      TestDelegate delegate1 = getDelegate1();
+//      ControllerContext context1 = assertInstall(delegate1, ControllerState.DESCRIBED);
+//      assertEquals(1, delegate1.describeInstallOrder);
+//      assertEquals(-1, delegate1.instantiateInstallOrder);
+//      assertEquals(-1, delegate1.configureInstallOrder);
+//      assertEquals(-1, delegate1.createInstallOrder);
+//      assertEquals(-1, delegate1.startInstallOrder);
+//      assertEquals(-1, delegate1.installInstallOrder);
+//      assertEquals(-1, delegate1.installUninstallOrder);
+//      assertEquals(-1, delegate1.startUninstallOrder);
+//      assertEquals(-1, delegate1.createUninstallOrder);
+//      assertEquals(-1, delegate1.configureUninstallOrder);
+//      assertEquals(-1, delegate1.instantiateUninstallOrder);
+//      assertEquals(-1, delegate1.describeUninstallOrder);
+//      TestDelegate delegate2 = getDelegate2();
+//      ControllerContext context2 = assertInstall(delegate2);
+//      assertEquals(2, delegate2.describeInstallOrder);
+//      assertEquals(3, delegate2.instantiateInstallOrder);
+//      assertEquals(4, delegate2.configureInstallOrder);
+//      assertEquals(10, delegate2.createInstallOrder);
+//      assertEquals(11, delegate2.startInstallOrder);
+//      assertEquals(12, delegate2.installInstallOrder);
+//      assertEquals(-1, delegate2.installUninstallOrder);
+//      assertEquals(-1, delegate2.startUninstallOrder);
+//      assertEquals(-1, delegate2.createUninstallOrder);
+//      assertEquals(-1, delegate2.configureUninstallOrder);
+//      assertEquals(-1, delegate2.instantiateUninstallOrder);
+//      assertEquals(-1, delegate2.describeUninstallOrder);
+//      assertContext(context1);
+//      assertEquals(1, delegate1.describeInstallOrder);
+//      assertEquals(5, delegate1.instantiateInstallOrder);
+//      assertEquals(6, delegate1.configureInstallOrder);
+//      assertEquals(7, delegate1.createInstallOrder);
+//      assertEquals(8, delegate1.startInstallOrder);
+//      assertEquals(9, delegate1.installInstallOrder);
+//      assertEquals(-1, delegate1.installUninstallOrder);
+//      assertEquals(-1, delegate1.startUninstallOrder);
+//      assertEquals(-1, delegate1.createUninstallOrder);
+//      assertEquals(-1, delegate1.configureUninstallOrder);
+//      assertEquals(-1, delegate1.instantiateUninstallOrder);
+//      assertEquals(-1, delegate1.describeUninstallOrder);
+//      assertUninstall(context2);
+//      assertEquals(2, delegate2.describeInstallOrder);
+//      assertEquals(3, delegate2.instantiateInstallOrder);
+//      assertEquals(4, delegate2.configureInstallOrder);
+//      assertEquals(10, delegate2.createInstallOrder);
+//      assertEquals(11, delegate2.startInstallOrder);
+//      assertEquals(12, delegate2.installInstallOrder);
+//      assertEquals(13, delegate2.installUninstallOrder);
+//      assertEquals(14, delegate2.startUninstallOrder);
+//      assertEquals(15, delegate2.createUninstallOrder);
+//      assertEquals(16, delegate2.configureUninstallOrder);
+//      assertEquals(17, delegate2.instantiateUninstallOrder);
+//      assertEquals(18, delegate2.describeUninstallOrder);
+//      assertContext("Name1", ControllerState.INSTALLED);
+//      assertEquals(1, delegate1.describeInstallOrder);
+//      assertEquals(5, delegate1.instantiateInstallOrder);
+//      assertEquals(6, delegate1.configureInstallOrder);
+//      assertEquals(7, delegate1.createInstallOrder);
+//      assertEquals(8, delegate1.startInstallOrder);
+//      assertEquals(9, delegate1.installInstallOrder);
+//      assertEquals(-1, delegate1.installUninstallOrder);
+//      assertEquals(-1, delegate1.startUninstallOrder);
+//      assertEquals(-1, delegate1.createUninstallOrder);
+//      assertEquals(-1, delegate1.configureUninstallOrder);
+//      assertEquals(-1, delegate1.instantiateUninstallOrder);
+//      assertEquals(-1, delegate1.describeUninstallOrder);
+//      context2 = assertInstall(delegate2);
+//      assertEquals(19, delegate2.describeInstallOrder);
+//      assertEquals(20, delegate2.instantiateInstallOrder);
+//      assertEquals(21, delegate2.configureInstallOrder);
+//      assertEquals(22, delegate2.createInstallOrder);
+//      assertEquals(23, delegate2.startInstallOrder);
+//      assertEquals(24, delegate2.installInstallOrder);
+//      assertEquals(13, delegate2.installUninstallOrder);
+//      assertEquals(14, delegate2.startUninstallOrder);
+//      assertEquals(15, delegate2.createUninstallOrder);
+//      assertEquals(16, delegate2.configureUninstallOrder);
+//      assertEquals(17, delegate2.instantiateUninstallOrder);
+//      assertEquals(18, delegate2.describeUninstallOrder);
+//      assertUninstall(context1);
+//      assertEquals(1, delegate1.describeInstallOrder);
+//      assertEquals(5, delegate1.instantiateInstallOrder);
+//      assertEquals(6, delegate1.configureInstallOrder);
+//      assertEquals(7, delegate1.createInstallOrder);
+//      assertEquals(8, delegate1.startInstallOrder);
+//      assertEquals(9, delegate1.installInstallOrder);
+//      assertEquals(28, delegate1.installUninstallOrder);
+//      assertEquals(29, delegate1.startUninstallOrder);
+//      assertEquals(30, delegate1.createUninstallOrder);
+//      assertEquals(31, delegate1.configureUninstallOrder);
+//      assertEquals(32, delegate1.instantiateUninstallOrder);
+//      assertEquals(33, delegate1.describeUninstallOrder);
+//      assertContext("Name2", ControllerState.CONFIGURED);
+//      assertEquals(19, delegate2.describeInstallOrder);
+//      assertEquals(20, delegate2.instantiateInstallOrder);
+//      assertEquals(21, delegate2.configureInstallOrder);
+//      assertEquals(22, delegate2.createInstallOrder);
+//      assertEquals(23, delegate2.startInstallOrder);
+//      assertEquals(24, delegate2.installInstallOrder);
+//      assertEquals(25, delegate2.installUninstallOrder);
+//      assertEquals(26, delegate2.startUninstallOrder);
+//      assertEquals(27, delegate2.createUninstallOrder);
+//      assertEquals(16, delegate2.configureUninstallOrder);
+//      assertEquals(17, delegate2.instantiateUninstallOrder);
+//      assertEquals(18, delegate2.describeUninstallOrder);
+//      context1 = assertInstall(delegate1);
+//      assertEquals(34, delegate1.describeInstallOrder);
+//      assertEquals(35, delegate1.instantiateInstallOrder);
+//      assertEquals(36, delegate1.configureInstallOrder);
+//      assertEquals(37, delegate1.createInstallOrder);
+//      assertEquals(38, delegate1.startInstallOrder);
+//      assertEquals(39, delegate1.installInstallOrder);
+//      assertEquals(28, delegate1.installUninstallOrder);
+//      assertEquals(29, delegate1.startUninstallOrder);
+//      assertEquals(30, delegate1.createUninstallOrder);
+//      assertEquals(31, delegate1.configureUninstallOrder);
+//      assertEquals(32, delegate1.instantiateUninstallOrder);
+//      assertEquals(33, delegate1.describeUninstallOrder);
+//      assertContext("Name2", ControllerState.INSTALLED);
+//      assertEquals(19, delegate2.describeInstallOrder);
+//      assertEquals(20, delegate2.instantiateInstallOrder);
+//      assertEquals(21, delegate2.configureInstallOrder);
+//      assertEquals(40, delegate2.createInstallOrder);
+//      assertEquals(41, delegate2.startInstallOrder);
+//      assertEquals(42, delegate2.installInstallOrder);
+//      assertEquals(25, delegate2.installUninstallOrder);
+//      assertEquals(26, delegate2.startUninstallOrder);
+//      assertEquals(27, delegate2.createUninstallOrder);
+//      assertEquals(16, delegate2.configureUninstallOrder);
+//      assertEquals(17, delegate2.instantiateUninstallOrder);
+//      assertEquals(18, delegate2.describeUninstallOrder);
+//   }
+   
+   protected TestDelegate getDelegate1()
+   {
+      TestDelegate result = new TestDelegate("Name1");
+      result.setMode(ControllerMode.ON_DEMAND);
+      return result;
+   }
+   
+   protected TestDelegate getDelegate2()
+   {
+      TestDelegate result = new TestDelegate("Name2");
+      result.addDependency(new AbstractDependencyItem("Name2", "Name1", ControllerState.CREATE, ControllerState.INSTALLED));
+      return result;
+   }
+}

Modified: projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyTest.java
===================================================================
--- projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyTest.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyTest.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -40,9 +40,11 @@
 {
    private static ObjectName NAME_ONE = ObjectNameFactory.create("test:name=1"); 
    private static ObjectName NAME_TWO = ObjectNameFactory.create("test:name=2"); 
+   private static ObjectName NAME_THREE = ObjectNameFactory.create("test:name=3"); 
    
    protected String resourceName1;
    protected String resourceName2;
+   protected String resourceName3;
    
    public NewOnDemandDependencyTest(String name)
    {
@@ -58,17 +60,21 @@
    {
       Simple test1 = null;
       Simple test2 = null;
+      Simple test3 = null;
       
       boolean error = false;
       
       List<ObjectName> mbeans1 = deploy(resourceName1);
+      List<ObjectName> mbeans3 = null;
       try
       {
          assertServiceInstalled(NAME_ONE);
          assertNotRegistered(NAME_ONE);
          assertNoService(NAME_TWO);
+         assertNoService(NAME_THREE);
 
          List<ObjectName> mbeans2 = deploy(resourceName2);
+         mbeans3 = deploy(resourceName3);
          try
          {
             assertServiceRunning(NAME_ONE);
@@ -85,6 +91,13 @@
             assertEquals(4, test2.startOrder);
             assertEquals(0, test2.stopOrder);
             assertEquals(0, test2.destroyOrder);
+            test3 = getMBean(Simple.class, NAME_THREE, "Instance");
+            assertEquals("()", test3.constructorUsed);
+            assertEquals(5, test3.createOrder);
+            assertEquals(6, test3.startOrder);
+            assertEquals(0, test3.stopOrder);
+            assertEquals(0, test3.destroyOrder);
+
          }
          catch (Exception e)
          {
@@ -111,8 +124,13 @@
                assertNotRegistered(NAME_TWO);
                assertEquals(2, test2.createOrder);
                assertEquals(4, test2.startOrder);
-               assertEquals(5, test2.stopOrder);
-               assertEquals(6, test2.destroyOrder);
+               assertEquals(7, test2.stopOrder);
+               assertEquals(8, test2.destroyOrder);
+               assertServiceRunning(NAME_THREE);
+               assertEquals(5, test3.createOrder);
+               assertEquals(6, test3.startOrder);
+               assertEquals(0, test3.stopOrder);
+               assertEquals(0, test3.destroyOrder);
             }
          }
       }
@@ -136,17 +154,28 @@
             assertNotRegistered(NAME_ONE);
             assertEquals(1, test1.createOrder);
             assertEquals(3, test1.startOrder);
-            assertEquals(7, test1.stopOrder);
-            assertEquals(8, test1.destroyOrder);
+            assertEquals(10, test1.stopOrder);
+            assertEquals(12, test1.destroyOrder);
             assertNoService(NAME_TWO);
             assertNotRegistered(NAME_TWO);
             if (test2 != null)
             {
                assertEquals(2, test2.createOrder);
                assertEquals(4, test2.startOrder);
-               assertEquals(5, test2.stopOrder);
-               assertEquals(6, test2.destroyOrder);
+               assertEquals(7, test2.stopOrder);
+               assertEquals(8, test2.destroyOrder);
             }
+            if (test3 != null)
+            {
+               assertEquals(5, test3.createOrder);
+               assertEquals(6, test3.startOrder);
+               assertEquals(9, test3.stopOrder);
+               assertEquals(11, test3.destroyOrder);
+            }
+            
+            undeploy(mbeans3);
+            assertNoService(NAME_THREE);
+            assertNotRegistered(NAME_THREE);
          }
       }
    }
@@ -255,17 +284,21 @@
    {
       Simple test1 = null;
       Simple test2 = null;
+      Simple test3 = null;
       
       boolean error = false;
       
       List<ObjectName> mbeans1 = deploy(resourceName1);
+      List<ObjectName> mbeans3 = null;
       try
       {
          List<ObjectName> mbeans2 = deploy(resourceName2);
+         mbeans3 = deploy(resourceName3);
          try
          {
             assertServiceRunning(NAME_ONE);
             assertServiceRunning(NAME_TWO);
+            assertServiceRunning(NAME_THREE);
             
             test1 = getMBean(Simple.class, NAME_ONE, "Instance");
             assertEquals("()", test1.constructorUsed);
@@ -279,36 +312,47 @@
             assertEquals(4, test2.startOrder);
             assertEquals(0, test2.stopOrder);
             assertEquals(0, test2.destroyOrder);
+            test3 = getMBean(Simple.class, NAME_THREE, "Instance");
+            assertEquals("()", test2.constructorUsed);
+            assertEquals(5, test3.createOrder);
+            assertEquals(6, test3.startOrder);
+            assertEquals(0, test3.stopOrder);
+            assertEquals(0, test3.destroyOrder);
             
             undeploy(mbeans1);
 
             assertNotRegistered(NAME_ONE);
             assertServiceDestroyed(NAME_TWO);
+            assertServiceDestroyed(NAME_THREE);
             
             assertEquals(1, test1.createOrder);
             assertEquals(3, test1.startOrder);
-            assertEquals(6, test1.stopOrder);
-            assertEquals(8, test1.destroyOrder);
+            assertEquals(9, test1.stopOrder);
+            assertEquals(12, test1.destroyOrder);
+            assertDoubleEquals(7, 8, test2.stopOrder, test3.stopOrder);
+            assertDoubleEquals(10, 11, test2.destroyOrder, test3.destroyOrder);
             assertEquals(2, test2.createOrder);
             assertEquals(4, test2.startOrder);
-            assertEquals(5, test2.stopOrder);
-            assertEquals(7, test2.destroyOrder);
+            assertEquals(5, test3.createOrder);
+            assertEquals(6, test3.startOrder);
             
             mbeans1 = deploy(resourceName1);
 
             assertServiceRunning(NAME_ONE);
             assertServiceRunning(NAME_TWO);
+            assertServiceRunning(NAME_THREE);
             
             test1 = getMBean(Simple.class, NAME_ONE, "Instance");
             assertEquals("()", test1.constructorUsed);
-            assertEquals(9, test1.createOrder);
-            assertEquals(11, test1.startOrder);
+            assertEquals(13, test1.createOrder);
+            assertEquals(16, test1.startOrder);
             assertEquals(0, test1.stopOrder);
             assertEquals(0, test1.destroyOrder);
-            assertEquals(10, test2.createOrder);
-            assertEquals(12, test2.startOrder);
-            assertEquals(5, test2.stopOrder);
-            assertEquals(7, test2.destroyOrder);
+            assertDoubleEquals(14, 15, test2.createOrder, test3.createOrder);
+            assertDoubleEquals(17, 18, test2.startOrder, test3.startOrder);
+            assertDoubleEquals(7, 8, test2.stopOrder, test3.stopOrder);
+            assertDoubleEquals(10, 11, test2.destroyOrder, test3.destroyOrder);
+            
          }
          catch (Exception e)
          {
@@ -327,16 +371,18 @@
             if (error == false)
             {
                assertServiceRunning(NAME_ONE);
-               assertEquals(9, test1.createOrder);
-               assertEquals(11, test1.startOrder);
+               assertEquals(13, test1.createOrder);
+               assertEquals(16, test1.startOrder);
                assertEquals(0, test1.stopOrder);
                assertEquals(0, test1.destroyOrder);
                assertNoService(NAME_TWO);
                assertNotRegistered(NAME_TWO);
-               assertEquals(10, test2.createOrder);
-               assertEquals(12, test2.startOrder);
-               assertEquals(13, test2.stopOrder);
-               assertEquals(14, test2.destroyOrder);
+               assertDoubleEquals(14, 15, test2.createOrder, test3.createOrder);
+               assertDoubleEquals(17, 18, test2.startOrder, test3.startOrder);
+               assertEquals(19, test2.stopOrder);
+               assertEquals(20, test2.destroyOrder);
+               assertEitherEquals(7, 8, test3.stopOrder);
+               assertEitherEquals(10, 11, test3.destroyOrder);
             }
          }
       }
@@ -358,20 +404,30 @@
          {
             assertNoService(NAME_ONE);
             assertNotRegistered(NAME_ONE);
-            assertEquals(9, test1.createOrder);
-            assertEquals(11, test1.startOrder);
-            assertEquals(15, test1.stopOrder);
-            assertEquals(16, test1.destroyOrder);
+            assertEquals(13, test1.createOrder);
+            assertEquals(16, test1.startOrder);
+            assertEquals(22, test1.stopOrder);
+            assertEquals(24, test1.destroyOrder);
             assertNoService(NAME_TWO);
             assertNotRegistered(NAME_TWO);
             if (test2 != null)
             {
-               assertEquals(10, test2.createOrder);
-               assertEquals(12, test2.startOrder);
-               assertEquals(13, test2.stopOrder);
-               assertEquals(14, test2.destroyOrder);
+               assertEitherEquals(14, 15, test2.createOrder);
+               assertEitherEquals(17, 18, test2.startOrder);
+               assertEquals(19, test2.stopOrder);
+               assertEquals(20, test2.destroyOrder);
             }
+            if (test3 != null)
+            {
+               assertEitherEquals(14, 15, test3.createOrder);
+               assertEitherEquals(17, 18, test3.startOrder);
+               assertEquals(21, test3.stopOrder);
+               assertEquals(23, test3.destroyOrder);
+            }
          }
+         undeploy(mbeans3);
+         assertNoService(NAME_THREE);
+         assertNotRegistered(NAME_THREE);
       }
    }
    
@@ -379,17 +435,21 @@
    {
       Simple test1 = null;
       Simple test2 = null;
+      Simple test3 = null;
       
       boolean error = false;
       
       List<ObjectName> mbeans1 = deploy(resourceName1);
+      List<ObjectName> mbeans3 = null;
       try
       {
          List<ObjectName> mbeans2 = deploy(resourceName2);
+         mbeans3 = deploy(resourceName3);
          try
          {
             assertServiceRunning(NAME_ONE);
             assertServiceRunning(NAME_TWO);
+            assertServiceRunning(NAME_THREE);
             
             test1 = getMBean(Simple.class, NAME_ONE, "Instance");
             assertEquals("()", test1.constructorUsed);
@@ -403,11 +463,18 @@
             assertEquals(4, test2.startOrder);
             assertEquals(0, test2.stopOrder);
             assertEquals(0, test2.destroyOrder);
+            test3 = getMBean(Simple.class, NAME_THREE, "Instance");
+            assertEquals("()", test3.constructorUsed);
+            assertEquals(5, test3.createOrder);
+            assertEquals(6, test3.startOrder);
+            assertEquals(0, test3.stopOrder);
+            assertEquals(0, test3.destroyOrder);
             
             undeploy(mbeans2);
 
             assertServiceRunning(NAME_ONE);
             assertNoService(NAME_TWO);
+            assertServiceRunning(NAME_THREE);
             
             assertEquals(1, test1.createOrder);
             assertEquals(3, test1.startOrder);
@@ -415,13 +482,18 @@
             assertEquals(0, test1.destroyOrder);
             assertEquals(2, test2.createOrder);
             assertEquals(4, test2.startOrder);
-            assertEquals(5, test2.stopOrder);
-            assertEquals(6, test2.destroyOrder);
+            assertEquals(7, test2.stopOrder);
+            assertEquals(8, test2.destroyOrder);
+            assertEquals(5, test3.createOrder);
+            assertEquals(6, test3.startOrder);
+            assertEquals(0, test3.stopOrder);
+            assertEquals(0, test3.destroyOrder);
             
             mbeans2 = deploy(resourceName2);
 
             assertServiceRunning(NAME_ONE);
             assertServiceRunning(NAME_TWO);
+            assertServiceRunning(NAME_THREE);
             
             assertEquals(1, test1.createOrder);
             assertEquals(3, test1.startOrder);
@@ -429,10 +501,14 @@
             assertEquals(0, test1.destroyOrder);
             test2 = getMBean(Simple.class, NAME_TWO, "Instance");
             assertEquals("()", test1.constructorUsed);
-            assertEquals(7, test2.createOrder);
-            assertEquals(8, test2.startOrder);
+            assertEquals(9, test2.createOrder);
+            assertEquals(10, test2.startOrder);
             assertEquals(0, test2.stopOrder);
             assertEquals(0, test2.destroyOrder);
+            assertEquals(5, test3.createOrder);
+            assertEquals(6, test3.startOrder);
+            assertEquals(0, test3.stopOrder);
+            assertEquals(0, test3.destroyOrder);
          }
          catch (Exception e)
          {
@@ -457,10 +533,10 @@
                assertEquals(0, test1.destroyOrder);
                assertNoService(NAME_TWO);
                assertNotRegistered(NAME_TWO);
-               assertEquals(7, test2.createOrder);
-               assertEquals(8, test2.startOrder);
-               assertEquals(9, test2.stopOrder);
-               assertEquals(10, test2.destroyOrder);
+               assertEquals(9, test2.createOrder);
+               assertEquals(10, test2.startOrder);
+               assertEquals(11, test2.stopOrder);
+               assertEquals(12, test2.destroyOrder);
             }
          }
       }
@@ -484,18 +560,190 @@
             assertNotRegistered(NAME_ONE);
             assertEquals(1, test1.createOrder);
             assertEquals(3, test1.startOrder);
-            assertEquals(11, test1.stopOrder);
-            assertEquals(12, test1.destroyOrder);
+            assertEquals(14, test1.stopOrder);
+            assertEquals(16, test1.destroyOrder);
             assertNoService(NAME_TWO);
             assertNotRegistered(NAME_TWO);
             if (test2 != null)
             {
-               assertEquals(7, test2.createOrder);
-               assertEquals(8, test2.startOrder);
-               assertEquals(9, test2.stopOrder);
-               assertEquals(10, test2.destroyOrder);
+               assertEquals(9, test2.createOrder);
+               assertEquals(10, test2.startOrder);
+               assertEquals(11, test2.stopOrder);
+               assertEquals(12, test2.destroyOrder);
             }
+            if (test3 != null)
+            {
+               assertEquals(5, test3.createOrder);
+               assertEquals(6, test3.startOrder);
+               assertEquals(13, test3.stopOrder);
+               assertEquals(15, test3.destroyOrder);
+            }
          }
+         
+         undeploy(mbeans3);
       }
    }
+
+   public void testRedeployOnlyDependency() throws Exception
+   {
+      Simple test1 = null;
+      Simple test2 = null;
+      
+      boolean error = false;
+      
+      List<ObjectName> mbeans1 = deploy(resourceName1);
+      try
+      {
+         List<ObjectName> mbeans2 = deploy(resourceName2);
+         try
+         {
+            assertServiceRunning(NAME_ONE);
+            assertServiceRunning(NAME_TWO);
+            
+            test1 = getMBean(Simple.class, NAME_ONE, "Instance");
+            assertEquals("()", test1.constructorUsed);
+            assertEquals(1, test1.createOrder);
+            assertEquals(3, test1.startOrder);
+            assertEquals(0, test1.stopOrder);
+            assertEquals(0, test1.destroyOrder);
+            test2 = getMBean(Simple.class, NAME_TWO, "Instance");
+            assertEquals("()", test2.constructorUsed);
+            assertEquals(2, test2.createOrder);
+            assertEquals(4, test2.startOrder);
+            assertEquals(0, test2.stopOrder);
+            assertEquals(0, test2.destroyOrder);
+            
+            undeploy(mbeans2);
+
+            assertServiceDestroyed(NAME_ONE);
+            assertNoService(NAME_TWO);
+            
+            assertEquals(1, test1.createOrder);
+            assertEquals(3, test1.startOrder);
+            assertEquals(6, test1.stopOrder);
+            assertEquals(8, test1.destroyOrder);
+            assertEquals(2, test2.createOrder);
+            assertEquals(4, test2.startOrder);
+            assertEquals(5, test2.stopOrder);
+            assertEquals(7, test2.destroyOrder);
+            
+            mbeans2 = deploy(resourceName2);
+
+            assertServiceRunning(NAME_ONE);
+            assertServiceRunning(NAME_TWO);
+            
+            test1 = getMBean(Simple.class, NAME_ONE, "Instance");
+            assertEquals(9, test1.createOrder);
+            assertEquals(10, test1.startOrder);
+            assertEquals(0, test1.stopOrder);
+            assertEquals(0, test1.destroyOrder);
+            test2 = getMBean(Simple.class, NAME_TWO, "Instance");
+            assertEquals("()", test1.constructorUsed);
+            assertEquals(11, test2.createOrder);
+            assertEquals(12, test2.startOrder);
+            assertEquals(0, test2.stopOrder);
+            assertEquals(0, test2.destroyOrder);
+         }
+         catch (Exception e)
+         {
+            error = true;
+            throw e;
+         }
+         catch (Error e)
+         {
+            error = true;
+            throw e;
+         }
+         finally
+         {
+            undeploy(mbeans2);
+
+            if (error == false)
+            {
+               assertServiceDestroyed(NAME_ONE);
+               assertEquals(9, test1.createOrder);
+               assertEquals(10, test1.startOrder);
+               assertEquals(14, test1.stopOrder);
+               assertEquals(16, test1.destroyOrder);
+               assertNoService(NAME_TWO);
+               assertNotRegistered(NAME_TWO);
+               assertEquals(11, test2.createOrder);
+               assertEquals(12, test2.startOrder);
+               assertEquals(13, test2.stopOrder);
+               assertEquals(15, test2.destroyOrder);
+            }
+         }
+      }
+      catch (Exception e)
+      {
+         error = true;
+         throw e;
+      }
+      catch (Error e)
+      {
+         error = true;
+         throw e;
+      }
+      finally
+      {
+         undeploy(mbeans1);
+
+         if (error == false)
+         {
+            assertNoService(NAME_ONE);
+            assertNotRegistered(NAME_ONE);
+            assertEquals(9, test1.createOrder);
+            assertEquals(10, test1.startOrder);
+            assertEquals(14, test1.stopOrder);
+            assertEquals(16, test1.destroyOrder);
+            assertNoService(NAME_TWO);
+            assertNotRegistered(NAME_TWO);
+            if (test2 != null)
+            {
+               assertEquals(11, test2.createOrder);
+               assertEquals(12, test2.startOrder);
+               assertEquals(13, test2.stopOrder);
+               assertEquals(15, test2.destroyOrder);
+            }
+         }
+      }
+   }
+
+   /**
+    * When installing 2 contexts as a result of resolving their dependencies or uninstalling
+    * 2 contexts as a result of undeploying their dependencies we cannot count on the order the 2 contexts are 
+    * (un)installed (that is an implementation detail), so check them both
+    */
+   private void assertDoubleEquals(int expectedA, int expectedB, int actualA, int actualB)
+   {
+      if (expectedA == expectedB)
+      {
+         fail("Did not expect same expected values <" + expectedA + ">, <" + expectedB + ">");
+      }
+      if (actualA == actualB)
+      {
+         fail("Did not expect same actual values <" + actualA + ">, <" + actualB + ">");
+      }
+      if ((expectedA != actualA && expectedA != actualB) || (expectedB != actualA && expectedB != actualB))
+      {
+         fail("expected <" + expectedA + ", " + expectedB + "> but was <" + actualA + ", " + actualB + ">");
+      }
+   }
+
+   /**
+    * When installing 2 contexts as a result of resolving their dependencies or uninstalling
+    * 2 contexts as a result of undeploying their dependencies we cannot count on the order the 2 contexts are 
+    * (un)installed (that is an implementation detail), so check the expected set
+    */
+   private void assertEitherEquals(int expectedA, int expectedB, int actual)
+   {
+      if (expectedA == expectedB)
+      {
+         fail("Did not expect same expected values <" + expectedA + ">, <" + expectedB + ">");
+      }
+      if (expectedA != actual && expectedB != actual)
+      {
+         fail("expected <" + expectedA + ", " + expectedB + "> but was <" + actual + ">");
+      }
+   }
 }

Modified: projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyUnitTestCase.java
===================================================================
--- projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyUnitTestCase.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependencyUnitTestCase.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -41,5 +41,6 @@
       super(name);
       resourceName1 = "NewOnDemandDependency_1.xml";
       resourceName2 = "NewOnDemandDependency_2.xml";
+      resourceName3 = "NewOnDemandDependency_3.xml";
    }
 }

Modified: projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependencyUnitTestCase.java
===================================================================
--- projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependencyUnitTestCase.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/jmx-mc-int/src/test/java/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependencyUnitTestCase.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -41,5 +41,6 @@
       super(name);
       resourceName1 = "NewOnDemandServerDependency_1.xml";
       resourceName2 = "NewOnDemandServerDependency_2.xml";
+      resourceName3 = "NewOnDemandServerDependency_3.xml";
    }
 }

Added: projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependency_3.xml
===================================================================
--- projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependency_3.xml	                        (rev 0)
+++ projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandDependency_3.xml	2009-08-03 12:25:24 UTC (rev 91923)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+   <mbean name="test:name=3" code="org.jboss.test.system.controller.support.Simple">
+      <depends>test:name=1</depends>
+   </mbean>
+</server>
\ No newline at end of file

Added: projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependency_3.xml
===================================================================
--- projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependency_3.xml	                        (rev 0)
+++ projects/kernel/trunk/jmx-mc-int/src/test/resources/org/jboss/test/system/controller/lifecycle/seperated/test/NewOnDemandServerDependency_3.xml	2009-08-03 12:25:24 UTC (rev 91923)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<server>
+   <mbean name="test:name=3" code="org.jboss.test.system.controller.support.Simple">
+      <depends>test:name=1</depends>
+   </mbean>
+</server>
\ No newline at end of file

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/GenericBeanFactoryOnDemandDependencyTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/GenericBeanFactoryOnDemandDependencyTestCase.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/GenericBeanFactoryOnDemandDependencyTestCase.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -115,6 +115,7 @@
 
       ControllerContext context1 = assertInstall(0, "Name1", ControllerState.DESCRIBED);
       ControllerContext context2 = assertInstall(1, "Name2");
+      ControllerContext context3 = assertInstall(2, "Name3");
       assertContext("Name1");
       
       GenericBeanFactory factory1 = (GenericBeanFactory) context1.getTarget();
@@ -128,16 +129,26 @@
       assertEquals("String2", bean2.getString());
       assertEquals(factory1, bean2.getFactory());
 
+      GenericBeanFactory factory3 = (GenericBeanFactory) context3.getTarget();
+      SimpleBeanWithDependency bean3 = (SimpleBeanWithDependency) factory3.createBean();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(factory1, bean3.getFactory());
+
       assertUninstall("Name1");
 
       assertEquals(ControllerState.ERROR, context1.getState());
       assertEquals(ControllerState.INSTANTIATED, context2.getState());
       assertNotInstalled("Name2");
+      assertEquals(ControllerState.INSTANTIATED, context3.getState());
+      assertNotInstalled("Name3");
 
       context2 = assertContext("Name2", ControllerState.INSTANTIATED);
+      context3 = assertContext("Name3", ControllerState.INSTANTIATED);
       
       context1 = assertInstall(0, "Name1");
       assertEquals(ControllerState.INSTALLED, context2.getState());
+      assertEquals(ControllerState.INSTALLED, context3.getState());
 
       factory1 = (GenericBeanFactory) context1.getTarget();
       bean1 = (SimpleBean) factory1.createBean();
@@ -150,6 +161,12 @@
       assertEquals("String2", bean2.getString());
       assertEquals(factory1, bean2.getFactory());
       
+      factory3 = (GenericBeanFactory) context3.getTarget();
+      bean3 = (SimpleBeanWithDependency) factory3.createBean();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(factory1, bean3.getFactory());
+            
       assertUninstall("Name2");
       
       context1 = assertContext("Name1");
@@ -158,6 +175,13 @@
       assertNotNull(bean1);
       assertEquals("String1", bean1.getString());
       
+      context3 = assertContext("Name3");
+      factory3 = (GenericBeanFactory) context3.getTarget();
+      bean3 = (SimpleBeanWithDependency) factory3.createBean();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(factory1, bean3.getFactory());
+      
       context2 = assertInstall(1, "Name2");
       
       factory1 = (GenericBeanFactory) context1.getTarget();
@@ -170,6 +194,49 @@
       assertNotNull(bean2);
       assertEquals("String2", bean2.getString());
       assertEquals(factory1, bean2.getFactory());
+      
+      factory3 = (GenericBeanFactory) context3.getTarget();
+      bean3 = (SimpleBeanWithDependency) factory3.createBean();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(factory1, bean3.getFactory());
+      
+      assertUninstall("Name2");
+      factory1 = (GenericBeanFactory) context1.getTarget();
+      bean1 = (SimpleBean) factory1.createBean();
+      assertNotNull(bean1);
+      assertEquals("String1", bean1.getString());
+
+      context3 = assertContext("Name3");
+      bean3 = (SimpleBeanWithDependency) factory3.createBean();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(factory1, bean3.getFactory());
+      
+      assertUninstall("Name3");
+      //On demand bean has no remaining dependencies so it gets uninstalled back to the described state 
+      context1 = assertContext("Name1", ControllerState.DESCRIBED);
+      assertNull(context1.getTarget());
+      
+      context2 = assertInstall(1, "Name2");
+      
+      factory1 = (GenericBeanFactory) context1.getTarget();
+      bean1 = (SimpleBean) factory1.createBean();
+      assertNotNull(bean1);
+      assertEquals("String1", bean1.getString());
+
+      factory2 = (GenericBeanFactory) context2.getTarget();
+      bean2 = (SimpleBeanWithDependency) factory2.createBean();
+      assertNotNull(bean2);
+      assertEquals("String2", bean2.getString());
+      assertEquals(factory1, bean2.getFactory());
+
+      context3 = assertInstall(2, "Name3");
+      factory3 = (GenericBeanFactory) context3.getTarget();
+      bean3 = (SimpleBeanWithDependency) factory3.createBean();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(factory1, bean3.getFactory());
    }
 
    public void onDemandDependencyReinstall() throws Throwable
@@ -187,6 +254,10 @@
       addBeanProperty(metaData2, new AbstractPropertyMetaData("string", "String2"));
       addBeanProperty(metaData2, new AbstractPropertyMetaData("factory", new AbstractDependencyValueMetaData("Name1")));
 
-      setBeanMetaDatas(new BeanMetaData[] { getBeanMetaData(metaData1), getBeanMetaData(metaData2) });
+      GenericBeanFactoryMetaData metaData3 = new GenericBeanFactoryMetaData("Name3", SimpleBeanWithDependencyImpl.class.getName());
+      addBeanProperty(metaData3, new AbstractPropertyMetaData("string", "String3"));
+      addBeanProperty(metaData3, new AbstractPropertyMetaData("factory", new AbstractDependencyValueMetaData("Name1")));
+
+      setBeanMetaDatas(new BeanMetaData[] { getBeanMetaData(metaData1), getBeanMetaData(metaData2), getBeanMetaData(metaData3) });
    }
 }
\ No newline at end of file

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/OnDemandDependencyTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/OnDemandDependencyTestCase.java	2009-08-03 12:18:40 UTC (rev 91922)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/OnDemandDependencyTestCase.java	2009-08-03 12:25:24 UTC (rev 91923)
@@ -113,6 +113,7 @@
 
       ControllerContext context1 = assertInstall(0, "Name1", ControllerState.DESCRIBED);
       ControllerContext context2 = assertInstall(1, "Name2");
+      ControllerContext context3 = assertInstall(2, "Name3");
       assertContext("Name1");
       
       SimpleBean bean1 = (SimpleBean) context1.getTarget();
@@ -123,17 +124,26 @@
       assertNotNull(bean2);
       assertEquals("String2", bean2.getString());
       assertEquals(bean1, bean2.getSimpleBean());
+      
+      SimpleBeanWithDependency bean3 = (SimpleBeanWithDependency) context3.getTarget();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(bean1, bean3.getSimpleBean());
 
       assertUninstall("Name1");
 
       assertEquals(ControllerState.ERROR, context1.getState());
       assertEquals(ControllerState.INSTANTIATED, context2.getState());
       assertNotInstalled("Name2");
+      assertEquals(ControllerState.INSTANTIATED, context3.getState());
+      assertNotInstalled("Name3");
 
       context2 = assertContext("Name2", ControllerState.INSTANTIATED);
+      context3 = assertContext("Name3", ControllerState.INSTANTIATED);
       
       context1 = assertInstall(0, "Name1");
       assertEquals(ControllerState.INSTALLED, context2.getState());
+      assertEquals(ControllerState.INSTALLED, context3.getState());
 
       bean1 = (SimpleBean) context1.getTarget();
       assertNotNull(bean1);
@@ -144,6 +154,11 @@
       assertEquals("String2", bean2.getString());
       assertEquals(bean1, bean2.getSimpleBean());
       
+      bean3 = (SimpleBeanWithDependency) context3.getTarget();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(bean1, bean3.getSimpleBean());
+      
       assertUninstall("Name2");
       
       context1 = assertContext("Name1");
@@ -151,6 +166,12 @@
       assertNotNull(bean1);
       assertEquals("String1", bean1.getString());
       
+      context3 = assertContext("Name3");
+      bean3 = (SimpleBeanWithDependency) context3.getTarget();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(bean1, bean3.getSimpleBean());
+
       context2 = assertInstall(1, "Name2");
       
       bean1 = (SimpleBean) context1.getTarget();
@@ -161,6 +182,44 @@
       assertNotNull(bean2);
       assertEquals("String2", bean2.getString());
       assertEquals(bean1, bean2.getSimpleBean());
+      
+      bean3 = (SimpleBeanWithDependency) context3.getTarget();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(bean1, bean3.getSimpleBean());
+
+      assertUninstall("Name2");
+      context1 = assertContext("Name1");
+      bean1 = (SimpleBean) context1.getTarget();
+      assertNotNull(bean1);
+      assertEquals("String1", bean1.getString());
+
+      context3 = assertContext("Name3");
+      bean3 = (SimpleBeanWithDependency) context3.getTarget();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(bean1, bean3.getSimpleBean());
+      
+      assertUninstall("Name3");
+      context1 = assertContext("Name1", ControllerState.DESCRIBED);
+      assertNull(context1.getTarget());
+      
+      context2 = assertInstall(1, "Name2");
+      
+      bean1 = (SimpleBean) context1.getTarget();
+      assertNotNull(bean1);
+      assertEquals("String1", bean1.getString());
+
+      bean2 = (SimpleBeanWithDependency) context2.getTarget();
+      assertNotNull(bean2);
+      assertEquals("String2", bean2.getString());
+      assertEquals(bean1, bean2.getSimpleBean());
+
+      context3 = assertInstall(2, "Name3");
+      bean3 = (SimpleBeanWithDependency) context3.getTarget();
+      assertNotNull(bean3);
+      assertEquals("String3", bean3.getString());
+      assertEquals(bean1, bean3.getSimpleBean());
    }
 
    public void onDemandDependencyReinstall() throws Throwable
@@ -182,6 +241,12 @@
       attributes2.add(new AbstractPropertyMetaData("simpleBean", new AbstractDependencyValueMetaData("Name1")));
       metaData2.setProperties(attributes2);
 
-      setBeanMetaDatas(new BeanMetaData[] { metaData1, metaData2 });
+      AbstractBeanMetaData metaData3 = new AbstractBeanMetaData("Name3", SimpleBeanWithDependencyImpl.class.getName());
+      HashSet<PropertyMetaData> attributes3 = new HashSet<PropertyMetaData>();
+      attributes3.add(new AbstractPropertyMetaData("string", "String3"));
+      attributes3.add(new AbstractPropertyMetaData("simpleBean", new AbstractDependencyValueMetaData("Name1")));
+      metaData3.setProperties(attributes3);
+
+      setBeanMetaDatas(new BeanMetaData[] { metaData1, metaData2, metaData3});
    }
 }
\ No newline at end of file

Added: projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testGenericBeanFactoryOnDemandDependencyReinstall2.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testGenericBeanFactoryOnDemandDependencyReinstall2.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testGenericBeanFactoryOnDemandDependencyReinstall2.xml	2009-08-03 12:25:24 UTC (rev 91923)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+            xmlns="urn:jboss:bean-deployer">
+   <beanfactory name="Name3" class="org.jboss.test.kernel.dependency.support.SimpleBeanWithDependencyImpl">
+      <property name="string">String3</property>
+      <property name="factory"><inject bean="Name1"/></property>
+   </beanfactory>
+</deployment>

Added: projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testOnDemandDependencyReinstall2.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testOnDemandDependencyReinstall2.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testOnDemandDependencyReinstall2.xml	2009-08-03 12:25:24 UTC (rev 91923)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+            xmlns="urn:jboss:bean-deployer">
+   <bean name="Name3" class="org.jboss.test.kernel.dependency.support.SimpleBeanWithDependencyImpl">
+      <property name="string">String3</property>
+      <property name="simpleBean"><inject bean="Name1"/></property>
+   </bean>
+</deployment>




More information about the jboss-cvs-commits mailing list