/** * Inspects archive in order to find nested testable archive, assuming * * @return testable archive or passed one if nothing found */ private Archive<?> findTestableArchive(final Archive<?> archive) { final Map<ArchivePath, Node> nestedArchives = archive.getContent(Filters.include(WAR_AND_JAR)); if (!nestedArchives.isEmpty()) { for (ArchivePath path : nestedArchives.keySet()) { try { GenericArchive genericArchive = archive.getAsType(GenericArchive.class, path); if (genericArchive != null && Testable.isArchiveToTest(genericArchive)) { return genericArchive; } } catch (IllegalArgumentException e) { // no-op, Nested archive is not a ShrinkWrap archive. } } } return archive; }
@Test(expected = UnsupportedOperationException.class) public void shouldThrowExceptionOnEnterpriseArchiveWithMultipleMarkedWebArchives() throws Exception { new ServletProtocolDeploymentPackager().generateDeployment( new TestDeployment( ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear") .addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class))) .addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class))), createAuxiliaryArchives()), processors()); }
/** * Inspects archive in order to find nested testable archive, assuming * @param archive * @return testable archive or passed one if nothing found */ private Archive<?> findTestableArchive(final Archive<?> archive) { final Map<ArchivePath, Node> nestedArchives = archive.getContent(Filters.include(WAR_AND_JAR)); if (!nestedArchives.isEmpty()) { for (ArchivePath path : nestedArchives.keySet()) { try { GenericArchive genericArchive = archive.getAsType(GenericArchive.class, path); if (genericArchive != null && Testable.isArchiveToTest(genericArchive)) { return genericArchive; } } catch (IllegalArgumentException e) { // no-op, Nested archive is not a ShrinkWrap archive. } } } return archive; }
@Test(expected = UnsupportedOperationException.class) public void shouldThrowExceptionOnEnterpriseArchiveWithMultipleMarkedWebArchives() throws Exception { new ServletProtocolDeploymentPackager().generateDeployment( new TestDeployment( ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear") .addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class))) .addAsModule(Testable.archiveToTest(ShrinkWrap.create(WebArchive.class))), createAuxiliaryArchives()), processors()); }
/** * Inspects archive in order to find nested testable archive, assuming * @param archive * @return testable archive or passed one if nothing found */ private Archive<?> findTestableArchive(final Archive<?> archive) { final Map<ArchivePath, Node> nestedArchives = archive.getContent(Filters.include(WAR_AND_JAR)); if (!nestedArchives.isEmpty()) { for (ArchivePath path : nestedArchives.keySet()) { try { GenericArchive genericArchive = archive.getAsType(GenericArchive.class, path); if (Testable.isArchiveToTest(genericArchive)) { return genericArchive; } } catch (IllegalArgumentException e) { // no-op, Nested archive is not a ShrinkWrap archive. } } } return archive; }
@Test public void shouldHandleEnterpriseArchiveWithMultipleWebArchiveAndOneMarkedWebArchive() throws Exception { WebArchive testableArchive = Testable.archiveToTest(ShrinkWrap.create(WebArchive.class)); Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment( new TestDeployment( ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear") .addAsModule(testableArchive) .addAsModule(ShrinkWrap.create(WebArchive.class)), createAuxiliaryArchives()), processors()); Assert.assertFalse( "Verify that the auxiliaryArchives was not added", archive.contains(ArchivePaths.create("arquillian-protocol.war"))); Assert.assertTrue( "Verify that the auxiliaryArchives are placed in /lib", archive.contains(ArchivePaths.create("/lib/auxiliaryArchive1.jar"))); Assert.assertTrue( "Verify that the auxiliaryArchives are placed in /lib", archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar"))); String webXmlContent = TestUtil.convertToString( testableArchive.get("WEB-INF/lib/arquillian-protocol.jar/META-INF/web-fragment.xml").getAsset().openStream()); Assert.assertTrue( "verify that the ServletTestRunner servlet was added to the web.xml of the existing web archive", webXmlContent.contains(ServletTestRunner.class.getName())); Assert.assertTrue( "Verify protocol Processor SPI was called", DummyProcessor.wasCalled); }
/** * Convenience method to lookup the user tagged archive for enriching. * * @return The tagged Archive or ApplicationArchive if none are tagged */ public Archive<?> getArchiveForEnrichment() { if (archiveForEnrichment == null) { // TODO: Extend to EJBs once they are supported Map<ArchivePath, Node> nested = applicationArchive.getContent(Filters.include(".*\\.war")); if (!nested.isEmpty()) { for (ArchivePath path : nested.keySet()) { try { GenericArchive genericArchive = applicationArchive.getAsType(GenericArchive.class, path); if (Testable.isArchiveToTest(genericArchive)) { if (archiveForEnrichment != null) { throw new UnsupportedOperationException("Multiple marked Archives found in " + applicationArchive.getName() + ". Can not determine which to enrich"); } archiveForEnrichment = genericArchive; } } catch (IllegalArgumentException e) { // no-op, Nested archive is not a ShrinkWrap archive. } } } } else { archiveForEnrichment = applicationArchive; } return archiveForEnrichment; }
@Test public void shouldHandleEnterpriseArchiveWithMultipleWebArchiveAndOneMarkedWebArchive() throws Exception { WebArchive testableArchive = Testable.archiveToTest(ShrinkWrap.create(WebArchive.class)); Archive<?> archive = new ServletProtocolDeploymentPackager().generateDeployment( new TestDeployment( ShrinkWrap.create(EnterpriseArchive.class, "applicationArchive.ear") .addAsModule(testableArchive) .addAsModule(ShrinkWrap.create(WebArchive.class)), createAuxiliaryArchives()), processors()); Assert.assertFalse( "Verify that the auxiliaryArchives was not added", archive.contains(ArchivePaths.create("arquillian-protocol.war"))); Assert.assertTrue( "Verify that the auxiliaryArchives are placed in /lib", archive.contains(ArchivePaths.create("/lib/auxiliaryArchive1.jar"))); Assert.assertTrue( "Verify that the auxiliaryArchives are placed in /lib", archive.contains(ArchivePaths.create("/lib/auxiliaryArchive2.jar"))); String webXmlContent = TestUtil.convertToString(testableArchive.get("WEB-INF/web.xml").getAsset().openStream()); Assert.assertTrue( "verify that the ServletTestRunner servlet was added to the web.xml of the existing web archive", webXmlContent.contains(ServletTestRunner.class.getName())); Assert.assertTrue( "Verify protocol Processor SPI was called", DummyProcessor.wasCalled); }
/** * Convenience method to lookup the user tagged archive for enriching. * * @return The tagged Archive or ApplicationArchive if none are tagged */ public Archive<?> getArchiveForEnrichment() { if (archiveForEnrichment == null) { // TODO: Extend to EJBs once they are supported Map<ArchivePath, Node> nested = applicationArchive.getContent(Filters.include(".*\\.war")); if (!nested.isEmpty()) { for (ArchivePath path : nested.keySet()) { try { GenericArchive genericArchive = applicationArchive.getAsType(GenericArchive.class, path); if (Testable.isArchiveToTest(genericArchive)) { if (archiveForEnrichment != null) { throw new UnsupportedOperationException("Multiple marked Archives found in " + applicationArchive.getName() + ". Can not determine which to enrich"); } archiveForEnrichment = genericArchive; } } catch (IllegalArgumentException e) { // no-op, Nested archive is not a ShrinkWrap archive. } } } } else { archiveForEnrichment = applicationArchive; } return archiveForEnrichment; }
@Deployment public static EnterpriseArchive createTestArchive() { EnterpriseArchive enterpriseArchive = new EnterpriseArchiveBuilder() .withTestClassDefinition(InterceptorModularityTest.class) .withClasses(Checker.class, BarBinding.class, Animal.class, Cow.class, BarSuperInterceptor.class) .withBeansXml(Descriptors.create(BeansDescriptor.class).getOrCreateAlternatives().clazz(Cow.class.getName()).up()) .noDefaultWebModule().build(); JavaArchive fooArchive = ShrinkWrap.create(JavaArchive.class, TEST1_JAR) .addClasses(BarInterceptor.class, Dog.class, DummySessionBean.class) .setManifest(new StringAsset(Descriptors.create(ManifestDescriptor.class) .addToClassPath(EnterpriseArchiveBuilder.DEFAULT_EJB_MODULE_NAME) .exportAsString())) .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); enterpriseArchive.addAsModule(fooArchive); WebArchive barArchive = Testable.archiveToTest(new WebArchiveBuilder().notTestArchive().withName("test2.war") .withClasses(InterceptorModularityTest.class, Bar.class, Cat.class) .build() .setManifest( new StringAsset(Descriptors.create(ManifestDescriptor.class) .addToClassPath(EnterpriseArchiveBuilder.DEFAULT_EJB_MODULE_NAME) .addToClassPath(TEST1_JAR) .exportAsString()))); enterpriseArchive.addAsModule(barArchive); return enterpriseArchive; }
@Deployment(testable = false) public static EnterpriseArchive createTestArchive() { EnterpriseArchive enterpriseArchive = new EnterpriseArchiveBuilder() .notTestArchive() .withClasses(Collector.class, ObserverNames.class, Helper.class).noDefaultWebModule().build(); StringAsset applicationXml = new StringAsset(Descriptors.create(ApplicationDescriptor.class) .version(EnterpriseArchiveBuilder.DEFAULT_APP_VERSION).applicationName("Test").createModule() .ejb(EnterpriseArchiveBuilder.DEFAULT_EJB_MODULE_NAME).up().createModule().getOrCreateWeb().webUri(TEST1_ARCHIVE_NAME+".war") .contextRoot("/"+TEST1_ARCHIVE_NAME).up().up().createModule().getOrCreateWeb().webUri(TEST2_ARCHIVE_NAME+".war").contextRoot("/"+TEST2_ARCHIVE_NAME).up() .up().exportAsString()); enterpriseArchive.setApplicationXML(applicationXml); WebArchive fooArchive = new WebArchiveBuilder().notTestArchive().withName(TEST1_ARCHIVE_NAME+".war") .withClasses(Observer2.class, PingServlet.class).withDefaultEjbModuleDependency().build(); enterpriseArchive.addAsModule(Testable.archiveToTest(fooArchive)); WebArchive barArchive = new WebArchiveBuilder().notTestArchive().withName(TEST2_ARCHIVE_NAME+".war").withClasses(Observer3.class, PingServlet.class) .withDefaultEjbModuleDependency().build(); enterpriseArchive.addAsModule(barArchive); return enterpriseArchive; }
@Deployment public static EnterpriseArchive createTestArchive() { EnterpriseArchive enterpriseArchive = new EnterpriseArchiveBuilder() .withTestClassDefinition(MultiWebModuleWithExtensionTest.class).withClasses(SimpleLogger.class) .noDefaultWebModule().build(); StringAsset applicationXml = new StringAsset(Descriptors.create(ApplicationDescriptor.class) .version(EnterpriseArchiveBuilder.DEFAULT_APP_VERSION).applicationName("Test").createModule() .ejb(EnterpriseArchiveBuilder.DEFAULT_EJB_MODULE_NAME).up().createModule().getOrCreateWeb().webUri("foo.war") .contextRoot("/foo").up().up().createModule().getOrCreateWeb().webUri("bar.war").contextRoot("/bar").up().up() .exportAsString()); enterpriseArchive.setApplicationXML(applicationXml); WebArchive fooArchive = Testable.archiveToTest(new WebArchiveBuilder().notTestArchive().withName("foo.war") .withClasses(MultiWebModuleWithExtensionTest.class, FooWebBean.class) .withBeanLibrary("foo.jar", FooExtension.class, FooBean.class).withDefaultEjbModuleDependency().build()); enterpriseArchive.addAsModule(fooArchive); WebArchive barArchive = new WebArchiveBuilder().notTestArchive().withName("bar.war").withClasses(BarWebBean.class) .withBeanLibrary("bar.jar", BarExtension.class, BarBean.class).withDefaultEjbModuleDependency().build(); enterpriseArchive.addAsModule(barArchive); return enterpriseArchive; }