[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