Package org.jboss.test.deployers.deployer.test

Source Code of org.jboss.test.deployers.deployer.test.AbstractDeployerFlowUnitTest

/*
* JBoss, Home of Professional Open Source
* Copyright (c) 2009, 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.LinkedList;
import java.util.List;

import org.jboss.deployers.client.spi.DeployerClient;
import org.jboss.deployers.client.spi.Deployment;
import org.jboss.deployers.plugins.deployers.DeployersImpl;
import org.jboss.deployers.spi.deployer.Deployers;
import org.jboss.deployers.spi.deployer.DeploymentStages;
import org.jboss.deployers.spi.deployer.helpers.AbstractDeployer;
import org.jboss.test.deployers.AbstractDeployerTest;
import org.jboss.test.deployers.deployer.support.TestDeployerAdapter;
import org.jboss.test.deployers.deployer.support.TestFlowDeployer;

/**
* DeployerOrderingUnitTestCase.
*
* @author <a href="adrian@jboss.com">Adrian Brock</a>
* @author <a href="mailto:ales.justin@jboss.org">Ales Justin</a>
* @author <a href="mailto:ropalka@redhat.com">Richard Opalka</a>
* @author <a href="cdewolf@redhat.com">Carlo de Wolf</a>
* @version $Revision: 1.1 $
*/
public abstract class AbstractDeployerFlowUnitTest extends AbstractDeployerTest
{
   public AbstractDeployerFlowUnitTest(String name)
   {
      super(name);
   }

   protected void setUp() throws Exception
   {
      super.setUp();
      TestFlowDeployer.reset();
   }

   @Override
   protected Deployers createDeployers()
   {
      Deployers deployers = super.createDeployers();
      DeployersImpl impl = assertInstanceOf(deployers, DeployersImpl.class, false);
      applySortingChanges(impl);
      return impl;
   }

   protected abstract void applySortingChanges(DeployersImpl deployers);

   public void testSimpleInputOutputCorrectOrder() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test");
      addDeployer(main, deployer1);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test");
      addDeployer(main, deployer2);

