Return-Path: Delivered-To: apmail-sling-commits-archive@www.apache.org Received: (qmail 31569 invoked from network); 14 Aug 2009 16:23:02 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 14 Aug 2009 16:23:02 -0000 Received: (qmail 85880 invoked by uid 500); 14 Aug 2009 16:23:09 -0000 Delivered-To: apmail-sling-commits-archive@sling.apache.org Received: (qmail 85824 invoked by uid 500); 14 Aug 2009 16:23:09 -0000 Mailing-List: contact commits-help@sling.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@sling.apache.org Delivered-To: mailing list commits@sling.apache.org Received: (qmail 85815 invoked by uid 99); 14 Aug 2009 16:23:09 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 14 Aug 2009 16:23:09 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 14 Aug 2009 16:23:06 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 64EC223888D4; Fri, 14 Aug 2009 16:22:46 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r804280 - in /sling/trunk/installer/osgi/installer: ./ src/main/java/org/apache/sling/osgi/installer/impl/ src/main/java/org/apache/sling/osgi/installer/impl/tasks/ src/test/java/org/apache/sling/osgi/installer/impl/ src/test/java/org/apach... Date: Fri, 14 Aug 2009 16:22:45 -0000 To: commits@sling.apache.org From: bdelacretaz@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090814162246.64EC223888D4@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: bdelacretaz Date: Fri Aug 14 16:22:45 2009 New Revision: 804280 URL: http://svn.apache.org/viewvc?rev=804280&view=rev Log: SLING-1078 - entity IDs and RegisteredResourceList added Added: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/ConfigurationPid.java - copied, changed from r804107, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPid.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java (with props) sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java (with props) Removed: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPid.java Modified: sling/trunk/installer/osgi/installer/pom.xml sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallRemoveTask.java sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/TaskUtilities.java sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceTest.java sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPidTest.java Modified: sling/trunk/installer/osgi/installer/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/pom.xml?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/pom.xml (original) +++ sling/trunk/installer/osgi/installer/pom.xml Fri Aug 14 16:22:45 2009 @@ -42,27 +42,68 @@ scm:svn:https://svn.apache.org/repos/asf/sling/trunk/installer/osgi/installer http://svn.apache.org/viewvc/sling/installer/osgi/installer - - - - - org.apache.felix - maven-bundle-plugin - true - - - - org.apache.sling.osgi.installer.impl.Activator + + + + + org.apache.felix + maven-bundle-plugin + true + + + + org.apache.sling.osgi.installer.impl.Activator - - org.apache.sling.osgi.installer + + org.apache.sling.osgi.installer - org.apache.sling.osgi.installer.impl.* - - - - - + org.apache.sling.osgi.installer.impl.* + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + osgi.installer.base.dir + ${project.build.directory} + + + osgi.installer.pom.version + ${pom.version} + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + testbundle-1.0 + compile + + jar + + + testbundle-1.0 + + + 2 + OSGi installer test bundle + osgi-installer-testbundle + 1.0.4 + + + + + + + + Copied: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/ConfigurationPid.java (from r804107, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPid.java) URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/ConfigurationPid.java?p2=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/ConfigurationPid.java&p1=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPid.java&r1=804107&r2=804280&rev=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPid.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/ConfigurationPid.java Fri Aug 14 16:22:45 2009 @@ -16,13 +16,15 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.sling.osgi.installer.impl.tasks; +package org.apache.sling.osgi.installer.impl; + +import org.apache.sling.osgi.installer.impl.tasks.ConfigInstallRemoveTask; /** Builds configration PIDs out of filenames, examples: * o.a.s.foo.bar.cfg -> pid = o.a.s.foo.bar * o.a.s.foo.bar-a.cfg -> pid = o.a.s.foo.bar, factory pid = a */ -class ConfigurationPid { +public class ConfigurationPid { private final String configPid; private final String factoryPid; @@ -68,4 +70,8 @@ public String getFactoryPid() { return factoryPid; } + + public String getCompositePid() { + return (factoryPid == null ? "" : factoryPid + ".") + configPid; + } } Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerThread.java Fri Aug 14 16:22:45 2009 @@ -22,7 +22,6 @@ import java.util.List; import java.util.TreeSet; -import org.apache.sling.osgi.installer.impl.tasks.BundleInstallTask; import org.osgi.service.log.LogService; /** Worker thread where all OSGi tasks are executed. @@ -36,8 +35,8 @@ class OsgiInstallerThread extends Thread { private final OsgiInstallerContext ctx; + private final RegisteredResourceList registeredResources = new RegisteredResourceList(); private final List newResources = new LinkedList(); - private final List registeredResources = new LinkedList(); private final TreeSet tasks = new TreeSet(); OsgiInstallerThread(OsgiInstallerContext ctx) { @@ -50,9 +49,21 @@ while(true) { // TODO do nothing if nothing to process! try { - mergeNewResources(); - computeListOfTasks(); + // Add new resources to the list + synchronized (newResources) { + for(RegisteredResource r : newResources) { + registeredResources.add(r); + } + newResources.clear(); + } + + // Compute OSGi tasks based on the list of resources + tasks.addAll(registeredResources.getTasks()); + + // Execute all tasks executeTasks(); + + // Wait a bit before next cycle Thread.sleep(250); } catch(Exception e) { if(ctx.getLogService() != null) { @@ -66,21 +77,6 @@ } } - private void mergeNewResources() { - synchronized (newResources) { - registeredResources.addAll(newResources); - newResources.clear(); - } - } - - private void computeListOfTasks() { - for(RegisteredResource r : registeredResources) { - if(r.getResourceType() == RegisteredResource.ResourceType.BUNDLE) { - tasks.add(new BundleInstallTask(r)); - } - } - } - void addTaskToCurrentCycle(OsgiInstallerTask t) { if(ctx.getLogService() != null) { ctx.getLogService().log(LogService.LOG_DEBUG, "adding task to current cycle:" + t); Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResource.java Fri Aug 14 16:22:45 2009 @@ -39,11 +39,14 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.jar.JarInputStream; +import java.util.jar.Manifest; import org.apache.sling.osgi.installer.InstallableResource; import org.apache.sling.osgi.installer.impl.propertyconverter.PropertyConverter; import org.apache.sling.osgi.installer.impl.propertyconverter.PropertyValue; import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; /** A resource that's been registered in the OSGi controller. * Data can be either an InputStream or a Dictionary, and we store @@ -54,7 +57,9 @@ private final String url; private final String digest; private final File dataFile; + private final String entity; private final Dictionary dictionary; + private final Manifest manifest; private static long fileNumber; static enum State { @@ -75,6 +80,9 @@ private final ResourceType resourceType; public static final String DIGEST_TYPE = "MD5"; + public static final String ENTITY_JAR_PREFIX = "jar:"; + public static final String ENTITY_BUNDLE_PREFIX = "bundle:"; + public static final String ENTITY_CONFIG_PREFIX = "config:"; /** Create a RegisteredResource from given data. If the data's extension * maps to a configuration and the data provides an input stream, it is @@ -98,8 +106,21 @@ throw new IllegalArgumentException( "Digest must be supplied for BUNDLE resource type: " + input); } + manifest = getManifest(getInputStream()); + String name = null; + if(manifest != null) { + name = manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME); + } + if(name == null) { + // not a bundle - use "jar" entity to make it easier to find out + entity = ENTITY_JAR_PREFIX + input.getUrl(); + } else { + entity = ENTITY_BUNDLE_PREFIX + name; + } } else { dataFile = null; + manifest = null; + entity = ENTITY_CONFIG_PREFIX + new ConfigurationPid(input.getUrl()).getCompositePid(); if(input.getInputStream() == null) { // config provided as a Dictionary dictionary = copy(input.getDictionary()); @@ -241,6 +262,10 @@ return resourceType; } + public Manifest getManifest() { + return manifest; + } + static ResourceType computeResourceType(String extension) { if(extension.equals("jar")) { return ResourceType.BUNDLE; @@ -248,4 +273,42 @@ return ResourceType.CONFIG; } } + + /** Return the identifier of the OSGi "entity" that this resource + * represents, for example "bundle:SID" where SID is the bundle's + * symbolic ID, or "config:PID" where PID is config's PID. + */ + public String getEntityId() { + return entity; + } + + /** Read the manifest from supplied input stream, which is closed before return */ + static Manifest getManifest(InputStream ins) throws IOException { + Manifest result = null; + + JarInputStream jis = null; + try { + jis = new JarInputStream(ins); + result= jis.getManifest(); + + } finally { + + // close the jar stream or the inputstream, if the jar + // stream is set, we don't need to close the input stream + // since closing the jar stream closes the input stream + if (jis != null) { + try { + jis.close(); + } catch (IOException ignore) { + } + } else { + try { + ins.close(); + } catch (IOException ignore) { + } + } + } + + return result; + } } Added: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java?rev=804280&view=auto ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java (added) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java Fri Aug 14 16:22:45 2009 @@ -0,0 +1,31 @@ +/* + * 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.sling.osgi.installer.impl; + +import java.util.Comparator; + +/** Comparator that defines priorities between RegisteredResources */ +class RegisteredResourceComparator implements Comparator{ + + public int compare(RegisteredResource a, RegisteredResource b) { + // TODO + return 0; + } + +} Propchange: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Added: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java?rev=804280&view=auto ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java (added) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java Fri Aug 14 16:22:45 2009 @@ -0,0 +1,74 @@ +/* + * 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.sling.osgi.installer.impl; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.TreeSet; + +import org.apache.sling.osgi.installer.impl.tasks.BundleInstallTask; + +/** Used by the installer to hold the complete list of RegisteredResources, + * this class is key in defining priorities between resources, making sure + * the latest version of a bundle is installed if several are available, etc. + * + * The storage structure is not really a list, but a Map of sorted lists of + * RegisteredResource. The Map key is the "OSGi entity" that the resources + * represent, for example a given bundle (keyed by symbolic name) or + * a given config (keyed by pid). + * + * Before it starts executing OSGi tasks, the installer calls the + * getTasks() method which walks the data structure and uses priority rules + * and the RegisteredResource's desired and actual states to define the set + * of OSGi tasks to execute. + * + * This class is *not* threadsafe, clients must care about that. + */ +class RegisteredResourceList { + private final Map> list = new HashMap>(); + + /** Add the given resource to this list, at the correct position based + * on the resource's entity ID */ + void add(RegisteredResource r) { + TreeSet t = list.get(r.getEntityId()); + if(t == null) { + t = new TreeSet(new RegisteredResourceComparator()); + list.put(r.getEntityId(), t); + } + t.add(r); + } + + List getTasks() { + final List result = new LinkedList(); + + // Walk the list of entities, and create appropriate OSGi tasks for each group + for(TreeSet group : list.values()) { + for(RegisteredResource r : group) { + // TODO tasks must be created based on priorities + desired/actual states + if(r.getResourceType().equals(RegisteredResource.ResourceType.BUNDLE)) { + result.add(new BundleInstallTask(r)); + } + } + } + + return result; + } +} Propchange: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceList.java ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Rev URL Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveTask.java Fri Aug 14 16:22:45 2009 @@ -87,7 +87,7 @@ throw new IOException("RegisteredResource does not adapt to an InputStream: " + uri); } - final Manifest m = TaskUtilities.getManifest(data); + final Manifest m = data.getManifest(); if(m == null) { throw new IOException("Manifest not found for RegisteredResource " + uri); } Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallRemoveTask.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallRemoveTask.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallRemoveTask.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/ConfigInstallRemoveTask.java Fri Aug 14 16:22:45 2009 @@ -21,6 +21,7 @@ import java.util.Dictionary; import java.util.Map; +import org.apache.sling.osgi.installer.impl.ConfigurationPid; import org.apache.sling.osgi.installer.impl.OsgiInstallerContext; import org.apache.sling.osgi.installer.impl.RegisteredResource; import org.osgi.service.cm.Configuration; @@ -31,7 +32,7 @@ static final String ALIAS_KEY = "_alias_factory_pid"; static final String CONFIG_PATH_KEY = "_jcr_config_path"; - static final String [] CONFIG_EXTENSIONS = { ".cfg", ".properties" }; + public static final String [] CONFIG_EXTENSIONS = { ".cfg", ".properties" }; public ConfigInstallRemoveTask(String uri, RegisteredResource data, OsgiInstallerContext ocs) { super(uri, data, ocs); Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/TaskUtilities.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/TaskUtilities.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/TaskUtilities.java (original) +++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/TaskUtilities.java Fri Aug 14 16:22:45 2009 @@ -5,6 +5,7 @@ import java.util.jar.JarInputStream; import java.util.jar.Manifest; +import org.apache.sling.osgi.installer.impl.ConfigurationPid; import org.apache.sling.osgi.installer.impl.OsgiInstallerContext; import org.apache.sling.osgi.installer.impl.RegisteredResource; import org.osgi.framework.Bundle; @@ -51,41 +52,6 @@ return null; } - /** Read the manifest from the RegisteredResource */ - static Manifest getManifest(RegisteredResource data) throws IOException { - Manifest result = null; - InputStream ins = data.getInputStream(); - if (ins == null) { - return null; - } - - JarInputStream jis = null; - try { - jis = new JarInputStream(ins); - result= jis.getManifest(); - - } finally { - - // close the jar stream or the inputstream, if the jar - // stream is set, we don't need to close the input stream - // since closing the jar stream closes the input stream - if (jis != null) { - try { - jis.close(); - } catch (IOException ignore) { - } - } else { - // ins is never null here - try { - ins.close(); - } catch (IOException ignore) { - } - } - } - - return result; - } - /** Get or create configuration */ static Configuration getConfiguration(ConfigurationPid cp, boolean createIfNeeded, OsgiInstallerContext ocs) throws IOException, InvalidSyntaxException Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceTest.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceTest.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceTest.java (original) +++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceTest.java Fri Aug 14 16:22:45 2009 @@ -25,6 +25,8 @@ import static org.junit.Assert.fail; import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream; @@ -35,6 +37,11 @@ public class RegisteredResourceTest { + static File getTestBundle(String name) { + return new File(System.getProperty("osgi.installer.base.dir"), + "org.apache.sling.osgi.installer-" + System.getProperty("osgi.installer.pom.version") + "-" + name); + } + @org.junit.Test public void testStreamIsClosed() throws Exception { final String data = "some data"; @@ -70,6 +77,7 @@ assertNotNull("BUNDLE resource provides an InputStream", rs); rs.close(); assertNull("BUNDLE resource does not provide a Dictionary", r.getDictionary()); + assertEquals("RegisteredResource entity ID must match", "jar:1.jar", r.getEntityId()); } { @@ -162,4 +170,19 @@ r2.getDigest() ); } + + @org.junit.Test public void testBundleManifest() throws Exception { + final File f = getTestBundle("testbundle-1.0.jar"); + final InstallableResource i = new InstallableResource(f.getAbsolutePath(), new FileInputStream(f), f.getName()); + final RegisteredResource r = new LocalFileRegisteredResource(i); + assertNotNull("RegisteredResource must have manifest", r.getManifest()); + assertEquals("RegisteredResource entity ID must match", "bundle:osgi-installer-testbundle", r.getEntityId()); + } + + @org.junit.Test public void testConfigEntity() throws Exception { + final InstallableResource i = new InstallableResource("/foo/someconfig", new Hashtable()); + final RegisteredResource r = new LocalFileRegisteredResource(i); + assertNull("RegisteredResource must not have manifest", r.getManifest()); + assertEquals("RegisteredResource entity ID must match", "config:someconfig", r.getEntityId()); + } } \ No newline at end of file Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPidTest.java URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPidTest.java?rev=804280&r1=804279&r2=804280&view=diff ============================================================================== --- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPidTest.java (original) +++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/ConfigurationPidTest.java Fri Aug 14 16:22:45 2009 @@ -20,6 +20,8 @@ import static org.junit.Assert.assertEquals; +import org.apache.sling.osgi.installer.impl.ConfigurationPid; + public class ConfigurationPidTest { private void assertPid(String path, String expectedPid, String expectedFactoryPid) {