Author: jwross
Date: Tue Oct 30 17:12:27 2012
New Revision: 1403783
URL: http://svn.apache.org/viewvc?rev=1403783&view=rev
Log:
Bundles as directories. New installed location syntax.
Support was added for installing bundles as directories to compliment already
existing support for subsystems as directories.
Directory names representing bundles must end with ".jar".
The generated location used for installing embedded subsystems and bundles now
uses the following pattern:
<provision-to subsystem location>!/<resource location>
The format should be interpreted as "there is an entry for a resource located
at <resource location> within the subsystem
archive located at <provision-to subsystem location>." Typically, <resource
location> will be a file name. The syntax is
intended to support the loose config scenario introduced with the idirfinder
URL scheme.
Also fixed a few compile warnings in some test classes.
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/META-INF/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/META-INF/MANIFEST.MF
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/a/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/a/A.class
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/META-INF/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/META-INF/MANIFEST.MF
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/b/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/b/B.class
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/META-INF/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/META-INF/MANIFEST.MF
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/a/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/a/A.class
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/META-INF/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/META-INF/MANIFEST.MF
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/b/
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/b/B.class
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Manifest.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResourceInstaller.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceInstaller.java
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ATest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4CTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4DTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Manifest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Manifest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Manifest.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/archive/Manifest.java
Tue Oct 30 17:12:27 2012
@@ -59,6 +59,10 @@ public abstract class Manifest {
public Collection<Header> getHeaders() {
return Collections.unmodifiableCollection(headers.values());
}
+
+ public java.util.jar.Manifest getManifest() {
+ return manifest;
+ }
public Header getManifestVersion() {
return getHeader(Attributes.Name.MANIFEST_VERSION.toString());
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResource.java
Tue Oct 30 17:12:27 2012
@@ -13,13 +13,17 @@
*/
package org.apache.aries.subsystem.core.internal;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.net.URL;
+import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarOutputStream;
import org.apache.aries.application.modelling.ExportedService;
import org.apache.aries.application.modelling.ImportedService;
@@ -38,9 +42,8 @@ import org.apache.aries.subsystem.core.a
import org.apache.aries.subsystem.core.archive.RequireBundleRequirement;
import org.apache.aries.subsystem.core.archive.RequireCapabilityHeader;
import org.apache.aries.subsystem.core.archive.RequireCapabilityRequirement;
-import org.apache.aries.util.filesystem.FileSystem;
-import org.apache.aries.util.filesystem.ICloseableDirectory;
import org.apache.aries.util.filesystem.IDirectory;
+import org.apache.aries.util.filesystem.IFile;
import org.apache.aries.util.io.IOUtils;
import org.osgi.namespace.service.ServiceNamespace;
import org.osgi.resource.Capability;
@@ -58,38 +61,19 @@ public class BundleResource implements R
}
private final List<Capability> capabilities = new
ArrayList<Capability>();
- private final URL content;
+ private final IFile content;
private final BundleManifest manifest;
private final List<Requirement> requirements = new
ArrayList<Requirement>();
- public BundleResource(URL content) throws IOException,
ModellerException {
+ public BundleResource(IFile content) throws ModellerException {
this.content = content;
- InputStream is = content.openStream();
- try {
- ICloseableDirectory directory =
FileSystem.getFSRoot(is);
- try {
- manifest = computeManifest(directory);
- // TODO Could use
ModelledResourceManager.getServiceElements
- // instead. Only the service dependency info is
being used
- // right now.
- ModelledResource resource =
getModelledResourceManager().getModelledResource(directory);
- computeRequirements(resource);
- computeCapabilities(resource);
- }
- finally {
- IOUtils.close(directory);
- }
- }
- finally {
- // Although FileSystem.getFSRoot ultimately tries to
close the
- // provided input stream, it is possible an exception
will be thrown
- // before that happens.
- IOUtils.close(is);
- }
- }
-
- public BundleResource(String content) throws IOException,
ModellerException {
- this(new URL(content));
+ IDirectory dir = content.isDirectory() ? content.convert() :
content.convertNested();
+ manifest = computeManifest(dir);
+ // TODO Could use ModelledResourceManager.getServiceElements
instead.
+ // Only the service dependency info is being used right now.
+ ModelledResource resource =
getModelledResourceManager().getModelledResource(dir);
+ computeRequirements(resource);
+ computeCapabilities(resource);
}
public List<Capability> getCapabilities(String namespace) {
@@ -103,12 +87,33 @@ public class BundleResource implements R
return Collections.unmodifiableList(result);
}
+ public String getLocation() {
+ return getFileName(content);
+ }
+
@Override
public InputStream getContent() {
try {
- return content.openStream();
+ if (content.isFile())
+ return content.open();
+ try {
+ // Give the IDirectory a shot at opening in
case it supports it.
+ return content.open();
+ }
+ catch (UnsupportedOperationException e) {
+ // As a last ditch effort, try to jar up the
contents.
+ ByteArrayOutputStream baos = new
ByteArrayOutputStream();
+ JarOutputStream out = new JarOutputStream(baos,
manifest.getManifest());
+ try {
+ jar(out, "", content.convert());
+ }
+ finally {
+ IOUtils.close(out);
+ }
+ return new
ByteArrayInputStream(baos.toByteArray());
+ }
}
- catch (IOException e) {
+ catch (Exception e) {
throw new SubsystemException(e);
}
}
@@ -126,7 +131,7 @@ public class BundleResource implements R
@Override
public String toString() {
- return content.toExternalForm();
+ return content.toString();
}
private void computeCapabilities(ModelledResource resource) {
@@ -223,7 +228,47 @@ public class BundleResource implements R
// TODO Bundle-RequiredExecutionEnvironment
}
+ private String getFileName(IFile file) {
+ String name = file.getName();
+ if ("".equals(name)) {
+ // The file is the root directory of an archive. Use
the URL
+ // instead. Using the empty string will likely result
in duplicate
+ // locations during installation.
+ try {
+ name = file.toURL().toString();
+ }
+ catch (MalformedURLException e) {
+ throw new SubsystemException(e);
+ }
+ }
+ int index = name.lastIndexOf('/');
+ if (index == -1 || index == name.length() - 1)
+ return name;
+ return name.substring(index + 1);
+ }
+
private ModelledResourceManager getModelledResourceManager() {
return Activator.getInstance().getModelledResourceManager();
}
+
+ private void jar(JarOutputStream out, String prefix, IDirectory
directory) throws IOException {
+ List<IFile> files = directory.listFiles();
+ for (IFile f : files) {
+ String fileName;
+ if (f.isDirectory())
+ fileName = prefix + getFileName(f) + "/";
+ else
+ fileName = prefix + getFileName(f);
+ if ("META-INF/".equalsIgnoreCase(fileName) ||
"META-INF/MANIFEST.MF".equalsIgnoreCase(fileName))
+ continue;
+ JarEntry entry = new JarEntry(fileName);
+ entry.setSize(f.getSize());
+ entry.setTime(f.getLastModified());
+ out.putNextEntry(entry);
+ if (f.isDirectory())
+ jar(out, fileName, f.convert());
+ else
+ IOUtils.copy(f.open(), out);
+ }
+ }
}
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResourceInstaller.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResourceInstaller.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResourceInstaller.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/BundleResourceInstaller.java
Tue Oct 30 17:12:27 2012
@@ -166,7 +166,7 @@ public class BundleResourceInstaller ext
final Bundle bundle;
InputStream is = ((RepositoryContent)resource).getContent();
try {
- bundle =
provisionTo.getRegion().installBundle(getLocation(), is);
+ bundle =
provisionTo.getRegion().installBundleAtLocation(getLocation(), is);
}
catch (BundleException e) {
throw new SubsystemException(e);
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/RawSubsystemResource.java
Tue Oct 30 17:12:27 2012
@@ -326,13 +326,15 @@ public class RawSubsystemResource implem
String name = file.getName();
if (file.isFile()) {
if (name.endsWith(".jar"))
- result.add(new
BundleResource(file.toURL()));
+ result.add(new BundleResource(file));
else if (name.endsWith(".esa"))
result.add(new
RawSubsystemResource(convertFileToLocation(file), file.open()));
}
else {
if (name.endsWith(".esa"))
result.add(new
RawSubsystemResource(convertFileToLocation(file), file.convert()));
+ else if (name.endsWith(".jar"))
+ result.add(new BundleResource(file));
}
}
result.trimToSize();
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceHelper.java
Tue Oct 30 17:12:27 2012
@@ -24,6 +24,7 @@ import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.Version;
import org.osgi.framework.namespace.IdentityNamespace;
+import org.osgi.framework.wiring.BundleRevision;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
@@ -63,6 +64,20 @@ public class ResourceHelper {
return capability.getAttributes().get(name);
}
+ public static String getLocation(Resource resource) {
+ if (resource instanceof BundleResource)
+ return ((BundleResource)resource).getLocation();
+ if (resource instanceof BundleRevision)
+ return
((BundleRevision)resource).getBundle().getLocation();
+ if (resource instanceof AriesSubsystem)
+ return ((AriesSubsystem)resource).getLocation();
+ if (resource instanceof SubsystemResource)
+ return ((SubsystemResource)resource).getLocation();
+ if (resource instanceof RawSubsystemResource)
+ return
((RawSubsystemResource)resource).getLocation().getValue();
+ return getSymbolicNameAttribute(resource) + '@' +
getVersionAttribute(resource);
+ }
+
public static Resource getResource(Requirement requirement, Repository
repository) {
Map<Requirement, Collection<Capability>> map =
repository.findProviders(Arrays.asList(requirement));
Collection<Capability> capabilities = map.get(requirement);
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceInstaller.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceInstaller.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceInstaller.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/ResourceInstaller.java
Tue Oct 30 17:12:27 2012
@@ -99,7 +99,7 @@ public abstract class ResourceInstaller
}
protected String getLocation() {
- return provisionTo.getSubsystemId() + "@" +
provisionTo.getSymbolicName() + "@" +
ResourceHelper.getSymbolicNameAttribute(resource);
+ return provisionTo.getLocation() + "!/" +
ResourceHelper.getLocation(resource);
}
protected boolean isContent() {
Modified:
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java
(original)
+++
aries/trunk/subsystem/subsystem-core/src/main/java/org/apache/aries/subsystem/core/internal/SubsystemResource.java
Tue Oct 30 17:12:27 2012
@@ -58,7 +58,6 @@ import org.osgi.framework.ServiceReferen
import org.osgi.framework.hooks.weaving.WeavingHook;
import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.framework.wiring.BundleRevision;
-import org.osgi.framework.wiring.BundleWiring;
import org.osgi.resource.Capability;
import org.osgi.resource.Requirement;
import org.osgi.resource.Resource;
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ATest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ATest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ATest.java
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ATest.java
Tue Oct 30 17:12:27 2012
@@ -1,13 +1,9 @@
package org.apache.aries.subsystem.ctt.itests;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.Map;
-import java.util.Set;
import org.junit.Before;
import org.junit.Test;
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4CTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4CTest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4CTest.java
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4CTest.java
Tue Oct 30 17:12:27 2012
@@ -1,17 +1,11 @@
package org.apache.aries.subsystem.ctt.itests;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.util.Arrays;
-import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.service.subsystem.SubsystemConstants;
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4DTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4DTest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4DTest.java
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4DTest.java
Tue Oct 30 17:12:27 2012
@@ -8,7 +8,6 @@ import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.service.subsystem.SubsystemConstants;
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/CompositeTest.java
Tue Oct 30 17:12:27 2012
@@ -20,7 +20,6 @@ import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.junit.JUnit4TestRunner;
import org.ops4j.pax.exam.junit.MavenConfiguredJUnit4TestRunner;
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/InstallTest.java
Tue Oct 30 17:12:27 2012
@@ -36,6 +36,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.MavenConfiguredJUnit4TestRunner;
import org.osgi.framework.Bundle;
+import org.osgi.framework.Version;
import org.osgi.framework.startlevel.BundleStartLevel;
import org.osgi.framework.startlevel.FrameworkStartLevel;
import org.osgi.service.subsystem.Subsystem;
@@ -47,18 +48,41 @@ public class InstallTest extends Subsyst
if (createdApplications) {
return;
}
-
ZipFixture feature = ArchiveFixture
.newZip()
.binary("OSGI-INF/SUBSYSTEM.MF",
SubsystemTest.class.getClassLoader().getResourceAsStream(
"compositeDir"
+ "/OSGI-INF/SUBSYSTEM.MF"))
+ .binary("a.jar/META-INF/MANIFEST.MF",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/a.jar/META-INF/MANIFEST.MF"))
+ .binary("a.jar/a/A.class",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/a.jar/a/A.class"))
.binary("applicationDir.esa/OSGI-INF/SUBSYSTEM.MF",
SubsystemTest.class.getClassLoader().getResourceAsStream(
"compositeDir"
+ "/applicationDir/OSGI-INF/SUBSYSTEM.MF"))
+
.binary("applicationDir.esa/b.jar/META-INF/MANIFEST.MF",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/applicationDir/b.jar/META-INF/MANIFEST.MF"))
+ .binary("applicationDir.esa/b.jar/b/B.class",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/applicationDir/b.jar/b/B.class"))
.binary("applicationDir.esa/featureDir.esa/OSGI-INF/SUBSYSTEM.MF",
SubsystemTest.class.getClassLoader().getResourceAsStream(
- "compositeDir"
+ "/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF"));
+ "compositeDir"
+ "/applicationDir/featureDir/OSGI-INF/SUBSYSTEM.MF"))
+
.binary("applicationDir.esa/featureDir.esa/a.jar/META-INF/MANIFEST.MF",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/applicationDir/featureDir/a.jar/META-INF/MANIFEST.MF"))
+
.binary("applicationDir.esa/featureDir.esa/a.jar/a/A.class",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/applicationDir/featureDir/a.jar/a/A.class"))
+
.binary("applicationDir.esa/featureDir.esa/b.jar/META-INF/MANIFEST.MF",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/applicationDir/featureDir/b.jar/META-INF/MANIFEST.MF"))
+
.binary("applicationDir.esa/featureDir.esa/b.jar/b/B.class",
+
SubsystemTest.class.getClassLoader().getResourceAsStream(
+ "compositeDir"
+ "/applicationDir/featureDir/b.jar/b/B.class"));
feature.end();
FileOutputStream fos = new FileOutputStream("compositeDir" +
".esa");
try {
@@ -66,7 +90,6 @@ public class InstallTest extends Subsyst
} finally {
Utils.closeQuietly(fos);
}
-
createApplication("feature3", new String[]{"tb3.jar"});
createApplication("feature2", new String[]{"tb3.jar",
"tb2.jar"});
createdApplications = true;
@@ -95,7 +118,8 @@ public class InstallTest extends Subsyst
/*
* Install a subsystem using a location string and a null input stream. The
- * location string is a file URL pointing to a directory.
+ * location string is a file URL pointing to a subsystem directory
+ * containing nested subsystem and bundle directories.
*/
@Test
public void testLocationAsDirectoryUrl() throws Exception {
@@ -103,16 +127,46 @@ public class InstallTest extends Subsyst
try {
Subsystem subsystem = installSubsystem(getRootSubsystem(),
file.toURI().toString(), null);
try {
-
assertSymbolicName("org.apache.aries.subsystem.itests.composite.dir",
subsystem);
+
assertSymbolicName("org.apache.aries.subsystem.itests.composite.dir",
subsystem);
+ assertConstituents(3, subsystem);
+ assertConstituent(subsystem,
"org.apache.aries.subsystem.itests.composite.dir.bundle.a");
+ Bundle b = getConstituentAsBundle(
+ subsystem,
+
"org.apache.aries.subsystem.itests.composite.dir.bundle.a",
+ null, null);
+ assertLocation(subsystem.getLocation() + "!/" +
"a.jar", b.getLocation());
+ assertClassLoadable("a.A", b);
assertChildren(1, subsystem);
Subsystem child =
subsystem.getChildren().iterator().next();
assertSymbolicName(
"org.apache.aries.subsystem.itests.application.dir",
child);
+ assertConstituent(child,
"org.apache.aries.subsystem.itests.composite.dir.bundle.b");
+ b = getConstituentAsBundle(
+ child,
+
"org.apache.aries.subsystem.itests.composite.dir.bundle.b",
+ null, null);
+ assertLocation(child.getLocation() + "!/" + "b.jar",
b.getLocation());
+ assertClassLoadable("b.B", b);
assertChildren(1, child);
+ child = child.getChildren().iterator().next();
assertSymbolicName(
"org.apache.aries.subsystem.itests.feature.dir",
- child.getChildren().iterator().next());
+ child);
+ assertConstituent(subsystem,
"org.apache.aries.subsystem.itests.composite.dir.bundle.a");
+ b = getConstituentAsBundle(
+ child,
+
"org.apache.aries.subsystem.itests.composite.dir.bundle.a",
+ null, null);
+ assertLocation(child.getLocation() + "!/" + "a.jar",
b.getLocation());
+ assertClassLoadable("a.A", b);
+ assertConstituent(child,
"org.apache.aries.subsystem.itests.composite.dir.bundle.b",
Version.parseVersion("1"));
+ b = getConstituentAsBundle(
+ child,
+
"org.apache.aries.subsystem.itests.composite.dir.bundle.b",
+ Version.parseVersion("1"), null);
+ assertLocation(child.getLocation() + "!/" + "b.jar",
b.getLocation());
+ assertClassLoadable("b.B", b);
}
finally {
uninstallSubsystemSilently(subsystem);
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
Tue Oct 30 17:12:27 2012
@@ -50,6 +50,7 @@ import org.apache.aries.unittest.fixture
import org.apache.aries.unittest.fixture.ArchiveFixture.JarFixture;
import org.apache.aries.unittest.fixture.ArchiveFixture.ManifestFixture;
import org.apache.aries.unittest.fixture.ArchiveFixture.ZipFixture;
+import org.apache.aries.util.filesystem.FileSystem;
import org.eclipse.equinox.region.Region;
import org.eclipse.equinox.region.RegionDigraph;
import org.ops4j.pax.exam.Option;
@@ -259,6 +260,16 @@ public abstract class SubsystemTest exte
assertTrue("Parent did not contain all children",
parent.getChildren().containsAll(children));
}
+ protected void assertClassLoadable(String clazz, Bundle bundle) {
+ try {
+ bundle.loadClass(clazz);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ fail("Class " + clazz + " from bundle " + bundle + "
should be loadable");
+ }
+ }
+
protected void assertConstituent(Subsystem subsystem, String
symbolicName) {
assertConstituent(subsystem, symbolicName,
Version.emptyVersion);
}
@@ -517,7 +528,7 @@ public abstract class SubsystemTest exte
}
protected RepositoryContent createBundleRepositoryContent(File file)
throws Exception {
- return new BundleResource(file.toURI().toURL());
+ return new BundleResource(FileSystem.getFSRoot(file));
}
protected static void createManifest(String name, Map<String, String>
headers) throws IOException {
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF?rev=1403783&r1=1403782&r2=1403783&view=diff
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF
(original)
+++
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/OSGI-INF/SUBSYSTEM.MF
Tue Oct 30 17:12:27 2012
@@ -1,3 +1,5 @@
Subsystem-SymbolicName: org.apache.aries.subsystem.itests.composite.dir
Subsystem-Type: org.osgi.subsystem.composite
-Subsystem-Content:
org.apache.aries.subsystem.itests.application.dir;version="[0,0]";type=osgi.subsystem.application
+Subsystem-Content:
+
org.apache.aries.subsystem.itests.application.dir;version="[0,0]";type=osgi.subsystem.application,
+ org.apache.aries.subsystem.itests.composite.dir.bundle.a;version="[0,0]"
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/META-INF/MANIFEST.MF?rev=1403783&view=auto
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/META-INF/MANIFEST.MF
(added)
+++
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/META-INF/MANIFEST.MF
Tue Oct 30 17:12:27 2012
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.apache.aries.subsystem.itests.composite.dir.bundle.a
+Export-Package: a
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/a/A.class
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/a/A.class?rev=1403783&view=auto
==============================================================================
Files
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/a/A.class
(added) and
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/a.jar/a/A.class
Tue Oct 30 17:12:27 2012 differ
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/META-INF/MANIFEST.MF?rev=1403783&view=auto
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/META-INF/MANIFEST.MF
(added)
+++
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/META-INF/MANIFEST.MF
Tue Oct 30 17:12:27 2012
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.apache.aries.subsystem.itests.composite.dir.bundle.b
+Export-Package: b
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/b/B.class
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/b/B.class?rev=1403783&view=auto
==============================================================================
Files
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/b/B.class
(added) and
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/b.jar/b/B.class
Tue Oct 30 17:12:27 2012 differ
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/META-INF/MANIFEST.MF?rev=1403783&view=auto
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/META-INF/MANIFEST.MF
(added)
+++
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/META-INF/MANIFEST.MF
Tue Oct 30 17:12:27 2012
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.apache.aries.subsystem.itests.composite.dir.bundle.a
+Export-Package: a
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/a/A.class
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/a/A.class?rev=1403783&view=auto
==============================================================================
Files
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/a/A.class
(added) and
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/a.jar/a/A.class
Tue Oct 30 17:12:27 2012 differ
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/META-INF/MANIFEST.MF
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/META-INF/MANIFEST.MF?rev=1403783&view=auto
==============================================================================
---
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/META-INF/MANIFEST.MF
(added)
+++
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/META-INF/MANIFEST.MF
Tue Oct 30 17:12:27 2012
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: org.apache.aries.subsystem.itests.composite.dir.bundle.b
+Bundle-Version: 1.0
+Export-Package: b
Added:
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/b/B.class
URL:
http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/b/B.class?rev=1403783&view=auto
==============================================================================
Files
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/b/B.class
(added) and
aries/trunk/subsystem/subsystem-itests/src/test/resources/compositeDir/applicationDir/featureDir/b.jar/b/B.class
Tue Oct 30 17:12:27 2012 differ