[jboss-cvs] JBossAS SVN: r64368 - in projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer: test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 31 07:54:05 EDT 2007


Author: adrian at jboss.org
Date: 2007-07-31 07:54:05 -0400 (Tue, 31 Jul 2007)
New Revision: 64368

Added:
   projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDependencyMetaData.java
   projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDescribeDeployer.java
   projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestSimpleDeployer3.java
   projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/test/DeployerDependencyUnitTestCase.java
Log:
[JBMICRCONT-186] - Add an api for deployment dependencies

Added: projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDependencyMetaData.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDependencyMetaData.java	                        (rev 0)
+++ projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDependencyMetaData.java	2007-07-31 11:54:05 UTC (rev 64368)
@@ -0,0 +1,74 @@
+/*
+* 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.deployers.deployer.support;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.deployers.spi.deployer.DeploymentStage;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+
+/**
+ * TestDependencyMetaData.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class TestDependencyMetaData
+{
+   private static final ControllerState CLASSLOADER = new ControllerState(DeploymentStages.CLASSLOADER.getName());
+   
+   public String name;
+   
+   public Set<DependencyItem> iDependOn = new HashSet<DependencyItem>();
+
+   public TestDependencyMetaData(String name)
+   {
+      this.name = name;
+   }
+   
+   public DependencyItem addDependencyItem(Object iDependOn)
+   {
+      return addDependencyItem(iDependOn, null);
+   }
+   
+   public DependencyItem addDependencyItem(Object iDependOn, DeploymentStage whenRequired)
+   {
+      return addDependencyItem(iDependOn, whenRequired, null);
+   }
+
+   public DependencyItem addDependencyItem(Object iDependOn, DeploymentStage whenRequired, DeploymentStage dependentState)
+   {
+      ControllerState whenState = CLASSLOADER;
+      if (whenRequired != null)
+         whenState = new ControllerState(whenRequired.getName());
+      ControllerState depState = ControllerState.INSTALLED;
+      if (dependentState != null)
+         depState = new ControllerState(dependentState.getName()); 
+      DependencyItem item = new AbstractDependencyItem(name, iDependOn, whenState, depState);
+      this.iDependOn.add(item);
+      return item;
+   }
+}

Added: projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDescribeDeployer.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDescribeDeployer.java	                        (rev 0)
+++ projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestDescribeDeployer.java	2007-07-31 11:54:05 UTC (rev 64368)
@@ -0,0 +1,71 @@
+/*
+* 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.deployers.deployer.support;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ * TestDescribeDeployer.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class TestDescribeDeployer extends AbstractRealDeployer
+{
+   public List<String> deployed = new ArrayList<String>();
+   public List<String> undeployed = new ArrayList<String>();
+   
+   public TestDescribeDeployer()
+   {
+      setStage(DeploymentStages.DESCRIBE);
+   }
+   
+   public void deploy(DeploymentUnit unit) throws DeploymentException
+   {
+      deployed.add(unit.getName());
+      TestDependencyMetaData dependencies = unit.getAttachment(TestDependencyMetaData.class);
+      if (dependencies != null)
+      {
+         for (DependencyItem item : dependencies.iDependOn)
+            unit.addIDependOn(item);
+      }
+   }
+   
+   @Override
+   public void undeploy(DeploymentUnit unit)
+   {
+      undeployed.add(unit.getName());
+      TestDependencyMetaData dependencies = unit.getAttachment(TestDependencyMetaData.class);
+      if (dependencies != null)
+      {
+         for (DependencyItem item : dependencies.iDependOn)
+            unit.removeIDependOn(item);
+      }
+   }
+}

Added: projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestSimpleDeployer3.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestSimpleDeployer3.java	                        (rev 0)
+++ projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/support/TestSimpleDeployer3.java	2007-07-31 11:54:05 UTC (rev 64368)
@@ -0,0 +1,82 @@
+/*
+* 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.deployers.deployer.support;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.deployers.spi.DeploymentException;
+import org.jboss.deployers.spi.deployer.DeploymentStage;
+import org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ * TestSimpleDeployer3.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class TestSimpleDeployer3 extends AbstractRealDeployer
+{
+   public List<String> deployed = new ArrayList<String>();
+   public List<String> undeployed = new ArrayList<String>();
+   
+   public TestSimpleDeployer3(DeploymentStage stage)
+   {
+      setStage(stage);
+   }
+   
+   public List<String> getDeployedUnits()
+   {
+      return deployed;
+   }
+   
+   public List<String> getUndeployedUnits()
+   {
+      return undeployed;
+   }
+   
+   public String toString()
+   {
+      return "TestSimpleDeployer3(" + getStage() + ")";
+   }
+   
+   public void clear()
+   {
+      deployed.clear();
+      undeployed.clear();
+   }
+
+   public void deploy(DeploymentUnit unit) throws DeploymentException
+   {
+      log.debug(this + " deploy  : " + unit.getName());
+      deployed.add(unit.getName());
+      if (this.equals(unit.getAttachment("fail")))
+         throw new RuntimeException("Asked to fail");
+   }
+
+   public void undeploy(DeploymentUnit unit)
+   {
+      log.debug(this + " undeploy: " + unit.getName());
+      undeployed.add(unit.getName());
+   }
+}

Added: projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/test/DeployerDependencyUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/test/DeployerDependencyUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/deployers-impl/src/tests/org/jboss/test/deployers/deployer/test/DeployerDependencyUnitTestCase.java	2007-07-31 11:54:05 UTC (rev 64368)
@@ -0,0 +1,583 @@
+/*
+* 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.deployers.deployer.test;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import org.jboss.deployers.client.spi.DeployerClient;
+import org.jboss.deployers.client.spi.Deployment;
+import org.jboss.deployers.client.spi.DeploymentFactory;
+import org.jboss.deployers.spi.attachments.MutableAttachments;
+import org.jboss.deployers.spi.attachments.PredeterminedManagedObjectAttachments;
+import org.jboss.deployers.spi.deployer.Deployer;
+import org.jboss.deployers.spi.deployer.DeploymentStages;
+import org.jboss.deployers.spi.structure.ContextInfo;
+import org.jboss.test.deployers.AbstractDeployerTest;
+import org.jboss.test.deployers.deployer.support.TestDependencyMetaData;
+import org.jboss.test.deployers.deployer.support.TestDescribeDeployer;
+import org.jboss.test.deployers.deployer.support.TestSimpleDeployer3;
+
+/**
+ * DeployerDependencyUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class DeployerDependencyUnitTestCase extends AbstractDeployerTest
+{
+   private static final DeploymentFactory factory = new DeploymentFactory();
+   
+   private TestDescribeDeployer deployer1 = new TestDescribeDeployer();
+   private TestSimpleDeployer3 deployer2 = new TestSimpleDeployer3(DeploymentStages.CLASSLOADER);
+   private TestSimpleDeployer3 deployer3 = new TestSimpleDeployer3(DeploymentStages.INSTALLED);
+
+   public static List<String> NONE = Collections.emptyList();
+   public static List<String> A = makeList("A");
+   public static List<String> B = makeList("B");
+   public static List<String> AB = makeList("A", "B");
+   public static List<String> BA = makeList("B", "A");
+   public static List<String> ABA = makeList("A", "B", "A");
+   public static List<String> ABB = makeList("A", "B", "B");
+   public static List<String> BAA = makeList("B", "A", "A");
+   public static List<String> BABA = makeList("B", "A", "B", "A");
+   public static List<String> AC = makeList("A", "A/C");
+   public static List<String> ACB = makeList("A", "A/C", "B");
+   public static List<String> BAC = makeList("B", "A", "A/C");
+   public static List<String> CAB = makeList("A/C", "A", "B");
+   public static List<String> BCA = makeList("B", "A/C", "A");
+   
+   @SuppressWarnings("unchecked")
+   private static <T> List<T> makeList(T... objects)
+   {
+      List<T> result = new ArrayList<T>();
+      for (T object : objects)
+         result.add(object);
+      return result;
+   }
+   
+   public static Test suite()
+   {
+      return new TestSuite(DeployerDependencyUnitTestCase.class);
+   }
+   
+   public DeployerDependencyUnitTestCase(String name)
+   {
+      super(name);
+   }
+
+   public void testADependsOnBAtClassLoaderCorrectOrder() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(BA, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtClassLoaderWrongOrder() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      main.process();
+
+      assertEquals(A, deployer1.deployed);
+      assertEquals(NONE, deployer2.deployed);
+      assertEquals(NONE, deployer3.deployed);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(BA, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtClassLoaderUndeployANoB() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      main.process();
+
+      assertEquals(A, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(NONE, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(NONE, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(a);
+      main.process();
+
+      assertEquals(A, deployer1.deployed);
+      assertEquals(A, deployer1.undeployed);
+      assertEquals(NONE, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(NONE, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtClassLoaderUndeployB() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(BA, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(b);
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(BA, deployer2.deployed);
+      assertEquals(AB, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(AB, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtClassLoaderRedeployB() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(BA, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(b);
+      main.process();
+      
+      main.addDeployment(b);
+      main.process();
+
+      assertEquals(ABB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(BABA, deployer2.deployed);
+      assertEquals(AB, deployer2.undeployed);
+      assertEquals(BABA, deployer3.deployed);
+      assertEquals(AB, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtClassLoaderRedeployA() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(BA, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(a);
+      main.process();
+      
+      main.addDeployment(a);
+      main.process();
+
+      assertEquals(ABA, deployer1.deployed);
+      assertEquals(A, deployer1.undeployed);
+      assertEquals(BAA, deployer2.deployed);
+      assertEquals(A, deployer2.undeployed);
+      assertEquals(BAA, deployer3.deployed);
+      assertEquals(A, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtClassLoaderWhichFailsInInstall() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      makeFail(b, deployer3);
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(B, deployer2.deployed);
+      assertEquals(B, deployer2.undeployed);
+      assertEquals(B, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallCorrectOrder() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallWrongOrder() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      main.process();
+
+      assertEquals(A, deployer1.deployed);
+      assertEquals(A, deployer2.deployed);
+      assertEquals(NONE, deployer3.deployed);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallUndeployANoB() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      main.process();
+
+      assertEquals(A, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(A, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(NONE, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(a);
+      main.process();
+
+      assertEquals(A, deployer1.deployed);
+      assertEquals(A, deployer1.undeployed);
+      assertEquals(A, deployer2.deployed);
+      assertEquals(A, deployer2.undeployed);
+      assertEquals(NONE, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallUndeployB() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(b);
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(B, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(AB, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallRedeployB() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(b);
+      main.process();
+      
+      main.addDeployment(b);
+      main.process();
+
+      assertEquals(ABB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(ABB, deployer2.deployed);
+      assertEquals(B, deployer2.undeployed);
+      assertEquals(BABA, deployer3.deployed);
+      assertEquals(AB, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallRedeployA() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BA, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+      
+      main.removeDeployment(a);
+      main.process();
+      
+      main.addDeployment(a);
+      main.process();
+
+      assertEquals(ABA, deployer1.deployed);
+      assertEquals(A, deployer1.undeployed);
+      assertEquals(ABA, deployer2.deployed);
+      assertEquals(A, deployer2.undeployed);
+      assertEquals(BAA, deployer3.deployed);
+      assertEquals(A, deployer3.undeployed);
+   }
+
+   public void testADependsOnBAtInstallWhichFailsInInstall() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      TestDependencyMetaData depA = new TestDependencyMetaData("A");
+      depA.addDependencyItem("B", DeploymentStages.INSTALLED);
+      addMetaData(a, depA);
+      main.addDeployment(a);
+
+      Deployment b = createSimpleDeployment("B");
+      makeFail(b, deployer3);
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(AB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(AB, deployer2.deployed);
+      assertEquals(B, deployer2.undeployed);
+      assertEquals(B, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+   }
+
+   public void testChildOfADependsOnBAtClassLoaderWrongOrder() throws Exception
+   {
+      DeployerClient main = getMainDeployer();
+      
+      Deployment a = createSimpleDeployment("A");
+      ContextInfo c = factory.addContext(a, "C");
+      TestDependencyMetaData depC = new TestDependencyMetaData("A");
+      depC.addDependencyItem("B", DeploymentStages.CLASSLOADER);
+      addMetaData(c, depC);
+      main.addDeployment(a);
+
+      main.process();
+
+      assertEquals(AC, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(NONE, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(NONE, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+
+      Deployment b = createSimpleDeployment("B");
+      main.addDeployment(b);
+
+      main.process();
+
+      assertEquals(ACB, deployer1.deployed);
+      assertEquals(NONE, deployer1.undeployed);
+      assertEquals(BAC, deployer2.deployed);
+      assertEquals(NONE, deployer2.undeployed);
+      assertEquals(BAC, deployer3.deployed);
+      assertEquals(NONE, deployer3.undeployed);
+
+      main.removeDeployment(b);
+      main.process();
+      
+      assertEquals(ACB, deployer1.deployed);
+      assertEquals(B, deployer1.undeployed);
+      assertEquals(BAC, deployer2.deployed);
+      assertEquals(CAB, deployer2.undeployed);
+      assertEquals(BAC, deployer3.deployed);
+      assertEquals(CAB, deployer3.undeployed);
+
+      main.removeDeployment(a);
+      main.process();
+      
+      assertEquals(ACB, deployer1.deployed);
+      assertEquals(BCA, deployer1.undeployed);
+      assertEquals(BAC, deployer2.deployed);
+      assertEquals(CAB, deployer2.undeployed);
+      assertEquals(BAC, deployer3.deployed);
+      assertEquals(CAB, deployer3.undeployed);
+   }
+
+   protected static void addMetaData(PredeterminedManagedObjectAttachments attachments, TestDependencyMetaData md)
+   {
+      MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects();
+      mutable.addAttachment(TestDependencyMetaData.class, md);
+   }
+   
+   protected static void makeFail(PredeterminedManagedObjectAttachments attachments, Deployer deployer)
+   {
+      MutableAttachments mutable = (MutableAttachments) attachments.getPredeterminedManagedObjects();
+      mutable.addAttachment("fail", deployer);
+   }
+   
+   protected DeployerClient getMainDeployer()
+   {
+      return createMainDeployer(deployer1, deployer2, deployer3);
+   }
+}




More information about the jboss-cvs-commits mailing list