You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ma...@apache.org on 2010/01/17 13:40:18 UTC

svn commit: r900127 - in /incubator/aries/trunk: testsupport/ testsupport/testsupport-unit/ testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/ web/ web/web-itests/ web/web-itests/.settings/ web/web-itests/src/ web/web-itests/...

Author: mahrwald
Date: Sun Jan 17 12:40:17 2010
New Revision: 900127

URL: http://svn.apache.org/viewvc?rev=900127&view=rev
Log:
ARIES-115 Add itest for webbundle url handler

Added:
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/
    incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/ArchiveFixture.java
    incubator/aries/trunk/web/web-itests/   (with props)
    incubator/aries/trunk/web/web-itests/.classpath
    incubator/aries/trunk/web/web-itests/.project
    incubator/aries/trunk/web/web-itests/.settings/
    incubator/aries/trunk/web/web-itests/.settings/org.eclipse.jdt.core.prefs
    incubator/aries/trunk/web/web-itests/.settings/org.maven.ide.eclipse.prefs
    incubator/aries/trunk/web/web-itests/pom.xml
    incubator/aries/trunk/web/web-itests/src/
    incubator/aries/trunk/web/web-itests/src/main/
    incubator/aries/trunk/web/web-itests/src/main/java/
    incubator/aries/trunk/web/web-itests/src/main/resources/
    incubator/aries/trunk/web/web-itests/src/test/
    incubator/aries/trunk/web/web-itests/src/test/java/
    incubator/aries/trunk/web/web-itests/src/test/java/org/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/itest/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/itest/WabConverterITest.java
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/test/
    incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/test/TestClass.java
    incubator/aries/trunk/web/web-itests/src/test/resources/
Modified:
    incubator/aries/trunk/testsupport/pom.xml
    incubator/aries/trunk/testsupport/testsupport-unit/pom.xml
    incubator/aries/trunk/web/pom.xml

Modified: incubator/aries/trunk/testsupport/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/pom.xml?rev=900127&r1=900126&r2=900127&view=diff
==============================================================================
--- incubator/aries/trunk/testsupport/pom.xml (original)
+++ incubator/aries/trunk/testsupport/pom.xml Sun Jan 17 12:40:17 2010
@@ -54,4 +54,25 @@
         <module>testsupport-unit</module>
     </modules>
 
+		<build>
+		    <pluginManagement>
+		        <plugins>
+		            <plugin>
+		                <groupId>org.apache.felix</groupId>
+		                <artifactId>maven-bundle-plugin</artifactId>
+		                <version>2.0.1</version>
+		            </plugin>
+		            <plugin>
+		                <groupId>org.apache.maven.plugins</groupId>
+		                <artifactId>maven-release-plugin</artifactId>
+		                <configuration>
+		                    <useReleaseProfile>false</useReleaseProfile>
+		                    <goals>deploy</goals>
+		                    <arguments>-Papache-release,deploy</arguments>
+		                </configuration>
+		            </plugin>
+		        </plugins>
+		    </pluginManagement>
+		</build>
+
 </project>

Modified: incubator/aries/trunk/testsupport/testsupport-unit/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/testsupport-unit/pom.xml?rev=900127&r1=900126&r2=900127&view=diff
==============================================================================
--- incubator/aries/trunk/testsupport/testsupport-unit/pom.xml (original)
+++ incubator/aries/trunk/testsupport/testsupport-unit/pom.xml Sun Jan 17 12:40:17 2010
@@ -1,22 +1,21 @@
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <!--
+    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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
 
   <parent>
@@ -26,23 +25,45 @@
   </parent>
 
   <artifactId>org.apache.aries.testsupport.unit</artifactId>
-  <packaging>jar</packaging>
+  <packaging>bundle</packaging>
   <name>Apache Aries Unit Test Support</name>
   <description>
       This bundle provides unit test support.
   </description>
-  
+
   <dependencies>