      Deployment deployment = createSimpleDeployment("correctOrder");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(3, deployer2.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(5, deployer1.getDeployOrder());
      assertEquals(6, deployer2.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(3, deployer2.getUndeployOrder());
   }

   public void testSimpleInputOutputWrongOrder() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test");
      addDeployer(main, deployer1);

      Deployment deployment = createSimpleDeployment("wrongOrder");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(3, deployer2.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(5, deployer1.getDeployOrder());
      assertEquals(6, deployer2.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(3, deployer2.getUndeployOrder());
   }

   public void testInputOutputLoop() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setInputs("A");
      deployer1.setOutputs("B");
      addDeployer(main, deployer1);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("B");
      deployer2.setOutputs("C");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setInputs("C");
      deployer3.setOutputs("A");
      try
      {
         addDeployer(main, deployer3);
         fail("Should not be here!");
      }
      catch (Throwable t)
      {
         checkThrowable(IllegalStateException.class, t);
      }
   }

   public void testInputOutputTransient() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test");
      addDeployer(main, deployer1);
      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setInputs("test");
      addDeployer(main, deployer3);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test");
      deployer2.setOutputs("test");
      addDeployer(main, deployer2);

      Deployment deployment = createSimpleDeployment("transient");
      main.addDeployment(deployment);
      main.process();

      // B can appear at any position
      // BCA, CBA, CAB
      assertDeployBefore(deployer2, deployer1);
      assertTrue("C doesn't deploy", deployer1.getDeployOrder() > 0);
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(6, deployer1.getUndeployOrder());
      assertEquals(5, deployer2.getUndeployOrder());
      assertEquals(4, deployer3.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(7, deployer1.getDeployOrder());
      assertEquals(8, deployer2.getDeployOrder());
      assertEquals(9, deployer3.getDeployOrder());
      assertEquals(6, deployer1.getUndeployOrder());
      assertEquals(5, deployer2.getUndeployOrder());
      assertEquals(4, deployer3.getUndeployOrder());
   }

   public void testInputOutputTransient2() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setInputs("test");
      deployer1.setOutputs("test");
      addDeployer(main, deployer1);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test");
      addDeployer(main, deployer2);

      Deployment deployment = createSimpleDeployment("transient2");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(3, deployer2.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(5, deployer1.getDeployOrder());
      assertEquals(6, deployer2.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(3, deployer2.getUndeployOrder());
   }

   public void testInputOutputMultipleTransient() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer4 = new TestFlowDeployer("4");
      deployer4.setInputs("test");
      addDeployer(main, deployer4);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test");
      deployer2.setOutputs("test");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setInputs("test");
      deployer3.setOutputs("test");
      addDeployer(main, deployer3);
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test");
      addDeployer(main, deployer1);

      Deployment deployment = createSimpleDeployment("transient");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(9, deployer1.getDeployOrder());
      assertEquals(10, deployer2.getDeployOrder());
      assertEquals(11, deployer3.getDeployOrder());
      assertEquals(12, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());
   }

   public void testMultipleOutput() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test1", "test2");
      addDeployer(main, deployer1);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test1");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setInputs("test2");
      addDeployer(main, deployer3);

      Deployment deployment = createSimpleDeployment("MultipleOutput");
      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer2, deployer1);
      assertDeployBefore(deployer3, deployer1);
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertDeployBefore(deployer2, deployer1);
      assertDeployBefore(deployer3, deployer1);
      assertUndeployAfter(deployer2, deployer1);
      assertUndeployAfter(deployer3, deployer1);

      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer2, deployer1);
      assertDeployBefore(deployer3, deployer1);
      assertUndeployAfter(deployer2, deployer1);
      assertUndeployAfter(deployer3, deployer1);
   }

   public void testMultipleInput() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer3 = new TestFlowDeployer("in12");
      deployer3.setInputs("test1", "test2");
      addDeployer(main, deployer3);
      TestFlowDeployer deployer1 = new TestFlowDeployer("out1");
      deployer1.setOutputs("test1");
      addDeployer(main, deployer1);
      TestFlowDeployer deployer2 = new TestFlowDeployer("out2");
      deployer2.setOutputs("test2");
      addDeployer(main, deployer2);

      Deployment deployment = createSimpleDeployment("MultipleInput");
      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer3, deployer1);
      assertDeployBefore(deployer3, deployer2);
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertDeployBefore(deployer3, deployer1);
      assertDeployBefore(deployer3, deployer2);
      assertEquals(3, deployer3.getDeployOrder());
      assertUndeployAfter(deployer3, deployer1);
      assertUndeployAfter(deployer3, deployer2);
      assertEquals(4, deployer3.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer3, deployer1);
      assertDeployBefore(deployer3, deployer2);
      assertEquals(9, deployer3.getDeployOrder());
      assertUndeployAfter(deployer3, deployer1);
      assertUndeployAfter(deployer3, deployer2);
      assertEquals(4, deployer3.getUndeployOrder());
   }

   public void testChain() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setInputs("test2");
      addDeployer(main, deployer3);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setInputs("test1");
      deployer2.setOutputs("test2");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test1");
      addDeployer(main, deployer1);

      Deployment deployment = createSimpleDeployment("Chain");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(6, deployer1.getUndeployOrder());
      assertEquals(5, deployer2.getUndeployOrder());
      assertEquals(4, deployer3.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(7, deployer1.getDeployOrder());
      assertEquals(8, deployer2.getDeployOrder());
      assertEquals(9, deployer3.getDeployOrder());
      assertEquals(6, deployer1.getUndeployOrder());
      assertEquals(5, deployer2.getUndeployOrder());
      assertEquals(4, deployer3.getUndeployOrder());
   }

   public void testComplicated() throws Exception
   {
      // (1) (2) (3)
      //  \   /   |
      //    T1    T2
      //    |     |
      //         (4)
      //          |
      //          T3
      //          |
      //         (5)
      //    |     |
      //    T1    T3
      //      \   /
      //       (6)
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer6 = new TestFlowDeployer("6");
      deployer6.setInputs("test1", "test3");
      addDeployer(main, deployer6);
      TestFlowDeployer deployer5 = new TestFlowDeployer("5");
      deployer5.setInputs("test3");
      deployer5.setOutputs("test3");
      addDeployer(main, deployer5);
      TestFlowDeployer deployer4 = new TestFlowDeployer("4");
      deployer4.setInputs("test2");
      deployer4.setOutputs("test3");
      addDeployer(main, deployer4);
      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setOutputs("test2");
      addDeployer(main, deployer3);
      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setOutputs("test1");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setOutputs("test1");
      addDeployer(main, deployer1);

      Deployment deployment = createSimpleDeployment("Complicated");
      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer6, deployer1);
      assertDeployBefore(deployer6, deployer2);
      assertDeployBefore(deployer4, deployer3);
      assertDeployBefore(deployer5, deployer4);
      assertDeployBefore(deployer6, deployer5);
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());
      assertEquals(-1, deployer5.getUndeployOrder());
      assertEquals(-1, deployer6.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertDeployBefore(deployer6, deployer1);
      assertDeployBefore(deployer6, deployer2);
      assertDeployBefore(deployer4, deployer3);
      assertDeployBefore(deployer5, deployer4);
      assertDeployBefore(deployer6, deployer5);
      assertUndeployAfter(deployer6, deployer1);
      assertUndeployAfter(deployer6, deployer2);
      assertUndeployAfter(deployer4, deployer3);
      assertUndeployAfter(deployer5, deployer4);
      assertUndeployAfter(deployer6, deployer5);

      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer6, deployer1);
      assertDeployBefore(deployer6, deployer2);
      assertDeployBefore(deployer4, deployer3);
      assertDeployBefore(deployer5, deployer4);
      assertDeployBefore(deployer6, deployer5);
      assertUndeployAfter(deployer6, deployer1);
      assertUndeployAfter(deployer6, deployer2);
      assertUndeployAfter(deployer4, deployer3);
      assertUndeployAfter(deployer5, deployer4);
      assertUndeployAfter(deployer6, deployer5);
   }

   public void testIntermediateIsRelativelySorted() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer2 = new TestFlowDeployer("A");
      deployer2.setInputs("test1");
      addDeployer(main, deployer2);
      TestFlowDeployer deployer3 = new TestFlowDeployer("B");
      addDeployer(main, deployer3);
      TestFlowDeployer deployer1 = new TestFlowDeployer("C");
      deployer1.setOutputs("test1");
      addDeployer(main, deployer1);

      Deployment deployment = createSimpleDeployment("IntermediateIsRelativelySorted");
      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer2, deployer1);
      assertTrue("B doesn't deploy", deployer3.getDeployOrder() > 0);
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertDeployBefore(deployer2, deployer1);
      assertTrue("B doesn't deploy", deployer3.getDeployOrder() > 0);
      assertUndeployAfter(deployer2, deployer1);
      assertTrue("B doesn't undeploy", deployer3.getUndeployOrder() > 0);

      main.addDeployment(deployment);
      main.process();

      assertDeployBefore(deployer2, deployer1);
      assertTrue("B doesn't deploy", deployer3.getDeployOrder() > 0);
      assertUndeployAfter(deployer2, deployer1);
      assertTrue("B doesn't undeploy", deployer3.getUndeployOrder() > 0);
   }

   public void testTransitionOrdering() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("A");
      deployer1.setInputs("3");
      deployer1.setOutputs("4");
      addDeployer(main, deployer1);

      TestFlowDeployer deployer2 = new TestFlowDeployer("B");
      deployer2.setInputs("1");
      deployer2.setOutputs("2");
      addDeployer(main, deployer2);

      TestFlowDeployer deployer3 = new TestFlowDeployer("C");
      deployer3.setInputs("2");
      deployer3.setOutputs("3");
      addDeployer(main, deployer3);

      Deployment deployment = createSimpleDeployment("TransitionOrdering");
      main.addDeployment(deployment);
      main.process();

      assertEquals(3, deployer1.getDeployOrder());
      assertEquals(1, deployer2.getDeployOrder());
      assertEquals(2, deployer3.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(3, deployer1.getDeployOrder());
      assertEquals(1, deployer2.getDeployOrder());
      assertEquals(2, deployer3.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(6, deployer2.getUndeployOrder());
      assertEquals(5, deployer3.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(9, deployer1.getDeployOrder());
      assertEquals(7, deployer2.getDeployOrder());
      assertEquals(8, deployer3.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(6, deployer2.getUndeployOrder());
      assertEquals(5, deployer3.getUndeployOrder());
   }

   public void testSymetricDots() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer1 = new TestFlowDeployer("XB");
      deployer1.setInputs("X");
      deployer1.setOutputs("B");
      addDeployer(main, deployer1);

      TestFlowDeployer deployer2 = new TestFlowDeployer("XX");
      deployer2.setInputs("X");
      deployer2.setOutputs("X");
      addDeployer(main, deployer2);

      TestFlowDeployer deployer3 = new TestFlowDeployer("AX");
      deployer3.setInputs("A");
      deployer3.setOutputs("X");
      addDeployer(main, deployer3);

      Deployment deployment = createSimpleDeployment("SymetricDots");
      main.addDeployment(deployment);
      main.process();

      assertEquals(3, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(1, deployer3.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(3, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(1, deployer3.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(5, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(9, deployer1.getDeployOrder());
      assertEquals(8, deployer2.getDeployOrder());
      assertEquals(7, deployer3.getDeployOrder());
      assertEquals(4, deployer1.getUndeployOrder());
      assertEquals(5, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
   }

   public void testDoubleCycle() throws Exception
   {
      // (D) (H) (B) (E) (G)
      //  |   |
      //  T1 2nd
      //  |   |
      // (F) (C)
      //  |
      //  T2
      //  |
      // (A)
      DeployerClient main = createMainDeployer();

      TestFlowDeployer deployer2 = new TestFlowDeployer("A");
      deployer2.setInputs("test2");
      addDeployer(main, deployer2);

      TestFlowDeployer deployer3 = new TestFlowDeployer("B");
      addDeployer(main, deployer3);

      TestFlowDeployer deployer6 = new TestFlowDeployer("C");
      deployer6.setInputs("2ndcycle");
      addDeployer(main, deployer6);

      TestFlowDeployer deployer1 = new TestFlowDeployer("D");
      deployer1.setOutputs("test1");
      addDeployer(main, deployer1);

      TestFlowDeployer deployer4 = new TestFlowDeployer("E");
      addDeployer(main, deployer4);

      TestFlowDeployer deployer5 = new TestFlowDeployer("F");
      deployer5.setInputs("test1");
      deployer5.setOutputs("test2");
      addDeployer(main, deployer5);

      TestFlowDeployer deployer7 = new TestFlowDeployer("G");
      addDeployer(main, deployer7);

      TestFlowDeployer deployer8 = new TestFlowDeployer("H");
      deployer8.setOutputs("2ndcycle");
      addDeployer(main, deployer8);

      Deployment deployment = createSimpleDeployment("DoubleCycle");
      main.addDeployment(deployment);
      main.process();

      assertDeploy(deployer3);
      assertDeployBefore(deployer6, deployer8);
      assertDeployBefore(deployer5, deployer1);
      assertDeploy(deployer4);
      assertDeployBefore(deployer2, deployer5);
      assertDeploy(deployer7);
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer8.getUndeployOrder());
      assertEquals(-1, deployer6.getUndeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());
      assertEquals(-1, deployer5.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer7.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertDeploy(deployer3);
      assertDeployBefore(deployer6, deployer8);
      assertDeployBefore(deployer5, deployer1);
      assertDeploy(deployer4);
      assertDeployBefore(deployer2, deployer5);
      assertDeploy(deployer7);
      assertUndeploy(deployer3);
      assertUndeployAfter(deployer6, deployer8);
      assertUndeployAfter(deployer5, deployer1);
      assertUndeploy(deployer4);
      assertUndeployAfter(deployer2, deployer5);
      assertUndeploy(deployer7);

      main.addDeployment(deployment);
      main.process();

      assertDeploy(deployer3);
      assertDeployBefore(deployer6, deployer8);
      assertDeployBefore(deployer5, deployer1);
      assertDeploy(deployer4);
      assertDeployBefore(deployer2, deployer5);
      assertDeploy(deployer7);
      assertUndeploy(deployer3);
      assertUndeployAfter(deployer6, deployer8);
      assertUndeployAfter(deployer5, deployer1);
      assertUndeploy(deployer4);
      assertUndeployAfter(deployer2, deployer5);
      assertUndeploy(deployer7);
   }

   public void testOrderedThenFlowWithPassThrough() throws Exception
   {
      DeployerClient main = createMainDeployer();

      TestFlowDeployer deployer4 = new TestFlowDeployer("4");
      deployer4.setInputs("test");
      addDeployer(main, deployer4);

      TestFlowDeployer deployer3 = new TestFlowDeployer("3");
      deployer3.setRelativeOrder(3);
      deployer3.setInputs("test");
      deployer3.setOutputs("test");
      addDeployer(main, deployer3);

      TestFlowDeployer deployer2 = new TestFlowDeployer("2");
      deployer2.setRelativeOrder(2);
      addDeployer(main, deployer2);

      TestFlowDeployer deployer1 = new TestFlowDeployer("1");
      deployer1.setRelativeOrder(1);
      addDeployer(main, deployer1);

      Deployment deployment = createSimpleDeployment("orderedThenFlowWithPassThrough");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(9, deployer1.getDeployOrder());
      assertEquals(10, deployer2.getDeployOrder());
      assertEquals(11, deployer3.getDeployOrder());
      assertEquals(12, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());
   }

   public void testSimplePassThrough() throws Exception
   {
      DeployerClient main = createMainDeployer();

      TestFlowDeployer postJBWMD = new TestFlowDeployer("PassThrough");
      postJBWMD.setInputs("JBWMD", "CLMD");
      postJBWMD.setOutputs("JBWMD", "CLMD");
      addDeployer(main, postJBWMD);
   }

   public void testWebBeansOrder() throws Exception
   {
      DeployerClient main = createMainDeployer();

      TestFlowDeployer mcfcld = new TestFlowDeployer("ManagedConnectionFactory");
      mcfcld.setInputs("ManagedConnectionFactoryDeploymentGroup");
      mcfcld.setOutputs("CLMD");
      addDeployer(main, mcfcld);

      TestFlowDeployer postJBWMD = new TestFlowDeployer("PostJBossWebMetadataDeployer");
      postJBWMD.setInputs("JBWMD", "CLMD");
      postJBWMD.setOutputs("JBWMD", "CLMD");
      addDeployer(main, postJBWMD);

      TestFlowDeployer postEJB = new TestFlowDeployer("PostEjbJar");
      postEJB.setInputs("EJB");
      postEJB.setOutputs("EJB");
      addDeployer(main, postEJB);

      TestFlowDeployer warCL = new TestFlowDeployer("WarClassLoaderDeployer");
      warCL.setInputs("JBWMD", "CLMD");
      warCL.setOutputs("CLMD");
      addDeployer(main, warCL);

      TestFlowDeployer service = new TestFlowDeployer("ServiceCL");
      service.setInputs("ServiceDeployment");
      service.setOutputs("CLMD");
      addDeployer(main, service);

      TestFlowDeployer legacy = new TestFlowDeployer("Legacy");
      legacy.setInputs("JBWMD", "WMD");
      legacy.setOutputs("JBWMD");
      addDeployer(main, legacy);

      TestFlowDeployer cluster = new TestFlowDeployer("Cluster");
      cluster.setInputs("JBWMD");
      cluster.setOutputs("JBWMD");
      addDeployer(main, cluster);

      TestFlowDeployer postWMD = new TestFlowDeployer("PostWebMetadataDeployer");
      postWMD.setInputs("JBWMD");
      postWMD.setOutputs("JBWMD");
      addDeployer(main, postWMD);
   }

   public void testWebServicesDeployersOrder() throws Exception
   {
      DeployerClient main = createMainDeployer();

      TestFlowDeployer deployer1 = new TestFlowDeployer("FakeDeployer");
      deployer1.setOutputs("WebServicesMetaData", "WebServiceDeployment", "JBossWebMetaData" );
      addDeployer(main, deployer1);

      TestFlowDeployer deployer2 = new TestFlowDeployer("WebServicesDeploymentTypeDeployer");
      deployer2.setInputs("WebServicesMetaData", "WebServiceDeployment", "JBossWebMetaData" );
      deployer2.setOutputs("DeploymentType", "JBossWebMetaData");
      addDeployer(main, deployer2);

      TestFlowDeployer deployer4 = new TestFlowDeployer("WebServiceDeployerPreJSE");
      deployer4.setInputs("JBossWebMetaData", "DeploymentType");
      deployer4.setOutputs("JBossWebMetaData");
      addDeployer(main, deployer4);

      TestFlowDeployer deployer5 = new TestFlowDeployer("AbstractWarDeployer");
      deployer5.setInputs("JBossWebMetaData");
      deployer5.setOutputs("WarDeployment");
      addDeployer(main, deployer5);

      TestFlowDeployer deployer6 = new TestFlowDeployer("ServiceCL");
      deployer6.setInputs("DeploymentType", "WarDeployment");
      addDeployer(main, deployer6);

      // #2 duplicate
      TestFlowDeployer deployer3 = new TestFlowDeployer("WebServicesDeploymentTypeDeployer2");
      deployer3.setInputs("WebServicesMetaData", "WebServiceDeployment", "JBossWebMetaData" );
      deployer3.setOutputs("DeploymentType", "JBossWebMetaData");
      addDeployer(main, deployer3);

      // #4 duplicate
      TestFlowDeployer deployer7 = new TestFlowDeployer("WebServiceDeployerEJB");
      deployer7.setInputs("JBossWebMetaData", "DeploymentType");
      deployer7.setOutputs("JBossWebMetaData");
      addDeployer(main, deployer7);

      Deployment deployment = createSimpleDeployment("testWSDeploymentOrder");
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
//      assertEquals(4, deployer7.getDeployOrder());
      assertDeployBefore(deployer2, deployer1);
      assertDeployBefore(deployer3, deployer1);
      assertDeployBefore(deployer7, deployer2);
      assertDeployBefore(deployer7, deployer3);
      assertDeployBefore(deployer4, deployer2);
      assertDeployBefore(deployer4, deployer3);
      assertDeployBefore(deployer5, deployer4);
      assertDeployBefore(deployer5, deployer7);
      assertDeployBefore(deployer6, deployer5);
      assertDeployBefore(deployer6, deployer2);
      assertDeployBefore(deployer6, deployer3);
//      assertEquals(5, deployer4.getDeployOrder());
//      assertEquals(6, deployer5.getDeployOrder());
//      assertEquals(7, deployer6.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());
      assertEquals(-1, deployer5.getUndeployOrder());
      assertEquals(-1, deployer6.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
//      assertEquals(4, deployer7.getDeployOrder());
      assertDeployBefore(deployer2, deployer1);
      assertDeployBefore(deployer3, deployer1);
      assertDeployBefore(deployer7, deployer2);
      assertDeployBefore(deployer7, deployer3);
      assertDeployBefore(deployer4, deployer2);
      assertDeployBefore(deployer4, deployer3);
      assertDeployBefore(deployer5, deployer4);
      assertDeployBefore(deployer5, deployer7);
      assertDeployBefore(deployer6, deployer5);
      assertDeployBefore(deployer6, deployer2);
      assertDeployBefore(deployer6, deployer3);
//      assertEquals(5, deployer4.getDeployOrder());
//      assertEquals(6, deployer5.getDeployOrder());
//      assertEquals(7, deployer6.getDeployOrder());
      assertEquals(14, deployer1.getUndeployOrder());
      assertEquals(13, deployer2.getUndeployOrder());
      assertEquals(12, deployer3.getUndeployOrder());
//      assertEquals(11, deployer7.getUndeployOrder());
//      assertEquals(10, deployer4.getUndeployOrder());
//      assertEquals(9, deployer5.getUndeployOrder());
//      assertEquals(8, deployer6.getUndeployOrder());
      assertUndeployAfter(deployer2, deployer1);
      assertUndeployAfter(deployer3, deployer1);
      assertUndeployAfter(deployer7, deployer2);
      assertUndeployAfter(deployer7, deployer3);
      assertUndeployAfter(deployer4, deployer2);
      assertUndeployAfter(deployer4, deployer3);
      assertUndeployAfter(deployer5, deployer4);
      assertUndeployAfter(deployer5, deployer7);
      assertUndeployAfter(deployer6, deployer5);
      assertUndeployAfter(deployer6, deployer2);
      assertUndeployAfter(deployer6, deployer3);

      main.addDeployment(deployment);
      main.process();

      assertEquals(15, deployer1.getDeployOrder());
      assertEquals(16, deployer2.getDeployOrder());
      assertEquals(17, deployer3.getDeployOrder());
//      assertEquals(18, deployer7.getDeployOrder());
      assertDeployBefore(deployer2, deployer1);
      assertDeployBefore(deployer3, deployer1);
      assertDeployBefore(deployer7, deployer2);
      assertDeployBefore(deployer7, deployer3);
      assertDeployBefore(deployer4, deployer2);
      assertDeployBefore(deployer4, deployer3);
      assertDeployBefore(deployer5, deployer4);
      assertDeployBefore(deployer5, deployer7);
      assertDeployBefore(deployer6, deployer5);
      assertDeployBefore(deployer6, deployer2);
      assertDeployBefore(deployer6, deployer3);
//      assertEquals(19, deployer4.getDeployOrder());
//      assertEquals(20, deployer5.getDeployOrder());
//      assertEquals(21, deployer6.getDeployOrder());
      assertEquals(14, deployer1.getUndeployOrder());
      assertEquals(13, deployer2.getUndeployOrder());
      assertEquals(12, deployer3.getUndeployOrder());
//      assertEquals(11, deployer7.getUndeployOrder());
//      assertEquals(10, deployer4.getUndeployOrder());
//      assertEquals(9, deployer5.getUndeployOrder());
//      assertEquals(8, deployer6.getUndeployOrder());
      assertUndeployAfter(deployer2, deployer1);
      assertUndeployAfter(deployer3, deployer1);
      assertUndeployAfter(deployer7, deployer2);
      assertUndeployAfter(deployer7, deployer3);
      assertUndeployAfter(deployer4, deployer2);
      assertUndeployAfter(deployer4, deployer3);
      assertUndeployAfter(deployer5, deployer4);
      assertUndeployAfter(deployer5, deployer7);
      assertUndeployAfter(deployer6, deployer5);
      assertUndeployAfter(deployer6, deployer2);
      assertUndeployAfter(deployer6, deployer3);

      main.removeDeployment(deployment);
      main.process();
   }

   public void testDeployersOrder1() throws Exception
   {
      DeployerClient main = createMainDeployer();

      TestFlowDeployer deployer6 = new TestFlowDeployer( "6" );
      deployer6.setInputs( "a11", "a12", "a13", "a14", "a33" );
      addDeployer(main, deployer6);

      TestFlowDeployer deployer5 = new TestFlowDeployer( "5" );
      deployer5.setInputs( "a21", "a33", "a41" );
      deployer5.setOutputs( "a33", "a51", "a52" );
      addDeployer(main, deployer5);

      TestFlowDeployer deployer4 = new TestFlowDeployer( "4" );
      deployer4.setInputs( "a14", "a33" );
      deployer4.setOutputs( "a14", "a33", "a41" );
      addDeployer( main, deployer4 );

      TestFlowDeployer deployer3 = new TestFlowDeployer( "3" );
      deployer3.setInputs( "a13", "a21" );
      deployer3.setOutputs( "a32", "a33" );
      addDeployer( main, deployer3 );

      TestFlowDeployer deployer2 = new TestFlowDeployer( "2" );
      deployer2.setInputs( "a11", "a12" );
      deployer2.setOutputs( "a12", "a21", "a22" );
      addDeployer( main, deployer2 );

      TestFlowDeployer deployer1 = new TestFlowDeployer( "1" );
      deployer1.setOutputs( "a11", "a12", "a13", "a14" );
      addDeployer( main, deployer1 );

      Deployment deployment = createSimpleDeployment( "deployersOrderTest" );
      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(5, deployer5.getDeployOrder());
      assertEquals(6, deployer6.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());
      assertEquals(-1, deployer5.getUndeployOrder());
      assertEquals(-1, deployer6.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(5, deployer5.getDeployOrder());
      assertEquals(6, deployer6.getDeployOrder());
      assertEquals(12, deployer1.getUndeployOrder());
      assertEquals(11, deployer2.getUndeployOrder());
      assertEquals(10, deployer3.getUndeployOrder());
      assertEquals(9, deployer4.getUndeployOrder());
      assertEquals(8, deployer5.getUndeployOrder());
      assertEquals(7, deployer6.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(13, deployer1.getDeployOrder());
      assertEquals(14, deployer2.getDeployOrder());
      assertEquals(15, deployer3.getDeployOrder());
      assertEquals(16, deployer4.getDeployOrder());
      assertEquals(17, deployer5.getDeployOrder());
      assertEquals(18, deployer6.getDeployOrder());
      assertEquals(12, deployer1.getUndeployOrder());
      assertEquals(11, deployer2.getUndeployOrder());
      assertEquals(10, deployer3.getUndeployOrder());
      assertEquals(9, deployer4.getUndeployOrder());
      assertEquals(8, deployer5.getUndeployOrder());
      assertEquals(7, deployer6.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();
   }

   public void testRemovingOverlapping() throws Exception
   {
      DeployerClient main = createMainDeployer();

      // "1", "2", "3", "4" and "6" are provided by deployers in different stage
      TestFlowDeployer deployer1 = new TestFlowDeployer( "WSEJBAdapterDeployer" );
      deployer1.setInputs( "1", "2", "3", "4" );
      deployer1.setOutputs( "5" );
      addDeployer(main, deployer1);

      TestFlowDeployer deployer2 = new TestFlowDeployer( "WSTypeDeployer" );
      deployer2.setInputs( "5", "4", "6" ); // note 6 is both input and output
      deployer2.setOutputs( "6", "7" );
      addDeployer(main, deployer2);

      TestFlowDeployer deployer3 = new TestFlowDeployer( "WSDeploymentDeployer" );
      deployer3.setInputs( "6", "7" ); // note 6 is both input and output
      deployer3.setOutputs( "8", "6" );
      addDeployer( main, deployer3 );

      TestFlowDeployer deployer4 = new TestFlowDeployer( "WSDeploymentAspectDeployer" );
      deployer4.setInputs( "6", "7", "8" )// note 6 is both input and output
      deployer4.setOutputs( "9", "6", "0" );
      addDeployer( main, deployer4 );

      Deployment deployment = createSimpleDeployment( "deployersOrderTest" );

      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(9, deployer1.getDeployOrder());
      assertEquals(10, deployer2.getDeployOrder());
      assertEquals(11, deployer3.getDeployOrder());
      assertEquals(12, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();
   }

   public void testPartialOverlapping() throws Exception
   {
      DeployerClient main = createMainDeployer();

      // "1", "2", are provided by other preceding deployers
      TestFlowDeployer deployer1 = new TestFlowDeployer( "#1_12-2345" );
      deployer1.setInputs( "1", "2" );
      deployer1.setOutputs( "3", "5", "2", "4" );
      addDeployer(main, deployer1);

      TestFlowDeployer deployer2 = new TestFlowDeployer( "#2_125-246" );
      deployer2.setInputs( "1", "5", "2" ); // depends on 5 (output of deployer1)
      deployer2.setOutputs( "6", "2", "4" );
      addDeployer(main, deployer2);

      TestFlowDeployer deployer3 = new TestFlowDeployer( "#3_1256-247" );
      deployer3.setInputs( "6", "1", "5", "2" ); // depends on 6 (output of deployer2) and 5 (output of deployer1)
      deployer3.setOutputs( "7", "2", "4" );
      addDeployer( main, deployer3 );

      TestFlowDeployer deployer4 = new TestFlowDeployer( "#4_124-28" );
      deployer4.setInputs( "1", "2", "4" ); // depends on 4 (output of deployer1, deployer2 and deployer3)
      deployer4.setOutputs( "8", "2" );
      addDeployer( main, deployer4 );

      Deployment deployment = createSimpleDeployment( "deployersOrderTest" );

      main.addDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(-1, deployer1.getUndeployOrder());
      assertEquals(-1, deployer2.getUndeployOrder());
      assertEquals(-1, deployer3.getUndeployOrder());
      assertEquals(-1, deployer4.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();

      assertEquals(1, deployer1.getDeployOrder());
      assertEquals(2, deployer2.getDeployOrder());
      assertEquals(3, deployer3.getDeployOrder());
      assertEquals(4, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());

      main.addDeployment(deployment);
      main.process();

      assertEquals(9, deployer1.getDeployOrder());
      assertEquals(10, deployer2.getDeployOrder());
      assertEquals(11, deployer3.getDeployOrder());
      assertEquals(12, deployer4.getDeployOrder());
      assertEquals(8, deployer1.getUndeployOrder());
      assertEquals(7, deployer2.getUndeployOrder());
      assertEquals(6, deployer3.getUndeployOrder());
      assertEquals(5, deployer4.getUndeployOrder());

      main.removeDeployment(deployment);
      main.process();
   }

   /*
    * Tests algorithm performance on complete oriented graph.
    * All dependencies are specified using inputs/outputs.
    */
   public void testAlgorithmPerformance() throws Exception
   {

      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer;
      final int COUNT_OF_DEPLOYERS = 500;

      List<TestFlowDeployer> deployers = new LinkedList<TestFlowDeployer>();

      for (int i = 0; i < COUNT_OF_DEPLOYERS; i++)
      {
         deployer = new TestFlowDeployer( String.valueOf(i) );
         deployer.setOutputs( String.valueOf(i) );
         for (int j = 0; j < i; j++) deployer.addInput( String.valueOf(j) );
         deployers.add(deployer);
      }

      long start = System.currentTimeMillis();
      for (TestFlowDeployer d : deployers)
      {
         addDeployer(main, d);
      }
      long end = System.currentTimeMillis();

      System.out.println("------------------------------------------------------------------------");
      System.out.println("Exhaustive deployer sorting 1 (" + getClass().getSimpleName() ") took: " + (end - start) + " milliseconds");
      System.out.println("------------------------------------------------------------------------");

      // test proper deployers order
      Deployment deployment = createSimpleDeployment( "exhaustiveDeployersOrderTest" );

      main.addDeployment(deployment);
      main.process();

      for (int i = 0; i < COUNT_OF_DEPLOYERS; i++)
      {
         deployer = deployers.get(i);
         assertEquals(i + 1, deployer.getDeployOrder());
         assertEquals(-1, deployer.getUndeployOrder());
      }

      main.removeDeployment(deployment);
      main.process();

      for (int i = 0; i < COUNT_OF_DEPLOYERS; i++)
      {
         deployer = deployers.get(i);
         assertEquals(i + 1, deployer.getDeployOrder());
         assertEquals(2*COUNT_OF_DEPLOYERS - i, deployer.getUndeployOrder());
      }
   }

   /*
    * Tests algorithm performance on complete oriented graph
    * where vertex in this graph is represented as set of deployers.
    * Deployers that are in specific vertex are ordered using deployer ordering feature.
    */
   public void testAlgorithmPerformance2() throws Exception
   {
      DeployerClient main = createMainDeployer();
      TestFlowDeployer deployer;
      final int COUNT_OF_DEPLOYERS = 1000;
      final int MODULO = 50; // count of deployers in particular vertex

      List<TestFlowDeployer> deployers = new LinkedList<TestFlowDeployer>();

      for (int i = 0; i < COUNT_OF_DEPLOYERS; i++)
      {
         deployer = new TestFlowDeployer( String.valueOf(i) );
         deployer.setOutputs( String.valueOf(i / MODULO) );
         deployer.setRelativeOrder(i % MODULO);
         for (int j = 0; j < i/MODULO; j++)
            deployer.addInput( String.valueOf(j) );

         deployers.add(deployer);
      }

      long start = System.currentTimeMillis();
      for (TestFlowDeployer d : deployers)
      {
         addDeployer(main, d);
      }
      long end = System.currentTimeMillis();

      System.out.println("------------------------------------------------------------------------");
      System.out.println("Exhaustive deployer sorting 2 (" + getClass().getSimpleName() ") took: " + (end - start) + " milliseconds");
      System.out.println("------------------------------------------------------------------------");

      // test proper deployers order
      Deployment deployment = createSimpleDeployment( "exhaustiveDeployersOrderTest" );

      main.addDeployment(deployment);
      main.process();

      int deployerDeployOrder;
      int deployerUndeployOrder;
      int deployerDeployOrderInModulo;
      int deployerUndeployOrderInModulo;
      int level;
      for (int i = 0; i < COUNT_OF_DEPLOYERS; i++)
      {
         level = i / MODULO;
         deployer = deployers.get(i);
         deployerDeployOrder = deployer.getDeployOrder();
         deployerDeployOrderInModulo = (deployerDeployOrder - 1) / MODULO;
         deployerUndeployOrder = deployer.getUndeployOrder();
         assertTrue("Wrong deployer(" + i + ") deploy order: " + deployerDeployOrder, level <= deployerDeployOrderInModulo && deployerDeployOrderInModulo < (level + 1));
         assertEquals(i + 1, deployerDeployOrder); // remove if [JBDEPLOY-233] will be fixed
         assertEquals(-1, deployerUndeployOrder);
      }

      main.removeDeployment(deployment);
      main.process();

      for (int i = 0; i < COUNT_OF_DEPLOYERS; i++)
      {
         level = i / MODULO;
         deployer = deployers.get(i);
         deployerDeployOrder = deployer.getDeployOrder();
         deployerDeployOrderInModulo = (deployerDeployOrder - 1) / MODULO;
         deployerUndeployOrder = deployer.getUndeployOrder();
         deployerUndeployOrderInModulo = (deployerUndeployOrder - 1) / MODULO;
         assertTrue("Wrong deployer(" + i + ") deploy order: " + deployerDeployOrder, level <= deployerDeployOrderInModulo && deployerDeployOrderInModulo < (level + 1));
         assertEquals(i + 1, deployer.getDeployOrder()); // remove if [JBDEPLOY-233] will be fixed
         assertTrue("Wrong deployer(" + i + ") undeploy order: " + deployerUndeployOrder, (2 * COUNT_OF_DEPLOYERS - level) >= deployerUndeployOrderInModulo && deployerUndeployOrderInModulo < (2 * COUNT_OF_DEPLOYERS - (level + 1)));
         assertEquals(2 * COUNT_OF_DEPLOYERS - i, deployer.getUndeployOrder()); // remove if [JBDEPLOY-233] will be fixed
      }
   }

   public void testRealWorldAS6DeployersScenario() throws Exception
   {
      // THIS IS REAL WORLD SCENARIO - AS deployers with their dependencies
      DeployerClient main = createMainDeployer();
      AbstractDeployer deployer;
      long start = System.currentTimeMillis();

      // PARSE

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.BeanDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.kernel.spi.deployment.KernelDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.annotations.ScanningMetaDataDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.deployers.spi.annotations.ScanningMetaData", "org.jboss.deployers.plugins.annotations.AbstractScanningMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.dependency.AliasesParserDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.deployers.vfs.plugins.dependency.DeploymentAliases" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.dependency.DependenciesParserDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.deployers.vfs.plugins.dependency.DependenciesMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.hibernate.deployers.metadata.HibernateMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.xnio.metadata.XnioMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.security.microcontainer.beans.metadata.SecurityPolicyMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.logging.metadata.LoggingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.threads.metadata.ThreadsMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.aop.microcontainer.beans.metadata.AOPDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.AppParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.ear.spec.EarMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.JBossAppParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.ear.jboss.JBossAppMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.AppClientParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.client.spec.ApplicationClientMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.JBossClientParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setInputs( "org.jboss.metadata.client.spec.ApplicationClientMetaData" );
      deployer.setOutputs( "org.jboss.metadata.client.jboss.JBossClientMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.PersistenceUnitParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.jpa.spec.PersistenceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.jpa.deployers.PersistenceParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.jpa.spec.PersistenceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.resource.deployers.ManagedConnectionFactoryParserDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.resource.deployers.RARParserDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.resource.metadata.RARDeploymentMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.security.deployers.AclConfigParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.security.acl.config.ACLConfiguration" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.security.deployers.XacmlConfigParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "javax.xml.bind.JAXBElement" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.system.deployers.SARDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.system.metadata.ServiceDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.varia.deployment.LegacyBeanShellDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.varia.deployment.BeanShellScript" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDescriptorDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.wsf.spi.metadata.webservices.WebservicesMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.aop.asintegration.jboss5.AOPAnnotationMetaDataParserDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.aop.microcontainer.beans.metadata.AOPDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.EARContentsDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.ear.jboss.JBossAppMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.WebAppParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.web.spec.WebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.WebAppFragmentParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.web.spec.WebFragmentMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.TldParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.web.spec.TldMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.JBossWebAppParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setInputs( "org.jboss.metadata.web.spec.WebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.EjbParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setOutputs( "org.jboss.metadata.ejb.spec.EjbJarMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.JBossEjbParsingDeployer" );
      deployer.setStage(DeploymentStages.PARSE);
      deployer.setInputs( "org.jboss.metadata.ejb.spec.EjbJarMetaData" );
      deployer.setOutputs( "standardjboss.xml", "org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ApplicationMetaData" );
      addDeployer(main, deployer);

      // POST_PARSE

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.dependency.DependenciesMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.deployers.vfs.plugins.dependency.DependenciesMetaData" );
      deployer.setOutputs( "org.jboss.deployers.vfs.plugins.dependency.DeploymentDependencies" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.dependency.DeploymentAliasesDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.deployers.vfs.plugins.dependency.DeploymentAliases" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.dependency.DeploymentDependencyDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.deployers.vfs.plugins.dependency.DeploymentDependencies" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.EarClassLoaderDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.metadata.ear.jboss.JBossAppMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.EjbClassLoaderDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.LegacyWebXmlLessDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.metadata.web.spec.WebMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.resource.deployers.ManagedConnectionFactoryClassLoaderDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.system.deployers.ServiceClassLoaderDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.system.metadata.ServiceDeployment" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.tomcat.service.deployers.ClusteringDefaultsDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.tomcat.service.deployers.WarClassLoaderDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.metadata.PostJBossMetadataDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.metadata.PostJBossWebMetadataDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.metadata.WeldFilesDeployer" );
      deployer.setStage(DeploymentStages.POST_PARSE);
      deployer.setInputs( "org.jboss.weld.integration.deployer.ext.JBossWeldMetaData" );
      deployer.setOutputs( "WELD_FILES", "WELD_CLASSPATH" );
      addDeployer(main, deployer);

      // PRE_DESCRIBE

      deployer = new TestDeployerAdapter( "org.jboss.deployers.plugins.classloading.ClassLoadingDefaultDeployer" );
      deployer.setStage(DeploymentStages.PRE_DESCRIBE);
      deployer.setInputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      // DESCRIBE

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.classloader.InMemoryClassesDeployer" );
      deployer.setStage(DeploymentStages.DESCRIBE);
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.seam.integration.microcontainer.deployers.SeamWebUrlIntegrationDeployer" );
      deployer.setStage(DeploymentStages.DESCRIBE);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.cl.WeldFacesIntegrationDeployer" );
      deployer.setStage(DeploymentStages.DESCRIBE);
      deployer.setInputs( "WELD_FILES" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderClassPathDeployer" );
      deployer.setStage(DeploymentStages.DESCRIBE);
      deployer.setInputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.classloader.VFSClassLoaderDescribeDeployer" );
      deployer.setStage(DeploymentStages.DESCRIBE);
      deployer.setInputs( "org.jboss.classloading.spi.metadata.ClassLoadingMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.dependency.Module" );
      addDeployer(main, deployer);

      // CLASSLOADER

      deployer = new TestDeployerAdapter( "org.jboss.deployers.plugins.classloading.AbstractLevelClassLoaderSystemDeployer" );
      deployer.setStage(DeploymentStages.CLASSLOADER);
      deployer.setInputs( "org.jboss.deployers.structure.spi.ClassLoaderFactory" );
      deployer.setOutputs( "java.lang.ClassLoader" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.aop.asintegration.jboss5.AOPClassLoaderDeployer" );
      deployer.setStage(DeploymentStages.CLASSLOADER);
      deployer.setInputs( "java.lang.ClassLoader" );
      addDeployer(main, deployer);

      // POST_CLASSLOADER

      deployer = new TestDeployerAdapter( "org.jboss.aop.asintegration.jboss5.AOPDeploymentAopMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.aop.microcontainer.beans.metadata.AOPDeployment" );
      deployer.setOutputs( "org.jboss.aop.asintegration.jboss5.AopMetaDataDeployerOutput" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.aop.asintegration.jboss5.BeansDeploymentAopMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.kernel.spi.deployment.KernelDeployment" );
      deployer.setOutputs( "org.jboss.aop.asintegration.jboss5.AopMetaDataDeployerOutput" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.EarLibExcludeDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.ear.jboss.JBossAppMetaData" );
      deployer.setOutputs( "org.jboss.classloading.spi.visitor.ResourceFilter.recurse" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.plugins.annotations.FilteredAnnotationEnvironmentDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.deployers.spi.annotations.ScanningMetaData", "org.jboss.classloading.spi.visitor.ResourceFilter.resource", "org.jboss.classloading.spi.dependency.Module", "org.jboss.classloading.spi.visitor.ResourceFilter.recurse" );
      deployer.setOutputs( "org.jboss.deployers.spi.annotations.AnnotationEnvironment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.EarSecurityDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.ear.jboss.JBossAppMetaData" );
      deployer.setOutputs( "jboss.jacc", "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.OptAnnotationMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.web.spec.WebMetaData", "org.jboss.metadata.client.spec.ApplicationClientMetaData", "org.jboss.deployers.spi.annotations.AnnotationEnvironment", "org.jboss.metadata.ejb.spec.EjbJarMetaData" );
      deployer.setOutputs( "annotated.org.jboss.metadata.web.spec.WebMetaData", "annotated.org.jboss.metadata.ejb.spec.EjbJarMetaData", "annotated.org.jboss.metadata.client.spec.ApplicationClientMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb.deployers.MergedJBossMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "annotated.org.jboss.metadata.ejb.spec.EjbJarMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ejb.spec.EjbJarMetaData" );
      deployer.setOutputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.MergedJBossClientMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.client.jboss.JBossClientMetaData", "annotated.org.jboss.metadata.client.spec.ApplicationClientMetaData", "org.jboss.metadata.client.spec.ApplicationClientMetaData" );
      deployer.setOutputs( "org.jboss.metadata.client.jboss.JBossClientMetaData", "merged.org.jboss.metadata.client.jboss.JBossClientMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ha.framework.server.deployers.Ejb2HAPartitionDependencyDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ha.framework.server.deployers.Ejb3HAPartitionDependencyDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb.deployers.StandardJBossMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "standardjboss.xml", "merged.org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "raw.org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.Ejb3MetadataProcessingDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "processed.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.EjbMetadataJndiPolicyDecoratorDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "processed.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "EjbMetadataJndiPolicyDecoratorDeployer" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.metadata.PostWebMetadataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "merged.org.jboss.metadata.web.jboss.JBossWebMetaData", "WELD_FILES", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.metadata.WeldEjbInterceptorMetadataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "WELD_FILES", "merged.org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb.deployers.EjbSecurityDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "merged.org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "jboss.jacc", "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.deployers.WarAnnotationMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.web.spec.WebMetaData" );
      deployer.setOutputs( "annotated.org.jboss.metadata.web.spec.WebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.deployers.MergedJBossWebMetaDataDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "annotated.org.jboss.metadata.web.spec.WebMetaData", "org.jboss.metadata.web.spec.WebMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "overlays.org.jboss.metadata.web.spec.WebMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData", "order.org.jboss.metadata.web.spec.WebMetaData", "localscis.org.jboss.metadata.web.spec.WebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployment.MappedReferenceMetaDataResolverDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.client.jboss.JBossClientMetaData", "org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.deployment.spi.DeploymentEndpointResolver" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.deployers.ServletContainerInitializerDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "order.org.jboss.metadata.web.spec.WebMetaData", "localscis.org.jboss.metadata.web.spec.WebMetaData" );
      deployer.setOutputs( "sci.org.jboss.metadata.web.spec.WebMetaData", "sci.handlestypes.org.jboss.metadata.web.spec.WebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.deployers.WarSecurityDeployer" );
      deployer.setStage(DeploymentStages.POST_CLASSLOADER);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jboss.jacc", "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      // PRE_REAL

      deployer = new TestDeployerAdapter( "org.jboss.beanvalidation.deployers.ValidatorFactoryDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      deployer.setOutputs( "javax.validation.ValidatorFactory" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.Ejb3DependenciesDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.deployers.vfs.plugins.dependency.DependenciesMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.system.server.profileservice.persistence.deployer.ProfileServicePersistenceDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.env.EjbServicesDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      deployer.setInputs( "WELD_FILES", "org.jboss.weld.integration.deployer.env.BootstrapInfo" );
      deployer.setOutputs( "BootstrapInfoEJB_SERVICES", "org.jboss.weld.integration.deployer.env.BootstrapInfo" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.env.WeldDiscoveryDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      deployer.setInputs( "org.jboss.weld.integration.deployer.ext.JBossWeldMetaData", "WELD_FILES", "WELD_CLASSPATH" );
      deployer.setOutputs( "org.jboss.weld.integration.deployer.env.WeldDiscoveryEnvironment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.env.FlatDeploymentDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      deployer.setInputs( "WELD_FILES", "org.jboss.weld.integration.deployer.env.BootstrapInfo", "org.jboss.weld.integration.deployer.env.WeldDiscoveryEnvironment", "BootstrapInfoEJB_SERVICES" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData", "org.jboss.weld.integration.deployer.env.BootstrapInfo", "BootstrapInfoDEPLOYMENT" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.weld.integration.deployer.env.WeldBootstrapDeployer" );
      deployer.setStage(DeploymentStages.PRE_REAL);
      deployer.setInputs( "javax.validation.ValidatorFactory", "WELD_FILES", "org.jboss.weld.integration.deployer.env.BootstrapInfo" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      // REAL

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataFactoryDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.threads.metadata.ThreadsMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataFactoryDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.logging.metadata.LoggingMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataFactoryDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.xnio.metadata.XnioMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb.deployers.CreateDestinationDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.system.metadata.ServiceMetaData", "org.jboss.kernel.spi.deployment.KernelDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb.deployers.EjbDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.ejb.deployers.EjbDeployment", "org.jboss.system.metadata.ServiceMetaData", "org.jboss.kernel.spi.deployment.KernelDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.Ejb3ClientDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.client.jboss.JBossClientMetaData" );
      deployer.setOutputs( "org.jboss.ejb3.clientmodule.ClientENCInjectionContainer", "org.jboss.kernel.spi.deployment.KernelDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.deployers.Ejb3Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData", "processed.org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.ejb3.Ejb3Deployment", "org.jboss.kernel.spi.deployment.KernelDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.AliasDeploymentDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.kernel.spi.deployment.KernelDeployment", "org.jboss.beans.metadata.spi.NamedAliasMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.NamedAliasMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.endpoint.deployers.EJB3EndpointDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.ejb3.metrics.deployer.Ejb3MetricsDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.ejb3.Ejb3Deployment" );
      deployer.setOutputs( "org.jboss.ejb3.metrics.deployer.Ejb3MetricsDeployer" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.hibernate.deployers.HibernateDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.hibernate.deployers.metadata.HibernateMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.jpa.deployers.PersistenceDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.jpa.spec.PersistenceMetaData" );
      deployer.setOutputs( "org.jboss.metadata.jpa.spec.PersistenceUnitMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.jpa.deployers.PersistenceUnitDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.jpa.spec.PersistenceUnitMetaData" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.beans.metadata.spi.BeanMetaData", "org.jboss.kernel.spi.deployment.KernelDeployment" );
      deployer.setOutputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.beans.metadata.spi.BeanMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.deployers.vfs.deployer.kernel.DeploymentAliasMetaDataDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.beans.metadata.spi.BeanMetaData", "org.jboss.beans.metadata.spi.NamedAliasMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.EarModuleJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.ear.jboss.JBossAppMetaData" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.EjbModuleJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.ejb.jboss.JBossMetaData" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.JCAResourceJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.RarModuleJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.resource.metadata.RARDeploymentMetaData" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.resource.deployers.ManagedConnectionFactoryDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.resource.metadata.mcf.ManagedConnectionFactoryDeploymentGroup" );
      deployer.setOutputs( "org.jboss.system.metadata.ServiceDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.ServiceModuleJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.system.metadata.ServiceDeployment" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.resource.deployers.RARDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.resource.metadata.RARDeploymentMetaData" );
      deployer.setOutputs( "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.varia.deployment.LegacyBeanShellScriptDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.varia.deployment.BeanShellScript" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSEJBAdapterDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.ejb3.Ejb3Deployment", "merged.org.jboss.metadata.ejb.jboss.JBossMetaData", "org.jboss.ejb.deployers.EjbDeployment", "org.jboss.wsf.spi.metadata.webservices.WebservicesMetaData" );
      deployer.setOutputs( "org.jboss.wsf.spi.deployment.integration.WebServiceDeployment" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSTypeDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.integration.WebServiceDeployment", "org.jboss.wsf.spi.metadata.webservices.WebservicesMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "org.jboss.wsf.spi.deployment.Deployment$DeploymentType" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "org.jboss.wsf.spi.deployment.Deployment$DeploymentType" );
      deployer.setOutputs( "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.EndpointMetrics", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.VFSRoot", "jbossws.ContainerMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "jbossws.ContainerMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata", "jbossws.VirtualHosts" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "jbossws.ContainerMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.ContextRoot", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.ContextRoot", "org.jboss.wsf.spi.deployment.Deployment", "jbossws.ContainerMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.URLPattern", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.URLPattern", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.EndpointAddress", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.URLPattern", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.EndpointName", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.EndpointName", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.RegisteredEndpoint", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.URLPattern", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.VirtualHosts" );
      deployer.setOutputs( "jbossws.WebMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "jbossws.ContainerMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.StackEndpointHandler", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.JAXBIntros", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.JAXBIntros", "jbossws.VFSRoot", "jbossws.URLPattern", "org.jboss.wsf.spi.deployment.Deployment", "jbossws.ContainerMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.UnifiedMetaDataModel", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.UnifiedMetaDataModel", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.JAXBIntros", "jbossws.UnifiedMetaDataModel", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.PublishedContract", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.UnifiedMetaDataModel", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.InitializedMetaDataModel", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.UnifiedMetaDataModel", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.StackEndpointHandler", "jbossws.UnifiedMetaDataModel", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.StackDescriptor", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.ContextProperties", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.WebMetaData", "org.jboss.wsf.spi.deployment.Deployment", "jbossws.StackDescriptor", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.ContextProperties" );
      deployer.setOutputs( "jbossws.WebMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.WebMetaData", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.JACCPermisions", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.WebMetaData", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.InjectionMetaData", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "jbossws.RegisteredEndpoint", "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "jbossws.EndpointRecordProcessors", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.webservices.integration.deployers.WSDeploymentAspectDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.wsf.spi.deployment.Deployment", "org.jboss.metadata.web.jboss.JBossWebMetaData", "jbossws.metadata" );
      deployer.setOutputs( "jbossws.LifecycleHandler", "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.WebModuleJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.web.tomcat.service.deployers.TomcatDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.metadata.web.jboss.JBossWebMetaData" );
      deployer.setOutputs( "org.jboss.web.deployers.WarDeployment", "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.system.deployers.ServiceDeploymentDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.system.metadata.ServiceDeployment", "org.jboss.system.metadata.ServiceMetaData" );
      deployer.setOutputs( "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.management.j2ee.deployers.JMSResourceJSR77Deployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.system.metadata.ServiceMetaData" );
      deployer.setOutputs( "javax.management.ObjectName" );
      addDeployer(main, deployer);

      deployer = new TestDeployerAdapter( "org.jboss.system.deployers.ServiceDeployer" );
      deployer.setStage(DeploymentStages.REAL);
      deployer.setInputs( "org.jboss.system.metadata.ServiceMetaData" );
      addDeployer(main, deployer);

      long end = System.currentTimeMillis();
      System.out.println("------------------------------------------------------------------------");
      System.out.println("Deployer sorting (" + getClass().getSimpleName() ") took: " + (end - start) + " milliseconds");
      System.out.println("------------------------------------------------------------------------");
   }

   private static void assertDeploy(TestFlowDeployer deployer)
   {
      assertTrue(deployer + " must deploy", deployer.getDeployOrder() > 0);
   }

   private static void assertDeployBefore(TestFlowDeployer after, TestFlowDeployer before)
   {
      assertTrue(before + " must deploy before " + after, after.getDeployOrder() > before.getDeployOrder());
   }

   private static void assertUndeploy(TestFlowDeployer deployer)
   {
      assertTrue(deployer + " must undeploy", deployer.getUndeployOrder() > 0);
   }

   private static void assertUndeployAfter(TestFlowDeployer after, TestFlowDeployer before)
   {
      assertTrue(before + " must undeploy after " + after, after.getUndeployOrder() < before.getUndeployOrder());
   }
}
TOP

Related Classes of org.jboss.test.deployers.deployer.test.AbstractDeployerFlowUnitTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.