Package org.jboss.test.deployers.test

Source Code of org.jboss.test.deployers.test.AbstractSingleArchiveTest

/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.deployers.test;

import java.net.URL;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.jboss.deployers.structure.spi.DeploymentUnit;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.test.deployers.support.MockArchiveManifest;
import org.jboss.test.deployers.support.crm.CrmWebBean;
import org.jboss.test.deployers.support.ejb.BusinessInterface;
import org.jboss.test.deployers.support.ejb.MySLSBean;
import org.jboss.test.deployers.support.ext.ExternalWebBean;
import org.jboss.test.deployers.support.jar.PlainJavaBean;
import org.jboss.test.deployers.support.jsf.NotWBJsfBean;
import org.jboss.test.deployers.support.ui.UIWebBean;
import org.jboss.test.deployers.support.util.SomeUtil;
import org.jboss.test.deployers.support.web.ServletWebBean;
import org.jboss.vfs.VirtualFile;

/**
* Abstract test case that contains scenarios involving the deployment of a single archive.
* This test does not contain test scenarios that assert the behaviour when more than one
* archive is deployed at the same time.
*
* @author <a href="mailto:flavia.rainone@jboss.com">Flavia Rainone</a>
* @param E the type of environment this test applies to
*/
public abstract class AbstractSingleArchiveTest<E> extends AbstractEnvironmentTest<E>
{
   public AbstractSingleArchiveTest(String name)
   {
      super(name);
   }

   protected DeploymentUnit unit;

   public void testEjbJar() throws Exception
   {
      JavaArchive ejbJar = createEjbJar(true);
      unit = assertDeploy(ejbJar);

      E environment = assertSingleEnvironment(EJB_JAR_NAME);
      assertExpectedClasses(environment, PlainJavaBean.class);
      assertExpectedResources(environment, "ejb.jar");
   }

   public void testEjbJarWithoutXml() throws Exception
   {
      JavaArchive ejbJar = createEjbJar(false);
      unit = assertDeploy(ejbJar);
     
      assertEmptyEnvironment();
   }