-      <dependency>
-          <groupId>junit</groupId>
-          <artifactId>junit</artifactId>
-          <scope>provided</scope>
-      </dependency>
-      <dependency>
-          <groupId>org.osgi</groupId>
-          <artifactId>org.osgi.core</artifactId>
-          <scope>provided</scope>
-      </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.felix</groupId>
+        <artifactId>maven-bundle-plugin</artifactId>
+        <extensions>true</extensions>
+        <configuration>
+          <instructions>
+            <Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
+            <Export-Package>
+              org.apache.aries.unittest.fixture
+            </Export-Package>
+            <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))
+            </_versionpolicy>
+            <_removeheaders>Ignore-Package,Include-Resource,Private-Package,Bundle-DocURL
+            </_removeheaders>
+          </instructions>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
 </project>

Added: incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/ArchiveFixture.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/ArchiveFixture.java?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/ArchiveFixture.java (added)
+++ incubator/aries/trunk/testsupport/testsupport-unit/src/main/java/org/apache/aries/unittest/fixture/ArchiveFixture.java Sun Jan 17 12:40:17 2010
@@ -0,0 +1,472 @@
+/**
+ *  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.unittest.fixture;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.jar.Attributes;
+import java.util.jar.JarOutputStream;
+import java.util.jar.Manifest;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import org.osgi.framework.Constants;
+
+/**
+ * Utility class for creating archive-based fixtures such as EBA archives, jar files etc.
+ * This class provides a flow based api for defining such fixtures. For example, a simple EBA archive could 
+ * be defined as such:
+ * 
+ * <code>
+ * ArchiveFixtures.ZipFixture zip = ArchiveFixtures.newZip()
+ *   .jar("test.jar")
+ *     .manifest()
+ *       .symbolicName("com.ibm.test")
+ *       .version("2.0.0")
+ *     .end()
+ *     .file("random.txt", "Some text")
+ *   .end();
+ * </code>
+ * 
+ * This defines a zip archive containing a single jar file (hence no application manifest). The jar file itself has
+ * a manifest and a text file.
+ * 
+ * To actually create the physical archive use the <code>writeOut</code> method on the archive fixture.
+ */
+public class ArchiveFixture
+{
+  /**
+   * Create a new zip file fixture
+   * @return
+   */
+  public static ZipFixture newZip() {
+    return new ZipFixture(null);
+  }
+  
+  /**
+   * Create a new jar file fixture
+   * @return
+   */
+  public static JarFixture newJar() {
+    return new JarFixture(null);
+  }
+  
+  /**
+   * Utility to copy an InputStream into an OutputStream. Closes the InputStream afterwards.
+   * @param in
+   * @param out
+   * @throws IOException
+   */
+  private static void copy(InputStream in, OutputStream out) throws IOException
+  {
+    try {
+      int len;
+      byte[] b = new byte[1024];
+      while ((len = in.read(b)) != -1)
+        out.write(b,0,len);
+    }
+    finally {
+      in.close();
+    }
+  }
+
+  /**
+   * Base interface for every fixture.
+   */
+  public interface Fixture {
+    /**
+     * Write the physical representation of the fixture to the given OutputStream
+     * @param out
+     * @throws IOException
+     */
+    void writeOut(OutputStream out) throws IOException;
+  }
+  
+  /**
+   * Abstract base class for fixtures. Archive fixtures are by nature hierarchical.
+   */
+  public static abstract class AbstractFixture implements Fixture {
+    private ZipFixture parent;
+    
+    protected AbstractFixture(ZipFixture parent) {
+      this.parent = parent;
+    }
+    
+    /**
+     * Ends the current flow target and returns the parent flow target. For example, in the
+     * following code snippet the <code>end</code> after <code>.version("2.0.0")</code> marks
+     * the end of the manifest. Commands after that relate to the parent jar file of the manifest.
+     * 
+     * <code>
+     * ArchiveFixtures.ZipFixture zip = ArchiveFixtures.newZip()
+     *   .jar("test.jar")
+     *     .manifest()
+     *       .symbolicName("com.ibm.test")
+     *       .version("2.0.0")
+     *     .end()
+     *     .file("random.txt", "Some text")
+     *   .end();
+     * </code>
+     * @return
+     */
+    public ZipFixture end() {
+      return parent;
+    }
+  }
+
+  /**
+   * Simple fixture for text files.
+   */
+  public static class FileFixture extends AbstractFixture {
+    private StringBuffer text = new StringBuffer();
+    
+    protected FileFixture(ZipFixture parent) {
+      super(parent);
+    }
+    
+    /**
+     * Add a line to the file fixture. The EOL character is added automatically.
+     * @param line
+     * @return
+     */
+    public FileFixture line(String line) {
+      text.append(line);
+      text.append("\n");
+      return this;
+    }
+    
+    public void writeOut(OutputStream out) throws IOException {
+      out.write(text.toString().getBytes());
+    }
+  }
+  
+  public static class IStreamFixture extends AbstractFixture {
+    private byte[] bytes;
+    
+    protected IStreamFixture(ZipFixture parent, InputStream input) throws IOException {
+      super(parent);
+
+      ByteArrayOutputStream output = new ByteArrayOutputStream();
+      try {
+        copy(input, output);
+      } finally {
+        output.close();
+      }
+      
+      bytes = output.toByteArray();
+    }
+
+    public void writeOut(OutputStream out) throws IOException {
+      copy(new ByteArrayInputStream(bytes), out);
+    }
+  }
+  
+  /**
+   * Fixture for (bundle) manifests. By default, they contain the lines
+   * 
+   * <code>
+   * Manifest-Version: 1
+   * Bundle-ManifestVersion: 2
+   * </code>
+   */
+  public static class ManifestFixture extends AbstractFixture {
+    private Manifest mf;
+    
+    protected Manifest getManifest()
+    {
+      return mf;
+    }
+    
+    protected ManifestFixture(ZipFixture parent) {
+      super(parent);
+      mf = new Manifest();
+      mf.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1");
+      mf.getMainAttributes().putValue(Constants.BUNDLE_MANIFESTVERSION, "2");
+    }
+    
+    /**
+     * Set the symbolic name of the bundle
+     * @param name
+     * @return
+     */
+    public ManifestFixture symbolicName(String name)
+    {
+      mf.getMainAttributes().putValue(Constants.BUNDLE_SYMBOLICNAME, name);
+      return this;
+    }
+    
+    /**
+     * Set the version of the bundle
+     * @param version
+     * @return
+     */
+    public ManifestFixture version(String version)
+    {
+      mf.getMainAttributes().putValue(Constants.BUNDLE_VERSION, version);
+      return this;
+    }
+    
+    /**
+     * Add a custom attribute to the manifest. Use the more specific methods for symbolic name and version.
+     * @param name
+     * @param value
+     * @return
+     */
+    public ManifestFixture attribute(String name, String value)
+    {
+      mf.getMainAttributes().putValue(name, value);
+      return this;
+    }
+    
+    public void writeOut(OutputStream out) throws IOException
+    {
+      mf.write(out);
+    }
+  }
+
+  /**
+   * Fixture for a jar archive. It offers the same functionality as zip fixtures.
+   * The main difference is that in a jar archive the manifest will be output as the first file,
+   * regardless of when it is added.
+   */
+  public static class JarFixture extends ZipFixture {
+    private ManifestFixture mfFixture;
+    
+    protected JarFixture(ZipFixture parent) {
+      super(parent);
+    }
+    
+    @Override
+    public ManifestFixture manifest()
+    {
+      if (mfFixture != null)
+        throw new IllegalStateException("Only one manifest allowed, you dummy ;)");
+      
+      mfFixture = new ManifestFixture(this);
+      return mfFixture;
+    }
+    
+    @Override
+    public void writeOut(OutputStream out) throws IOException
+    {
+      if (bytes == null) {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        JarOutputStream jout;
+        if (mfFixture != null)
+          jout = new JarOutputStream(bout, mfFixture.getManifest());
+        else
+          jout = new JarOutputStream(bout);
+        
+        try {
+          writeAllEntries(jout);
+        } finally {
+          jout.close();
+        }
+        
+        bytes = bout.toByteArray();
+      }
+      
+      ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
+      copy(bin, out);
+    }
+  }
+  
+  /**
+   * Base fixture for any kind of zip archive. Zip archives can contain any number of child archives 
+   * given by an archive type and a path. The order in which these child archives are added is important
+   * because it will be the order in which they are added to the zip.
+   */
+  public static class ZipFixture extends AbstractFixture {
+    protected static class ChildFixture {
+      public String path;
+      public Fixture fixture;
+      
+      public ChildFixture(String path, Fixture fixture)
+      {
+        this.path = path;
+        this.fixture = fixture;
+      }
+    }
+    
+    protected List<ChildFixture> children = new ArrayList<ChildFixture>();
+    protected byte[] bytes = null;
+    
+    protected ZipFixture(ZipFixture parent) {
+      super(parent);
+    }
+        
+    /**
+     * Create a child zip fixture at the given target.
+     * @param path
+     * @return
+     */
+    public ZipFixture zip(String path) {
+      ZipFixture res = new ZipFixture(this);
+      children.add(new ChildFixture(path, res));
+      
+      return res;
+    }
+    
+    /**
+     * Create a child jar fixture at the given path.
+     * @param path
+     * @return
+     */
+    public ZipFixture jar(String path) {
+      JarFixture res = new JarFixture(this);
+      children.add(new ChildFixture(path, res));
+      
+      return res;
+    }
+    
+    /**
+     * Create a complete child file fixture at the given path and with the content.
+     * Note: this will return the current zip fixture and not the file fixture.
+     * 
+     * @param path
+     * @param content
+     * @return
+     */
+    public ZipFixture file(String path, String content) 
+    {
+      return file(path).line(content).end();
+    }
+    
+    /**
+     * Create an empty file fixture at the given path.
+     * 
+     * @param path
+     * @return
+     */
+    public FileFixture file(String path)
+    {
+      FileFixture res = new FileFixture(this);
+      children.add(new ChildFixture(path, res));
+      
+      return res;
+    }
+    
+    /**
+     * Create a binary file with the content from the input stream
+     * @param path
+     * @param input
+     * @return
+     */
+    public ZipFixture binary(String path, InputStream input) throws IOException {
+      IStreamFixture child = new IStreamFixture(this, input);
+      children.add(new ChildFixture(path, child));
+      
+      return this;
+    }
+    
+    /**
+     * Create a binary file that is populated from content on the classloader
+     * @param path
+     * @param resourcePath Path that the resource can be found in the current classloader
+     * @return
+     */
+    public ZipFixture binary(String path, String resourcePath) throws IOException {
+      return binary(path, getClass().getClassLoader().getResourceAsStream(resourcePath));
+    }
+    
+    /**
+     * Create a manifest fixture at the given path.
+     * @return
+     */
+    public ManifestFixture manifest()
+    {
+      ManifestFixture res = new ManifestFixture(this);
+      children.add(new ChildFixture("META-INF/MANIFEST.MF", res));
+      
+      return res;
+    }
+    
+    /**
+     * Ensure that the necessary directory entries for the entry are available
+     * in the zip file. Newly created entries are added to the set of directories.
+     * 
+     * @param zout
+     * @param entry
+     * @param existingDirs
+     * @throws IOException
+     */
+    private void mkDirs(ZipOutputStream zout, String entry, Set<String> existingDirs) throws IOException
+    {
+      String[] parts = entry.split("/");
+      String dirName = "";
+      for (int i=0;i<parts.length-1;i++) {
+        dirName += parts[i] + "/";
+        if (!!!existingDirs.contains(dirName)) {
+          ZipEntry ze = new ZipEntry(dirName);
+          zout.putNextEntry(ze);
+          zout.closeEntry();
+          
+          existingDirs.add(dirName);
+        }
+      }
+    }
+    
+    /**
+     * Add all entries to the ZipOutputStream
+     * @param zout
+     * @throws IOException
+     */
+    protected void writeAllEntries(ZipOutputStream zout) throws IOException
+    {
+      Set<String> dirs = new HashSet<String>();
+      
+      for (ChildFixture child : children) {
+        mkDirs(zout, child.path, dirs);
+        
+        ZipEntry ze = new ZipEntry(child.path);
+        zout.putNextEntry(ze);
+        child.fixture.writeOut(zout);
+        zout.closeEntry();
+      }      
+    }
+    
+    public void writeOut(OutputStream out) throws IOException 
+    {
+      /*
+       * For better reuse this method delegate the writing to writeAllEntries, which
+       * can be reused by the JarFixture.
+       */
+      if (bytes == null) {
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+        ZipOutputStream zout = new ZipOutputStream(bout);
+        try {
+          writeAllEntries(zout);
+        } finally {
+          zout.close();
+        }
+        
+        bytes = bout.toByteArray();
+      }
+
+      ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
+      copy(bin, out);
+    }
+  }
+
+}

