package org.ops4j.pax.exam.spi.war; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import static org.ops4j.pax.exam.CoreOptions.maven; import static org.ops4j.pax.exam.CoreOptions.warProbe; import static org.ops4j.pax.exam.spi.Probes.builder; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.MalformedURLException; import java.net.URI; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.ops4j.io.FileUtils; import org.ops4j.io.StreamUtils; import org.ops4j.pax.exam.Info; import org.ops4j.pax.exam.TestProbeBuilder; import org.ops4j.pax.exam.TestProbeProvider; import org.ops4j.pax.exam.options.WarProbeOption; import org.ops4j.pax.exam.spi.DefaultExamSystem; import org.ops4j.pax.exam.spi.ExamReactor; import org.ops4j.pax.exam.spi.reactors.PerSuite; public class WarBuilderTest { private File tempDir; private ZipFile war; @BeforeClass public static void setUp() throws IOException { File pomProperties = new File("target/classes/META-INF/maven/org.ops4j.pax.exam/pax-exam-spi/pom.properties"); if (!pomProperties.exists()) { pomProperties.getParentFile().mkdirs(); PrintWriter writer = new PrintWriter(new FileOutputStream(pomProperties)); writer.println("artifactId = pax-exam-spi"); writer.println("version = " + Info.getPaxExamVersion()); writer.close(); } } @Before public void before() { tempDir = DefaultExamSystem.createTempDir(); } @After public void tearDown() { FileUtils.delete(tempDir); if (war != null) { try { war.close(); } catch (IOException e) { // ignore } } } @Test public void buildWar() throws MalformedURLException, IOException { war = localCopy(warProbe().library("target/classes")); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/lib/pax-exam-spi-" + Info.getPaxExamVersion() + ".jar"), is(notNullValue())); } private ZipFile localCopy(WarProbeOption option) throws IOException { TestProbeBuilder builder = builder(option); builder.setTempDir(tempDir); TestProbeProvider provider = builder.build(); InputStream is = provider.getStream(); File out = new File("target/out.war"); StreamUtils.copyStream(is, new FileOutputStream(out), true); return new ZipFile(out); } @Test public void buildWarWithWebResource() throws MalformedURLException, IOException { war = localCopy(warProbe().library("target/classes").webInfResource( "src/test/assets/web.xml")); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/web.xml"), is(notNullValue())); } @Test public void buildWarWithOverlay() throws MalformedURLException, IOException { war = localCopy(warProbe().overlay("target/test-war-dump.war")); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/web.xml"), is(notNullValue())); } @Test public void buildWarWithOverlayFromMaven() throws MalformedURLException, IOException { System.setProperty("java.protocol.handler.pkgs", "sun.net.www.protocol|org.ops4j.pax.url"); war = localCopy(warProbe().overlay( maven("com.googlecode.jeeunit", "jeeunit-example-test", "0.8.0").type("war"))); System.clearProperty("java.protocol.handler.pkgs"); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); ZipEntry webXml = war.getEntry("WEB-INF/web.xml"); assertThat(webXml, is(notNullValue())); } @Test public void buildWarAutoClassPath() throws MalformedURLException, IOException { war = localCopy(warProbe().classPathDefaultExcludes()); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/lib/mockito-all-1.9.5.jar"), is(notNullValue())); String entry = String.format("WEB-INF/lib/tinybundles-%s.jar", Info.getPaxTinybundlesVersion()); assertThat(war.getEntry(entry), is(nullValue())); } @Test public void buildWarAutoClassPathNoFilter() throws MalformedURLException, IOException { war = localCopy(warProbe().exclude()); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); String entry = String.format("WEB-INF/lib/tinybundles-%s.jar", Info.getPaxTinybundlesVersion()); assertThat(war.getEntry(entry), is(notNullValue())); } @Test public void buildWarAutoClassPathWindows() throws MalformedURLException, IOException { war = localCopy(warProbe().exclude()); Enumeration<? extends ZipEntry> e = war.entries(); while (e.hasMoreElements()) { ZipEntry entry = e.nextElement(); assertThat(entry.getName().contains("\\"), is(false)); } } @Test public void buildWarWithClasses() throws MalformedURLException, IOException { war = localCopy(warProbe().classes(ExamReactor.class, PerSuite.class)); assertThat(war.getEntry("WEB-INF/beans.xml"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/classes/org/ops4j/pax/exam/spi/ExamReactor.class"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/classes/org/ops4j/pax/exam/spi/reactors/PerSuite.class"), is(notNullValue())); assertThat(war.getEntry("WEB-INF/classes/org/ops4j/pax/exam/spi/reactors/PerClass.class"), is(nullValue())); } @Test public void buildWarAutoClassPathCustomFilter() throws MalformedURLException, IOException { war = localCopy(warProbe().exclude("mockito", ".cp")); assertThat(war.getEntry("WEB-INF/lib/mockito-all-1.9.5.jar"), is(nullValue())); } @Test public void buildEmptyWar() throws IOException { war = localCopy(warProbe()); ZipEntry beansXml = war.getEntry("WEB-INF/beans.xml"); assertThat(beansXml, is(notNullValue())); assertThat(beansXml.getSize(), is(0L)); } @Test public void buildWarWithName() throws MalformedURLException, IOException { WarBuilder warBuilder = new WarBuilder(DefaultExamSystem.createTempDir(), warProbe().library("target/classes").name("foo")); URI uri = warBuilder.buildWar(); assertThat(new File(uri).getName(), is("foo.war")); } }