Package org.jboss.test.cluster.testutil

Source Code of org.jboss.test.cluster.testutil.DelegatingClusteredTestCase

/**
*
*/
package org.jboss.test.cluster.testutil;

import java.util.List;
import java.util.ListIterator;
import java.util.StringTokenizer;

import junit.framework.Test;
import junit.framework.TestSuite;

import org.jboss.logging.Logger;
import org.jboss.test.AbstractTestSetup;
import org.jboss.test.JBossClusteredTestCase;
import org.jboss.test.JBossTestCase;
import org.jboss.test.JBossTestClusteredSetup;
import org.jboss.test.JBossTestServices;

/**
*  JBossClusteredTestCase extension that accepts a list of
{@link TestSetupDelegate} that can be processed as part of setup/tearDown of
*  the suite.
*
* @author Brian Stansberry
*
* @version $Revision: $
*/
public class DelegatingClusteredTestCase extends JBossClusteredTestCase
{
   /**
    * @param name
    */
   public DelegatingClusteredTestCase(String name)
   {
      super(name);
   }

   public static Test getDeploySetup(Test test, String jarNames)
       throws Exception
   {
       return getDeploySetup(test, jarNames, null);
   }

   public static Test getDeploySetup(Class<?> clazz, String jarNames)
       throws Exception
   {
       return getDeploySetup(clazz, jarNames, null);
   }

   public static Test getDeploySetup(Test test, String jarNames, List<TestSetupDelegate> delegates)
       throws Exception
   {
       return new DelegatingTestSetup(test, jarNames, delegates);
   }

   public static Test getDeploySetup(Class<?> clazz, String jarNames, List<TestSetupDelegate> delegates)
       throws Exception
   {
       TestSuite suite = new TestSuite();
       suite.addTest(new TestSuite(clazz));
       return getDeploySetup(suite, jarNames, delegates);
   }
  
   public static class DelegatingTestSetup extends JBossTestClusteredSetup
   {
      private static final Logger log = Logger.getLogger(DelegatingTestSetup.class);
      private final List<TestSetupDelegate> setupDelegates;
      private String jarNames = null;
     
      /**
       * @param test
       * @throws Exception
       */
      public DelegatingTestSetup(Test test, String jarNames, List<TestSetupDelegate> delegates) throws Exception
      {
         // Don't pass the jarNames through to the superclass -- we handle them ourselves
         super(test, null);
         this.jarNames = jarNames;
         this.setupDelegates = delegates;
      }
     
      @Override
      protected void setUp() throws Exception
      {    
         super.setUp();       
        
         JBossTestServices services = this.delegate;
         if (setupDelegates != null)
         {
            for (TestSetupDelegate setupDelegate : setupDelegates)
            {
               setupDelegate.setTestServices(services);
               setupDelegate.setUp();
            }
         }
        
         deployJars();
      }

      @Override
      protected void tearDown() throws Exception
      {
         try
         {
            undeployJars();
         }
         finally
         {
            try
            {
               if (setupDelegates != null)
               {
                  for (ListIterator<TestSetupDelegate> it = setupDelegates.listIterator(); it.hasPrevious(); )
                  {
                     TestSetupDelegate setupDelegate = it.previous();
                     try
                     {
                        setupDelegate.tearDown();
                     }
                     catch (Exception e)
                     {
                       log.error("Caught exception tearing down " + setupDelegate, e);
                     }
                  }
               }
            }
            finally
            {
           
               try
               {
                  super.tearDown();
               }
               finally
               {
                  AbstractTestSetup.delegate = null;
               }
            }
         }
      }
     
      private void deployJars() throws Exception
      {     
         JBossTestCase.deploymentException = null;
         try
         {
            // deploy the comma seperated list of jars
            StringTokenizer st = new StringTokenizer(jarNames, ", ");
            while (st.hasMoreTokens())
            {
               String jarName = st.nextToken();
               this.redeploy(jarName);
               this.getLog().debug("deployed package: " + jarName);
            }
         }
         catch (Exception ex)
         {
            // Throw this in testServerFound() instead.
            JBossTestCase.deploymentException = ex;
         }
            
         // wait a couple seconds to let the cluster stabilize
         synchronized (this)
         {
            wait(2000);
         }
      }
     
      private void undeployJars() throws Exception
      {
         // deploy the comma seperated list of jars
         StringTokenizer st = new StringTokenizer(jarNames, ", ");
         String[] depoyments = new String[st.countTokens()];
         for (int i = depoyments.length - 1; i >= 0; i--)
            depoyments[i] = st.nextToken();
         Exception failure = null;
         for (int i = 0; i < depoyments.length; i++)
         {
            String jarName = depoyments[i];
            this.getLog().debug("Attempt undeploy of " + jarName);
            try
            {
               this.undeploy(jarName);
               this.getLog().debug("undeployed package: " + jarName);
            }
            catch (Exception e)
            {
               log.error("Failure undeploying " + jarName, e);
               if (failure == null)
               {
                  failure = e;
               }
            }
         }  
        
         if (failure != null)
         {
            throw failure;
         }
      }

   }

}
TOP

Related Classes of org.jboss.test.cluster.testutil.DelegatingClusteredTestCase

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.