Modified: incubator/aries/trunk/web/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/pom.xml?rev=900127&r1=900126&r2=900127&view=diff
==============================================================================
--- incubator/aries/trunk/web/pom.xml (original)
+++ incubator/aries/trunk/web/pom.xml Sun Jan 17 12:40:17 2010
@@ -33,6 +33,7 @@
 
     <modules>
         <module>web-urlhandler</module>
+        <module>web-itests</module>
     </modules>
 
     <dependencyManagement>

Propchange: incubator/aries/trunk/web/web-itests/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sun Jan 17 12:40:17 2010
@@ -0,0 +1 @@
+target

Added: incubator/aries/trunk/web/web-itests/.classpath
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/.classpath?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/.classpath (added)
+++ incubator/aries/trunk/web/web-itests/.classpath Sun Jan 17 12:40:17 2010
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
+	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Added: incubator/aries/trunk/web/web-itests/.project
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/.project?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/.project (added)
+++ incubator/aries/trunk/web/web-itests/.project Sun Jan 17 12:40:17 2010
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>web-itests</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.maven.ide.eclipse.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.maven.ide.eclipse.maven2Nature</nature>
+	</natures>
+</projectDescription>

Added: incubator/aries/trunk/web/web-itests/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/.settings/org.eclipse.jdt.core.prefs?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/.settings/org.eclipse.jdt.core.prefs (added)
+++ incubator/aries/trunk/web/web-itests/.settings/org.eclipse.jdt.core.prefs Sun Jan 17 12:40:17 2010
@@ -0,0 +1,5 @@
+#Sun Jan 17 12:26:12 GMT 2010
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.source=1.5

