Пример #1
0
  public CoreDeployment withWholeCore() {
    JavaArchive coreArchive = ShrinkWrap.create(JavaArchive.class, "dynamic-richfaces-core.jar");
    coreArchive.merge(
        ShrinkWrap.create(GenericArchive.class)
            .as(ExplodedImporter.class)
            .importDirectory("target/classes/")
            .as(GenericArchive.class),
        "/",
        Filters.includeAll());
    archive().addAsLibrary(coreArchive);

    return this;
  }
  private Archive<?> handleArchive(
      EnterpriseArchive applicationArchive,
      Collection<Archive<?>> auxiliaryArchives,
      JavaArchive protocol,
      Processor processor) {
    Map<ArchivePath, Node> applicationArchiveWars =
        applicationArchive.getContent(Filters.include(".*\\.war"));
    if (applicationArchiveWars.size() == 1) {
      ArchivePath warPath = applicationArchiveWars.keySet().iterator().next();
      try {
        handleArchive(
            applicationArchive.getAsType(WebArchive.class, warPath),
            new ArrayList<
                Archive<
                    ?>>(), // reuse the War handling, but Auxiliary Archives should be added to the
            // EAR, not the WAR
            protocol,
            processor);
      } catch (IllegalArgumentException e) {
        throw new IllegalArgumentException(
            "Can not manipulate war's that are not of type " + WebArchive.class, e);
      }
    } else if (applicationArchiveWars.size() > 1) {
      // TODO: fetch the TestDeployment.getArchiveForEnrichment
      throw new UnsupportedOperationException(
          "Multiple WebArchives found in "
              + applicationArchive.getName()
              + ". Can not determine which to enrich");
    } else {
      // reuse handle(JavaArchive, ..) logic
      Archive<?> wrappedWar = handleArchive(protocol, new ArrayList<Archive<?>>(), null, processor);
      applicationArchive.addAsModule(wrappedWar);

      if (applicationArchive.contains(APPLICATION_XML_PATH)) {
        ApplicationDescriptor applicationXml =
            Descriptors.importAs(ApplicationDescriptor.class)
                .from(applicationArchive.get(APPLICATION_XML_PATH).getAsset().openStream());

        applicationXml.webModule(wrappedWar.getName(), wrappedWar.getName());

        // SHRINKWRAP-187, to eager on not allowing overrides, delete it first
        applicationArchive.delete(APPLICATION_XML_PATH);
        applicationArchive.setApplicationXML(new StringAsset(applicationXml.exportAsString()));
      }
    }

    applicationArchive.addAsLibraries(auxiliaryArchives.toArray(new Archive<?>[0]));

    return applicationArchive;
  }
  /**
   * Enable static content to be served from a given base in the classpath.
   *
   * @param base The path prefix to use for static content.
   * @return
   */
  @SuppressWarnings("unchecked")
  default T staticContent(String base) {
    // as(WARArchive.class).addModule("org.wildfly.swarm.undertow", "runtime");

    try {
      // Add all the static content from the current app to the archive
      Archive allResources = DefaultWarDeploymentFactory.archiveFromCurrentApp();
      // Here we define static as basically anything that's not a
      // Java class file or under WEB-INF or META-INF
      mergeIgnoringDuplicates(allResources, base, Filters.exclude(".*\\.class$"));
    } catch (Exception ex) {
      log.log(Level.WARNING, "Error setting up static resources", ex);
    }

    Node node = get(EXTERNAL_MOUNT_PATH);
    UndertowExternalMountsAsset asset;
    if (node == null) {
      asset = new UndertowExternalMountsAsset();
      add(asset, EXTERNAL_MOUNT_PATH);
    } else {
      Asset tempAsset = node.getAsset();
      if (!(tempAsset instanceof UndertowExternalMountsAsset)) {
        asset = new UndertowExternalMountsAsset(tempAsset.openStream());
        add(asset, EXTERNAL_MOUNT_PATH);
      } else {
        asset = (UndertowExternalMountsAsset) node.getAsset();
      }
    }

    // Add external mounts for static content so changes are picked up
    // immediately during development
    Path webResources = Paths.get(System.getProperty("user.dir"), "src", "main", "webapp");
    if (base != null) {
      webResources = webResources.resolve(base);
    }
    if (Files.exists(webResources)) {
      asset.externalMount(webResources.toString());
    }
    webResources = Paths.get(System.getProperty("user.dir"), "src", "main", "resources");
    if (base != null) {
      webResources = webResources.resolve(base);
    }
    if (Files.exists(webResources)) {
      asset.externalMount(webResources.toString());
    }

    return (T) this;
  }
 @Deployment(testable = false)
 public static WebArchive createDeployment() {
   return ShrinkWrap.create(WebArchive.class, "login.war")
       .addClasses(LoginController.class, User.class, Credentials.class)
       // .addAsWebResource(new File(WEBAPP_SRC), "login.xhtml")
       // .addAsWebResource(new File(WEBAPP_SRC), "home.xhtml")
       .merge(
           ShrinkWrap.create(GenericArchive.class)
               .as(ExplodedImporter.class)
               .importDirectory(WEBAPP_SRC)
               .as(GenericArchive.class),
           "/",
           Filters.include(".*\\.xhtml$"))
       .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml")
       .addAsWebInfResource(
           new StringAsset("<faces-config version=\"2.0\"/>"), "faces-config.xml");
 }
  @Deployment(testable = false)
  public static Archive<?> createTestArchive() {

    final PomEquippedResolveStage pom = Maven.resolver().loadPomFromFile("pom.xml");

    return ShrinkWrap.create(WebArchive.class, "jsec.war")
        .addAsLibraries(
            pom.resolve("org.webjars:bootstrap:3.3.7").withoutTransitivity().as(JavaArchive.class))
        .addAsLibraries(
            pom.resolve("org.webjars:jquery:1.12.4").withoutTransitivity().as(JavaArchive.class))
        .addClasses(
            User.class,
            Role.class,
            UserSessionBean.class,
            RoleSingletonBean.class,
            Resources.class,
            AccountsController.class,
            IndexController.class)
        .addAsResource(
            new File("src/main/resources/META-INF/persistence.xml"), "META-INF/persistence.xml")
        .addAsResource(
            new File("src/main/resources/META-INF/create-script.sql"), "META-INF/create-script.sql")
        .addAsResource(
            new File("src/main/resources/META-INF/drop-script.sql"), "META-INF/drop-script.sql")
        .addAsResource(
            new File("src/main/resources/META-INF/load-script.sql"), "META-INF/load-script.sql")
        .addAsResource(
            new File("src/main/resources/ValidationMessages.properties"),
            "ValidationMessages.properties")
        .merge(
            ShrinkWrap.create(GenericArchive.class)
                .as(ExplodedImporter.class)
                .importDirectory(WEBAPP_SRC)
                .as(GenericArchive.class),
            "/",
            Filters.include(".*\\.xhtml$"))
        .addAsWebResource(
            new File(WEBAPP_SRC, "resources/img/javaee-bs.png"), "resources/img/javaee-bs.png")
        .addAsWebInfResource(new File(WEBAPP_SRC, "WEB-INF/beans.xml"))
        .addAsWebInfResource(new File(WEBAPP_SRC, "WEB-INF/faces-config.xml"))
        .addAsWebInfResource(new File(WEBAPP_SRC, "WEB-INF/jboss-web.xml"))
        .setWebXML(new File(WEBAPP_SRC, "WEB-INF/web.xml"));
  }
  private Archive<?> handleArchive(
      WebArchive applicationArchive,
      Collection<Archive<?>> auxiliaryArchives,
      WebArchive protocol,
      Processor processor) {
    if (applicationArchive.contains(WEB_XML_PATH)) {
      WebAppDescriptor applicationWebXml =
          Descriptors.importAs(WebAppDescriptor.class)
              .from(applicationArchive.get(WEB_XML_PATH).getAsset().openStream());

      // SHRINKWRAP-187, to eager on not allowing overrides, delete it first
      applicationArchive.delete(WEB_XML_PATH);
      applicationArchive.setWebXML(
          new StringAsset(WebUtils.mergeWithDescriptor(applicationWebXml).exportAsString()));
      applicationArchive.merge(protocol, Filters.exclude(".*web\\.xml.*"));
    } else {
      applicationArchive.merge(protocol);
    }
    applicationArchive.addAsLibraries(auxiliaryArchives.toArray(new Archive<?>[0]));

    processor.process(applicationArchive);
    return applicationArchive;
  }
