/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.aries.web.converter.itest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.ops4j.pax.exam.CoreOptions.composite; import static org.ops4j.pax.exam.CoreOptions.junitBundles; import static org.ops4j.pax.exam.CoreOptions.options; import static org.ops4j.pax.exam.CoreOptions.systemProperty; import static org.ops4j.pax.exam.CoreOptions.vmOption; import static org.ops4j.pax.exam.CoreOptions.when; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Dictionary; import javax.inject.Inject; import org.apache.aries.itest.AbstractIntegrationTest; import org.apache.aries.unittest.fixture.ArchiveFixture; import org.apache.aries.unittest.fixture.ArchiveFixture.ZipFixture; import org.junit.Test; import org.junit.runner.RunWith; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.CoreOptions; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.PaxExam; import org.ops4j.pax.exam.options.MavenArtifactProvisionOption; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerClass; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; @RunWith(PaxExam.class) @ExamReactorStrategy(PerClass.class) public class WabConverterITest extends AbstractIntegrationTest { @Inject protected BundleContext bundleContext; private void createTestWar(File warFile) throws IOException { ZipFixture testWar = ArchiveFixture.newJar().binary( "WEB-INF/classes/org/apache/aries/web/test/TestClass.class", getClass().getClassLoader().getResourceAsStream( "org/apache/aries/web/test/TestClass.class")); FileOutputStream fout = new FileOutputStream(warFile); testWar.writeOut(fout); fout.close(); } @Test public void getStarted() throws Exception { File testWar = File.createTempFile("test", ".war"); createTestWar(testWar); String baseUrl = "webbundle:" + testWar.toURI().toURL().toExternalForm(); assertTrue("Time out waiting for webbundle URL handler", waitForURLHandler(baseUrl)); Bundle converted = bundleContext.installBundle(baseUrl + "?Bundle-SymbolicName=test.war.bundle&Web-ContextPath=foo"); assertNotNull(converted); Dictionary<String, String> man = converted.getHeaders(); assertEquals("test.war.bundle", man.get(Constants.BUNDLE_SYMBOLICNAME)); assertEquals("/foo", man.get("Web-ContextPath")); assertTrue(man.get(Constants.IMPORT_PACKAGE).contains("javax.naming")); new File("test.war").delete(); } private boolean waitForURLHandler(String url) { int maxRepetition = 100; for (int i = 0; i < maxRepetition; i++) { try { new URL(url); return true; } catch (MalformedURLException e) { try { Thread.sleep(100); } catch (InterruptedException ee) { return false; } } } return false; } public Option baseOptions() { String localRepo = getLocalRepo(); return composite( junitBundles(), systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("INFO"), when(localRepo != null).useOptions( vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + localRepo))); } @Configuration public Option[] configuration() { return options( // bootDelegation(), baseOptions(), mavenBundle("org.osgi", "org.osgi.compendium"), mavenBundle("org.apache.felix", "org.apache.felix.configadmin"), // Bundles mavenBundle("org.apache.aries.web", "org.apache.aries.web.urlhandler"), mavenBundle("org.apache.aries", "org.apache.aries.util"), mavenBundle("org.ow2.asm", "asm-debug-all"), mavenBundle("org.apache.aries.proxy", "org.apache.aries.proxy"), mavenBundle("org.apache.aries.testsupport", "org.apache.aries.testsupport.unit")); } private MavenArtifactProvisionOption mavenBundle(String groupId, String artifactId) { return CoreOptions.mavenBundle().groupId(groupId) .artifactId(artifactId).versionAsInProject(); } }