Added: incubator/aries/trunk/web/web-itests/.settings/org.maven.ide.eclipse.prefs
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/.settings/org.maven.ide.eclipse.prefs?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/.settings/org.maven.ide.eclipse.prefs (added)
+++ incubator/aries/trunk/web/web-itests/.settings/org.maven.ide.eclipse.prefs Sun Jan 17 12:40:17 2010
@@ -0,0 +1,9 @@
+#Sun Jan 17 12:26:12 GMT 2010
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1

Added: incubator/aries/trunk/web/web-itests/pom.xml
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/pom.xml?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/pom.xml (added)
+++ incubator/aries/trunk/web/web-itests/pom.xml Sun Jan 17 12:40:17 2010
@@ -0,0 +1,172 @@
+  <!--
+    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.
+  -->
+<project>
+  <parent>
+    <artifactId>web</artifactId>
+    <groupId>org.apache.aries.web</groupId>
+    <version>1.0.0-incubating-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>org.apache.aries.web.itests</artifactId>
+  <packaging>jar</packaging>
+  <name>Apache Aries Web integration tests</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>asm</groupId>
+      <artifactId>asm-all</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.aries.testsupport</groupId>
+      <artifactId>org.apache.aries.testsupport.unit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <version>4.2.0</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.aries.blueprint</groupId>
+      <artifactId>org.apache.aries.blueprint.sample</artifactId>
+      <version>${version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.apache.felix.configadmin</artifactId>
+      <version>1.2.4</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.aries</groupId>
+      <artifactId>org.apache.aries.util</artifactId>
+      <version>${version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.aries.blueprint</groupId>
+      <artifactId>org.apache.aries.blueprint</artifactId>
+      <version>${version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.logging</groupId>
+      <artifactId>pax-logging-api</artifactId>
+      <version>1.4</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.logging</groupId>
+      <artifactId>pax-logging-service</artifactId>
+      <version>1.4</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam</artifactId>
+      <version>1.1.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-junit</artifactId>
+      <version>1.1.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.exam</groupId>
+      <artifactId>pax-exam-container-default</artifactId>
+      <version>1.1.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.swissbox</groupId>
+      <artifactId>pax-swissbox-tinybundles</artifactId>
+      <version>1.2.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.ops4j.pax.url</groupId>
+      <artifactId>pax-url-mvn</artifactId>
+      <version>1.0.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.aries.web</groupId>
+      <artifactId>org.apache.aries.web.urlhandler</artifactId>
+      <version>${version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.servicemix.tooling</groupId>
+        <artifactId>depends-maven-plugin</artifactId>
+        <version>1.1</version>
+        <executions>
+          <execution>
+            <id>generate-depends-file</id>
+            <goals>
+              <goal>generate-depends-file</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>ci-build-profile</id>
+      <activation>
+        <property>
+          <name>maven.repo.local</name>
+        </property>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+              <!--
+                when the local repo location has been specified, we need
+                to pass on this information to PAX mvn url
+              -->
+              <argLine>-Dorg.ops4j.pax.url.mvn.localRepository=${maven.repo.local}
+              </argLine>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>

Added: incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/itest/WabConverterITest.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/itest/WabConverterITest.java?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/itest/WabConverterITest.java (added)
+++ incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/converter/itest/WabConverterITest.java Sun Jan 17 12:40:17 2010
@@ -0,0 +1,209 @@
+/**
+ *  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.equinox;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.CoreOptions.wrappedBundle;
+import static org.ops4j.pax.exam.OptionUtils.combine;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.Dictionary;
+
+import org.apache.aries.unittest.fixture.ArchiveFixture;
+import org.apache.aries.unittest.fixture.ArchiveFixture.ZipFixture;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.CoreOptions;
+import org.ops4j.pax.exam.Inject;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.ops4j.pax.exam.options.BootDelegationOption;
+import org.ops4j.pax.exam.options.MavenArtifactProvisionOption;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Filter;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.Version;
+import org.osgi.util.tracker.ServiceTracker;
+
+@RunWith(JUnit4TestRunner.class)
+public class WabConverterITest {
+  public static final long DEFAULT_TIMEOUT = 30000;
+
+  @Inject
+  protected BundleContext bundleContext;
+
+  @Before
+  public void setUp() throws Exception {
+    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("test.war");
+    testWar.writeOut(fout);
+  }
+
+  @After
+  public void tearDown() throws Exception {
+    new File("test.war").delete();
+  }
+
+  
+  @Test
+  public void getStarted() throws Exception {    
+    Bundle warConverter = getBundle("org.apache.aries.web.urlhandler");
+    assertEquals(Bundle.ACTIVE, warConverter.getState());
+    
+    File testWar = new File("test.war");
+    Bundle converted = bundleContext.installBundle("webbundle:"+testWar.toURL().toExternalForm() 
+        + "?Bundle-SymbolicName=test.war.bundle");
+    
+    assertNotNull(converted);
+    Dictionary<String,String> man = converted.getHeaders();
+    
+    assertEquals("test.war.bundle", man.get(Constants.BUNDLE_SYMBOLICNAME));   
+    assertTrue(man.get(Constants.IMPORT_PACKAGE).contains("javax.naming"));
+  }
+
+  @org.ops4j.pax.exam.junit.Configuration
+  public static Option[] configuration() {
+    Option[] options = options(
+        bootDelegation(),
+        
+        // Log
+        mavenBundle("org.ops4j.pax.logging", "pax-logging-api"),
+        mavenBundle("org.ops4j.pax.logging", "pax-logging-service"),
+        // Felix Config Admin
+        mavenBundle("org.apache.felix", "org.apache.felix.configadmin"),
+        // Felix mvn url handler
+        mavenBundle("org.ops4j.pax.url", "pax-url-mvn"),
+
+        // this is how you set the default log level when using pax
+        // logging (logProfile)
+        systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
+
+        // Bundles
+        mavenBundle("org.apache.aries.web","org.apache.aries.web.urlhandler"),
+        mavenBundle("org.apache.aries", "org.apache.aries.util"),
+        mavenBundle("org.apache.aries.blueprint", "org.apache.aries.blueprint"), 
+        mavenBundle("org.osgi", "org.osgi.compendium"),
+        mavenBundle("org.apache.aries.testsupport", "org.apache.aries.testsupport.unit"),
+        mavenBundle("asm","asm-all"),
+
+        equinox().version("3.5.0"));
+    options = updateOptions(options);
+    return options;
+  }
+  
+  
+  protected Bundle getBundle(String symbolicName) {
+    return getBundle(symbolicName, null);
+  }
+
+  protected Bundle getBundle(String bundleSymbolicName, String version) {
+    Bundle result = null;
+    for (Bundle b : bundleContext.getBundles()) {
+      if (b.getSymbolicName().equals(bundleSymbolicName)) {
+        if (version == null
+            || b.getVersion().equals(Version.parseVersion(version))) {
+          result = b;
+          break;
+        }
+      }
+    }
+    return result;
+  }
+
+  public static BootDelegationOption bootDelegation() {
+    return new BootDelegationOption("org.apache.aries.unittest.fixture");
+  }
+  
+  public static MavenArtifactProvisionOption mavenBundle(String groupId,
+      String artifactId) {
+    return CoreOptions.mavenBundle().groupId(groupId).artifactId(artifactId)
+        .versionAsInProject();
+  }
+
+  protected static Option[] updateOptions(Option[] options) {
+    // We need to add pax-exam-junit here when running with the ibm
+    // jdk to avoid the following exception during the test run:
+    // ClassNotFoundException: org.ops4j.pax.exam.junit.Configuration
+    if ("IBM Corporation".equals(System.getProperty("java.vendor"))) {
+      Option[] ibmOptions = options(wrappedBundle(mavenBundle(
+          "org.ops4j.pax.exam", "pax-exam-junit")));
+      options = combine(ibmOptions, options);
+    }
+
+    return options;
+  }
+
+  protected <T> T getOsgiService(Class<T> type, long timeout) {
+    return getOsgiService(type, null, timeout);
+  }
+
+  protected <T> T getOsgiService(Class<T> type) {
+    return getOsgiService(type, null, DEFAULT_TIMEOUT);
+  }
+  
+  protected <T> T getOsgiService(Class<T> type, String filter, long timeout) {
+    return getOsgiService(null, type, filter, timeout);
+  }
+
+  protected <T> T getOsgiService(BundleContext bc, Class<T> type,
+      String filter, long timeout) {
+    ServiceTracker tracker = null;
+    try {
+      String flt;
+      if (filter != null) {
+        if (filter.startsWith("(")) {
+          flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")"
+              + filter + ")";
+        } else {
+          flt = "(&(" + Constants.OBJECTCLASS + "=" + type.getName() + ")("
+              + filter + "))";
+        }
+      } else {
+        flt = "(" + Constants.OBJECTCLASS + "=" + type.getName() + ")";
+      }
+      Filter osgiFilter = FrameworkUtil.createFilter(flt);
+      tracker = new ServiceTracker(bc == null ? bundleContext : bc, osgiFilter,
+          null);
+      tracker.open();
+      // Note that the tracker is not closed to keep the reference
+      // This is buggy, has the service reference may change i think
+      Object svc = type.cast(tracker.waitForService(timeout));
+      if (svc == null) {
+        throw new RuntimeException("Gave up waiting for service " + flt);
+      }
+      return type.cast(svc);
+    } catch (InvalidSyntaxException e) {
+      throw new IllegalArgumentException("Invalid filter", e);
+    } catch (InterruptedException e) {
+      throw new RuntimeException(e);
+    }
+  }
+}

Added: incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/test/TestClass.java
URL: http://svn.apache.org/viewvc/incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/test/TestClass.java?rev=900127&view=auto
==============================================================================
--- incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/test/TestClass.java (added)
+++ incubator/aries/trunk/web/web-itests/src/test/java/org/apache/aries/web/test/TestClass.java Sun Jan 17 12:40:17 2010
@@ -0,0 +1,28 @@
+/**
+ *  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.test;
+
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+
+public class TestClass {
+  private InitialContext ctx;
+  
+  public TestClass() throws NamingException {
+    ctx = new InitialContext();
+  }
+}