   public void testEjbJarInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, EAR_NAME);
      JavaArchive ejbJar = createEjbJar(true);
      ear.addModule(ejbJar);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment(EAR_NAME);
      assertExpectedClasses(environment, PlainJavaBean.class);
      assertExpectedResources(environment, unit.getSimpleName() + "/ejb.jar");
   }

   public void testEjbJarWithoutXmlInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, EAR_NAME);
      JavaArchive ejbJar = createEjbJar(false);
      ear.addModule(ejbJar);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      assertEmptyEnvironment();
   }

   public void testEjbJarsInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, EAR_NAME);
      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", true, PlainJavaBean.class);
      ear.addModule(ejbJar1);
      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
      ear.addModule(ejbJar2);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment(EAR_NAME);
      assertExpectedClasses(environment, PlainJavaBean.class, MySLSBean.class,
               BusinessInterface.class);
      assertExpectedResources(environment, EAR_NAME + "/ejbJar1.jar",
               EAR_NAME + "/ejbJar2.jar");
   }

   public void testMixedEjbJarsInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, EAR_NAME);
      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
      ear.addModule(ejbJar1);
      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", true, MySLSBean.class, BusinessInterface.class);
      ear.addModule(ejbJar2);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment(EAR_NAME);
      assertExpectedClasses(environment, MySLSBean.class, BusinessInterface.class);
      assertExpectedResources(environment, "simple.ear/ejbJar2.jar");
   }

   public void testEjbJarsWithoutXmlInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, EAR_NAME);
      JavaArchive ejbJar1 = createEjbJar("ejbJar1.jar", false, PlainJavaBean.class);
      ear.addModule(ejbJar1);
      JavaArchive ejbJar2 = createEjbJar("ejbJar2.jar", false, MySLSBean.class, BusinessInterface.class);
      ear.addModule(ejbJar2);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      assertEmptyEnvironment();
   }

   public void testWar() throws Exception
   {
      WebArchive war = createWar(true);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), true);
   }

   public void testWarWithLib() throws Exception
   {
      WebArchive war = createWarWithLib(true, true);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib.jar");
   }

   public void testWarWithLibs() throws Exception
   {
      WebArchive war = createWarWithLibs(true, true, true);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class, CrmWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib1.jar", "lib2.jar");
   }

   public void testWarWithLibWithoutXml() throws Exception
   {
      WebArchive war = createWarWithLib(true, false);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), true);
   }

   public void testWarWithLibsWithoutXml() throws Exception
   {
      WebArchive war = createWarWithLibs(true, false, false);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), true);
   }

   public void testWarWithMixedLibs() throws Exception
   {
      WebArchive war = createWarWithLibs(true, true, false);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), true, "lib1.jar");
   }

   public void testWarWithoutXmlWithLib() throws Exception
   {
      WebArchive war = createWarWithLib(false, true);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, UIWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib.jar");
   }

   public void testWarWithoutXmlWithLibs() throws Exception
   {
      WebArchive war = createWarWithLibs(false, true, true);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, UIWebBean.class, CrmWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib1.jar", "lib2.jar");
   }

   public void testWarWithoutXmlWithLibWithoutXml() throws Exception
   {
      WebArchive war = createWarWithLib(false, false);
      unit = assertDeploy(war);
     
      assertEmptyEnvironment();
   }

   public void testWarWithoutXmlWithMixedLibs() throws Exception
   {
      WebArchive war = createWarWithLibs(false, true, false);
      unit = assertDeploy(war);
     
      E environment = assertSingleEnvironment(WAR_NAME);
      assertExpectedClasses(environment, UIWebBean.class);
      assertExpectedWarResources(environment, unit.getSimpleName(), false, "lib1.jar");
   }

   public void testWarWithoutXmlWithLibsWithoutXml() throws Exception
   {
      WebArchive war = createWarWithLibs(false, false, false);
      unit = assertDeploy(war);
     
      assertEmptyEnvironment();
   }

   public void testWarWithoutXml() throws Exception
   {
      WebArchive war = createWar(false);
      unit = assertDeploy(war);
     
      assertEmptyEnvironment();
   }

   public void testWarInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWar(true);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment("warinear.ear/simple.war");
      assertExpectedClasses(environment, ServletWebBean.class);
      assertExpectedWarResources(environment, "warinear.ear/simple.war", true);
   }

   public void testWarsInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWar("simple1.war", true, ServletWebBean.class);
      ear.addModule(war);
      war = createWar("simple2.war", true, NotWBJsfBean.class);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      assertWarsInEar();
   }

   protected abstract void assertWarsInEar();

   public void testMixedWarsInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWar("simple1.war", true, ServletWebBean.class);
      ear.addModule(war);
      war = createWar("simple2.war", false, NotWBJsfBean.class);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment("warinear.ear/simple1.war");
      assertExpectedClasses(environment, ServletWebBean.class);
      assertExpectedWarResources(environment, "warinear.ear/simple1.war", true);
   }

   public void testWarsWithoutXmlInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWar("simple1.war", false, ServletWebBean.class);
      ear.addModule(war);
      war = createWar("simple2.war", false, NotWBJsfBean.class);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      assertEmptyEnvironment();
   }

   public void testWarWithLibInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWarWithLib(true, true);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class, UIWebBean.class);
      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, true, "lib.jar");
   }

   public void testWarWithLibWithoutXmlInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWarWithLib(true, false);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
      assertExpectedClasses(environment, ServletWebBean.class);
      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, true);
   }

   public void testWarWithoutXmlWithLibWithoutXmlInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWarWithLib(false, false);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      assertEmptyEnvironment();
   }

   public void testWarWithoutXmlWithLibInEar() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "warinear.ear");
      WebArchive war = createWarWithLib(false, true);
      ear.addModule(war);
      MockArchiveManifest.addManifest(ear);
      unit = assertDeploy(ear);
     
      E environment = assertSingleEnvironment("warinear.ear/" + WAR_NAME);
      assertExpectedClasses(environment, UIWebBean.class);
      assertExpectedWarResources(environment, "warinear.ear/" + WAR_NAME, false, "lib.jar");
   }

   public void testBasicEar() throws Exception
   {
      VirtualFile ear = createBasicEar();
      unit = assertDeploy(ear);

      assertBasicEar();
   }

   protected abstract void assertBasicEar();

   public void testBasicEarFullCDI() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "top-level.ear");
      createLib(ear, "util.jar", true, SomeUtil.class);
      createLib(ear, "ext.jar", true, ExternalWebBean.class);
      JavaArchive ejbJar = createEjbJar("simple.jar", true, PlainJavaBean.class);
      ear.addModule(ejbJar);
      ejbJar = createEjbJar("ejbs.jar", true, MySLSBean.class, BusinessInterface.class);
      ear.addModule(ejbJar);
      WebArchive war = createWar("simple.war", true, ServletWebBean.class);
      createLib(war, "ui.jar", true, UIWebBean.class);
      ear.addModule(war);
      war = createWar("crm.war", true, NotWBJsfBean.class);
      createLib(war, "crm.jar", true, CrmWebBean.class);
      ear.addModule(war);
      unit = assertDeploy(ear);
     
      assertBasicEarFullCDI();
   }

   protected abstract void assertBasicEarFullCDI();

   public void testBasicEarWithoutXml() throws Exception
   {
      EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "simple.ear");
      createLib(ear, "util.jar", false, SomeUtil.class);
      createLib(ear, "ext.jar", false, ExternalWebBean.class);
      JavaArchive ejbJar = createEjbJar("simple.jar", false, PlainJavaBean.class);
      ear.addModule(ejbJar);
      ejbJar = createEjbJar("ejbs.jar", false, MySLSBean.class, BusinessInterface.class);
      ear.addModule(ejbJar);
      WebArchive war = createWar("simple.war", false, ServletWebBean.class);
      createLib(war, "ui.jar", false, UIWebBean.class);
      ear.addModule(war);
      war = createWar("crm.war", false, NotWBJsfBean.class);
      createLib(war, "crm.jar", false, CrmWebBean.class);
      ear.addModule(war);
      unit = assertDeploy(ear);

      assertBasicEarWithoutXml();
   }

   private void addExpectedResource(Set<String> expected, String unit)
   {
      addExpectedResource(expected, unit, "/META-INF/beans.xml");
   }

   private void addExpectedResource(Set<String> expected, String unit, String suffix)
   {
      expected.add(unit + suffix);
   }
  
   private void assertExpectedResources(E environment, Set<String> expected)
   {
      Collection<URL> weldXml = getResources(environment);
      assertNotNull(weldXml);
      assertTrue("Unexpected empty weld XML collection", expected.isEmpty() || !weldXml.isEmpty());
      for (URL url : weldXml)
      {
         boolean found = false;
         Iterator<String> iter = expected.iterator();
         while (iter.hasNext())
         {
            String expectedURL = iter.next();
            if (url.toExternalForm().endsWith(expectedURL))
            {
               iter.remove();
               found = true;
               break;
            }
         }
         assertTrue("Unexpected wb url: " + url, found);
      }
      assertEmpty("Should be emtpy, missing " + expected, expected);
   }

   protected void assertExpectedResources(E environment, String... units)
   {
      Set<String> expected = new HashSet<String>();
      for (String unit: units)
      {
         addExpectedResource(expected, unit);
      }
      assertExpectedResources(environment, expected);
   }

   protected void assertExpectedWarResources(E environment, String warUnit, boolean warResourceExpected, String... units)
   {
      Set<String> expected = new HashSet<String>();
      if (warResourceExpected)
         addExpectedResource(expected, warUnit, "/WEB-INF/beans.xml");
      for (String unit: units)
      {
         addExpectedResource(expected, warUnit, "/WEB-INF/lib/" + unit + "/META-INF/beans.xml");
      }
      assertExpectedResources(environment, expected);
   }

   /**
    * Returns the Weld XML resources recorded in the environment.
    *
    * @param environment the environment
    * @return the list of URLs pointing to the Weld XML files that have been found in the
    *         environment
    */
   protected abstract Collection<URL> getResources(E environment);

   protected abstract void assertBasicEarWithoutXml();

   /**
    * Asserts that there is no environment resultant from the deployment.
    */
   protected abstract void assertEmptyEnvironment();

   /**
    * Asserts that there is only one environment resultant from the deployment.
    *
    * @param name the name of the environment
    * @return     the environment
    */
   protected abstract E assertSingleEnvironment(String name);
}
TOP

Related Classes of org.jboss.test.deployers.test.AbstractSingleArchiveTest

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.