Пример #7
0
  @Deployment
  protected static EnterpriseArchive getBaseDeployment() {

    // deploy the test classes in their own jar, under /lib
    JavaArchive testClassesJar = ShrinkWrap.create(JavaArchive.class, "test-classes.jar");
    testClassesJar = addClasses(testClassesJar, new File("target/test-classes/org"), null);

    // add non itests-2 RHQ classes used by the test classes, as well as needed resources
    testClassesJar.addClass(ThrowableUtil.class);
    testClassesJar.addClass(MessageDigestGenerator.class);
    testClassesJar.addClass(StreamUtil.class);
    testClassesJar.addClass(AssertUtils.class);
    testClassesJar.addClass(ResourceBuilder.class);
    testClassesJar.addClass(ResourceTypeBuilder.class);
    testClassesJar.addClass(BuilderException.class);
    testClassesJar.addClasses(
        PropertyMatcher.class, MatchResult.class, PropertyMatchException.class);
    testClassesJar.addAsManifestResource(
        EmptyAsset.INSTANCE,
        ArchivePaths.create("beans.xml")); // add CDI injection (needed by arquillian injection);
    // TOD0 (jshaughn): Once we have identified all of the necessary test resource files, see if we
    // can just add the
    //      entire /resources dir in one statement
    testClassesJar.addAsResource("binary-blob-sample.jar");
    testClassesJar.addAsResource("test-alert-sender-serverplugin.xml");
    testClassesJar.addAsResource("test-assist-color-number.txt");
    testClassesJar.addAsResource("test-ldap.properties");
    testClassesJar.addAsResource("test-scheduler.properties");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml");
    testClassesJar.addAsResource("org/rhq/enterprise/server/discovery/DiscoveryBossBeanTest.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/inventory/InventoryManagerBeanTest.xml");
    testClassesJar.addAsResource("org/rhq/enterprise/server/resource/metadata/MetadataTest.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBeanTest/plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/AlertMetadataManagerBeanTest/plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBeanTest/plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ContentMetadataManagerBeanTest/plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/EventMetadataManagerBeanTest/plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/EventMetadataManagerBeanTest/plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBeanTest/plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MeasurementMetadataManagerBeanTest/plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child1_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/child2_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionMetadataTest/parent_plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionSinglePluginDescriptorMetadataTest/child_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionSinglePluginDescriptorMetadataTest/parent_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/MultiplePluginExtensionSinglePluginDescriptorMetadataTest/parent_plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/OperationMetadataManagerBeanTest/plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/OperationMetadataManagerBeanTest/plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginExtensionMetadataTest/child_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginExtensionMetadataTest/parent_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginExtensionMetadataTest/parent_plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginManagerBeanTest/plugin_1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginManagerBeanTest/plugin_2.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginManagerBeanTest/plugin_3.1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginManagerBeanTest/plugin_3.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginScanningExtensionMetadataTest/child1_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginScanningExtensionMetadataTest/child2_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginScanningExtensionMetadataTest/parent_plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/PluginScanningExtensionMetadataTest/parent_plugin_v2.xml");

    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/dup_drift.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/parent_resource_type-plugin.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/plugin_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/plugin_v2.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_bundle_drift_config_v2.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_types_v1.xml");
    testClassesJar.addAsResource(
        "org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBeanTest/remove_types_v2.xml");

    testClassesJar.addAsResource("perftest/AvailabilityInsertPurgeTest-testOne-data.xml.zip");
    testClassesJar.addAsResource("serverplugins/simple-generic-serverplugin.xml");
    testClassesJar.addAsResource("test/deployment/1.0-feb-2.xml");
    testClassesJar.addAsResource("test/deployment/1.0-feb.xml");
    testClassesJar.addAsResource("test/deployment/1.0-june.xml");
    testClassesJar.addAsResource("test/deployment/1.1-feb.xml");
    testClassesJar.addAsResource("test/deployment/1.1-june.xml");
    testClassesJar.addAsResource("test/metadata/content-source-update-v1.xml");
    testClassesJar.addAsResource("test/metadata/content-source-update-v2.xml");
    testClassesJar.addAsResource("test/metadata/noTypes.xml");
    testClassesJar.addAsResource("test/metadata/alerts/type-with-metric.xml");
    testClassesJar.addAsResource("test/metadata/configuration/addDeleteTemplate1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/addDeleteTemplate2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/addDeleteTemplate3.xml");
    testClassesJar.addAsResource("test/metadata/configuration/constraint.xml");
    testClassesJar.addAsResource("test/metadata/configuration/constraintMinMax.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyChanging-v1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyChanging-v2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyList-v1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyList-v2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyList-simple.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyMap-v1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/propertyMap-v2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupDeleted-v1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupDeleted-v2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupPropDeleted-v1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupPropDeleted-v2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupPropDeleted-v3.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupPropDeleted-v4.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupPropMoved-v1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/groupPropMoved-v2.xml");
    testClassesJar.addAsResource("test/metadata/configuration/update5-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/configuration/update5-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/configuration/updateDefaultTemplate1.xml");
    testClassesJar.addAsResource("test/metadata/configuration/updateDefaultTemplate2.xml");
    testClassesJar.addAsResource("test/metadata/events/event1-1.xml");
    testClassesJar.addAsResource("test/metadata/events/event1-2.xml");
    testClassesJar.addAsResource("test/metadata/measurement/measurementDeletion-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/measurement/measurementDeletion-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/measurement/update-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/measurement/update-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/measurement/update6-1.xml");
    testClassesJar.addAsResource("test/metadata/measurement/update6-2.xml");
    testClassesJar.addAsResource("test/metadata/measurement/update7-1.xml");
    testClassesJar.addAsResource("test/metadata/measurement/update7-2.xml");
    testClassesJar.addAsResource("test/metadata/natives/update5-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/natives/update5-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/operation/operation1-1.xml");
    testClassesJar.addAsResource("test/metadata/operation/operation1-2.xml");
    testClassesJar.addAsResource("test/metadata/operation/operation2-1.xml");
    testClassesJar.addAsResource("test/metadata/operation/operation2-2.xml");
    testClassesJar.addAsResource("test/metadata/operation/operation3-1.xml");
    testClassesJar.addAsResource("test/metadata/operation/operation3-2.xml");
    testClassesJar.addAsResource("test/metadata/operation/update3-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/operation/update3-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/illegal-subcat-1.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-2children.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-grandchild.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-services-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-services-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-v1_1.xml");
    testClassesJar.addAsResource("test/metadata/resource/nested-subcat-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/no-subcat.xml");
    testClassesJar.addAsResource("test/metadata/resource/one-subcat-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/one-subcat-v1_1.xml");
    testClassesJar.addAsResource("test/metadata/resource/one-subcat-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/one-subcat-v3_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/services-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/services-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/resource/test-subcategories.xml");
    testClassesJar.addAsResource("test/metadata/resource/test-subcategories2.xml");
    testClassesJar.addAsResource("test/metadata/resource/test-subcategories3.xml");
    testClassesJar.addAsResource("test/metadata/resource/two-subcat.xml");
    testClassesJar.addAsResource("test/metadata/resource/undefined-child-subcat-1.xml");
    testClassesJar.addAsResource("test/metadata/resource-type/duplicateResourceType.xml");
    testClassesJar.addAsResource("test/metadata/resource-type/update2-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/resource-type/update2-v2_0.xml");
    testClassesJar.addAsResource("test/metadata/resource-type/update4-v1_0.xml");
    testClassesJar.addAsResource("test/metadata/resource-type/update4-v2_0.xml");
    testClassesJar.addAsResource(
        "test/metadata/resource-type/updateResourceTypeBundleTarget-v1.xml");
    testClassesJar.addAsResource(
        "test/metadata/resource-type/updateResourceTypeBundleTarget-v2.xml");

    // create test ear by starting with rhq.ear and thinning it
    MavenDependencyResolver earResolver = DependencyResolvers.use(MavenDependencyResolver.class);
    // this must be named rhq.ear because the "rhq" portion is used in the jndi names
    EnterpriseArchive testEar = ShrinkWrap.create(EnterpriseArchive.class, "rhq.ear");
    EnterpriseArchive rhqEar =
        earResolver
            .artifact("org.rhq:rhq-enterprise-server-ear:ear:4.6.0-SNAPSHOT")
            .resolveAs(EnterpriseArchive.class)
            .iterator()
            .next();
    // merge rhq.ear into testEar but include only the EJB jars and the supporting libraries. Note
    // that we
    // don't include the services sar because tests are responsible for prepare/unprepare of all
    // required services,
    // we don't want the production services performig any unexpected work.
    testEar = testEar.merge(rhqEar, Filters.include("/lib.*|/rhq.*ejb3\\.jar.*"));
    // remove startup beans and shutdown listeners, we don't want this to be a full server
    // deployment. The tests
    // start/stop what they need, typically with test services or mocks.
    testEar.delete(
        ArchivePaths.create(
            "/rhq-enterprise-server-ejb3.jar/org/rhq/enterprise/server/core/StartupBean.class"));
    testEar.delete(
        ArchivePaths.create(
            "/rhq-enterprise-server-ejb3.jar/org/rhq/enterprise/server/core/StartupBean$1.class"));
    testEar.delete(
        ArchivePaths.create(
            "/rhq-enterprise-server-ejb3.jar/org/rhq/enterprise/server/core/StartupBeanPreparation.class"));
    testEar.delete(
        ArchivePaths.create(
            "/rhq-enterprise-server-ejb3.jar/org/rhq/enterprise/server/core/ShutdownListener.class"));

    // replace the above startup beans with stripped down versions
    testEar.add(
        new ClassAsset(StrippedDownStartupBean.class),
        ArchivePaths.create(
            "/rhq-enterprise-server-ejb3.jar/org/rhq/enterprise/server/test/StrippedDownStartupBean.class"));
    testEar.add(
        new ClassAsset(StrippedDownStartupBeanPreparation.class),
        ArchivePaths.create(
            "/rhq-enterprise-server-ejb3.jar/org/rhq/enterprise/server/test/"
                + "StrippedDownStartupBeanPreparation.class"));

    // add the test classes to the deployment
    testEar.addAsLibrary(testClassesJar);

    // add the necessary AS7 dependency modules
    testEar.addAsManifestResource("jboss-deployment-structure.xml");

    // add the application xml declaring the ejb jars
    testEar.setApplicationXML("application.xml");

    // add additional 3rd party dependent jars needed to support test classes
    MavenDependencyResolver resolver = DependencyResolvers.use(MavenDependencyResolver.class);
    resolver.loadMetadataFromPom("pom.xml");
    Collection<JavaArchive> dependencies = new HashSet<JavaArchive>();
    dependencies.addAll(
        resolver.artifact("org.powermock:powermock-api-mockito").resolveAs(JavaArchive.class));
    dependencies.addAll(
        resolver.artifact("org.liquibase:liquibase-core").resolveAs(JavaArchive.class));
    dependencies.addAll(resolver.artifact("joda-time:joda-time").resolveAs(JavaArchive.class));
    dependencies.addAll(
        resolver
            .artifact("org.jboss.shrinkwrap:shrinkwrap-impl-base")
            .resolveAs(JavaArchive.class));
    dependencies.addAll(
        resolver.artifact("org.rhq:rhq-core-client-api:jar:tests").resolveAs(JavaArchive.class));
    dependencies.addAll(resolver.artifact("org.rhq:test-utils").resolveAs(JavaArchive.class));
    dependencies.addAll(
        resolver.artifact("org.rhq.helpers:perftest-support").resolveAs(JavaArchive.class));

    // If we're running oracle we need to include the OJDBC driver because dbunit needs it. Note
    // that we need
    // add it explicitly even though it is a provided module used by the datasource.
    if (!Boolean.valueOf(System.getProperty("rhq.skip.oracle"))) {
      // in proxy situations (like Jenkins) shrinkwrap won't be able to find repositories defined in
      // settings.xml profiles.  We know at this point the driver is in the local repo, try going
      // offline
      // at this point to force local repo resolution since the oracle driver is not in public
      // repos.
      // see
      // http://stackoverflow.com/questions/6291146/arquillian-shrinkwrap-mavendependencyresolver-behind-proxy
      resolver.goOffline();
      dependencies.addAll(
          resolver
              .artifact("com.oracle:ojdbc6:jar:" + System.getProperty("rhq.ojdbc.version"))
              .resolveAs(JavaArchive.class));
    }

    // Transitive deps required by the above and for some reason not sucked in. Note that
    // these require an explicit version. TODO (jshaughn): Can we make these transitive or
    // avoid the explicit version?
    // dep required byt rhq-core-client-api test-jar
    dependencies.addAll(
        resolver.artifact("commons-jxpath:commons-jxpath:1.3").resolveAs(JavaArchive.class));

    // exclude any transitive deps we don't want
    String[] excludeFilters = {"testng.*jdk", "rhq-core-domain.*jar"};
    dependencies = exclude(dependencies, excludeFilters);

    testEar.addAsLibraries(dependencies);

    // Print out the test EAR structure
    // System.out.println("** The Deployment EAR: " + testEar.toString(true) + "\n");

    // Save the test EAR to a zip file for inspection (set file explicitly)
    // exportZip(testEar, new File("/home/jshaughn/temp/test-ear.ear"));

    return testEar;
  }
  private Archive<?> handleArchive(
      EnterpriseArchive applicationArchive,
      Collection<Archive<?>> auxiliaryArchives,
      WebArchive protocol,
      Processor processor,
      TestDeployment testDeployment) {
    Map<ArchivePath, Node> applicationArchiveWars =
        applicationArchive.getContent(Filters.include(".*\\.war"));
    if (applicationArchiveWars.size() == 1) {
      ArchivePath warPath = applicationArchiveWars.keySet().iterator().next();
      try {
        handleArchive(
            applicationArchive.getAsType(WebArchive.class, warPath),
            new ArrayList<
                Archive<
                    ?>>(), // reuse the War handling, but Auxiliary Archives should be added to the
                           // EAR, not the WAR
            protocol,
            processor);
      } catch (IllegalArgumentException e) {
        throw new IllegalArgumentException(
            "Can not manipulate war's that are not of type " + WebArchive.class, e);
      }
    } else if (applicationArchiveWars.size() > 1) {
      Archive<?> archiveToTest = testDeployment.getArchiveForEnrichment();
      if (archiveToTest == null) {
        throw new UnsupportedOperationException(
            "Multiple WebArchives found in "
                + applicationArchive.getName()
                + ". Can not determine which to enrich");
      } else if (!archiveToTest.getName().endsWith(".war")) {
        // TODO: Removed throwing an exception when EJB modules are supported as well
        throw new UnsupportedOperationException("Archive to test is not a WebArchive!");
      } else {
        handleArchive(
            archiveToTest.as(WebArchive.class),
            new ArrayList<
                Archive<
                    ?>>(), // reuse the War handling, but Auxiliary Archives should be added to the
                           // EAR, not the WAR
            protocol,
            processor);
      }
    } else {
      // SHRINKWRAP-187, to eager on not allowing overrides, delete it first
      protocol.delete(WEB_XML_PATH);
      applicationArchive.addAsModule(
          protocol.setWebXML(new StringAsset(WebUtils.createNewDescriptor().exportAsString())));

      if (applicationArchive.contains(APPLICATION_XML_PATH)) {
        ApplicationDescriptor applicationXml =
            Descriptors.importAs(ApplicationDescriptor.class)
                .from(applicationArchive.get(APPLICATION_XML_PATH).getAsset().openStream());

        applicationXml.webModule(
            protocol.getName(), ServletUtil.calculateContextRoot(protocol.getName()));

        // SHRINKWRAP-187, to eager on not allowing overrides, delete it first
        applicationArchive.delete(APPLICATION_XML_PATH);
        applicationArchive.setApplicationXML(new StringAsset(applicationXml.exportAsString()));
      }

      processor.process(protocol);
    }
    applicationArchive.addAsLibraries(auxiliaryArchives.toArray(new Archive<?>[0]));
    return applicationArchive;
  }