Author: bdelacretaz
Date: Thu Aug 20 15:58:09 2009
New Revision: 806231

URL: http://svn.apache.org/viewvc?rev=806231&view=rev
Log:
SLING-1078 - bundle priorities added

Added:
    
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java
   (with props)
    
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
   (with props)
Modified:
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.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/RegisteredResourceComparator.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java
    
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
    
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleResource.java
    
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java
    
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RegisterResourcesTest.java

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java?rev=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/InstallableResource.java
 Thu Aug 20 15:58:09 2009
@@ -31,6 +31,10 @@
        private final String digest;
        private final InputStream inputStream;
        private final Dictionary<String, Object> dictionary;
+       private int priority;
+       
+       /** Default resource priority */
+       public static final int DEFAULT_PRIORITY = 100;
        
        /** Create an empty data object, used when removing resources */
        public InstallableResource(String url) {
@@ -39,6 +43,7 @@
                this.inputStream = null;
                this.dictionary = null;
                this.digest = null;
+               this.priority = DEFAULT_PRIORITY;
        }
        
        /** Create a data object that wraps an InputStream 
@@ -56,6 +61,7 @@
                this.inputStream = is;
                this.dictionary = null;
                this.digest = digest;
+        this.priority = DEFAULT_PRIORITY;
        }
        
        /** Create a data object that wraps a Dictionary. Digest will be 
computed
@@ -73,6 +79,7 @@
                this.inputStream = null;
                this.dictionary = d;
         this.digest = null;
+        this.priority = DEFAULT_PRIORITY;
        }
 
        @Override
@@ -94,19 +101,40 @@
                return url;
        }
 
+       /** Return this resource's extension, based on its URL */
        public String getExtension() {
                return extension;
        }
 
+       /** Return an input stream with the data of this resource. Null if 
resource
+        *  contains a dictionary instead. Caller is responsible for closing 
the stream.
+        */
        public InputStream getInputStream() {
                return inputStream;
        }
 
+       /** Return this resource's dictionary. Null if resource contains an 
InputStream instead */
        public Dictionary<String, Object> getDictionary() {
                return dictionary;
        }
-       
+
+       /** Return this resource's digest. Not necessarily an actual md5 or 
other digest of the
+        *  data, can be any string that changes if the data changes. 
+        */
        public String getDigest() {
            return digest;
        }
+
+       /** Return the priority of this resource. Priorities are used to decide 
which 
+        *  resource to install when several are registered for the same OSGi 
entity
+        *  (bundle, config, etc.)
+        */
+    public int getPriority() {
+        return priority;
+    }
+
+    /** Set the priority of this resource */
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
 }

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=806231&r1=806230&r2=806231&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
 Thu Aug 20 15:58:09 2009
@@ -50,6 +50,8 @@
        void setInstallable(boolean installable);
        ResourceType getResourceType();
        String getUrlScheme();
+       int getPriority();
+       long getSerialNumber();
        
        /** Attributes include the bundle symbolic name, bundle version, etc. */
        Map<String, Object> getAttributes();

Modified: 
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=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparator.java
 Thu Aug 20 15:58:09 2009
@@ -35,18 +35,47 @@
     }
     
     int compareBundles(RegisteredResource a, RegisteredResource b) {
+
+        boolean isSnapshot = false;
         
+        // Order first by symbolic name
         final String nameA = 
(String)a.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
         final String nameB = 
(String)b.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
         int result = nameA.compareTo(nameB);
         
+        // Then by version
         if(result == 0) {
             final Version va = 
(Version)a.getAttributes().get(Constants.BUNDLE_VERSION);
             final Version vb = 
(Version)b.getAttributes().get(Constants.BUNDLE_VERSION);
+            isSnapshot = 
va.toString().contains(BundleTaskCreator.MAVEN_SNAPSHOT_MARKER);
             // higher version has more priority, must come first so invert 
comparison
             result = vb.compareTo(va);
         }
         
+        // Then by priority, higher values first
+        if(result == 0) {
+            if(a.getPriority() < b.getPriority()) {
+                result = 1;
+            } else if(a.getPriority() > b.getPriority()) {
+                result = -1;
+            }
+        }
+        
+        if(result == 0) {
+            if(isSnapshot) {
+                // For snapshots, compare serial numbers so that snapshots 
registered
+                // later get priority
+                if(a.getSerialNumber() < b.getSerialNumber()) {
+                    result = 1;
+                } else if(a.getSerialNumber() > b.getSerialNumber()) {
+                    result = -1;
+                }
+            } else {
+                // Non-snapshot: compare digests
+                result = a.getDigest().compareTo(b.getDigest());
+            }
+        }
+        
         return result;
     }
     

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java?rev=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/RegisteredResourceImpl.java
 Thu Aug 20 15:58:09 2009
@@ -65,6 +65,9 @@
        private final Map<String, Object> attributes = new HashMap<String, 
Object>();
        private static long fileNumber;
        private boolean installable = true;
+       private final int priority;
+    private final long serialNumber;
+    private static long serialNumberCounter = System.currentTimeMillis();
        
     static enum ResourceType {
         BUNDLE,
@@ -88,6 +91,8 @@
                url = input.getUrl();
                urlScheme = getUrlScheme(url);
                resourceType = computeResourceType(input.getExtension());
+               priority = input.getPriority();
+               serialNumber = getNextSerialNumber();
                
                if(resourceType == RegisteredResource.ResourceType.BUNDLE) {
                 if(input.getInputStream() == null) {
@@ -131,9 +136,15 @@
        }
        }
        
+    private static long getNextSerialNumber() {
+        synchronized (RegisteredResourceImpl.class) {
+            return serialNumberCounter++; 
+        }
+    }
+
        @Override
        public String toString() {
-           return getClass().getSimpleName() + " " + url + " (" + digest + ")";
+           return getClass().getSimpleName() + " " + url + ", digest=" + 
digest + ", serialNumber=" + serialNumber;
        }
        
        protected File getDataFile(BundleContext ctx) throws IOException {
@@ -320,4 +331,12 @@
     public String getUrlScheme() {
         return urlScheme;
     }
+    
+    public int getPriority() {
+        return priority;
+    }
+    
+    public long getSerialNumber() {
+        return serialNumber;
+    }
 }
\ No newline at end of file

Modified: 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java?rev=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
 Thu Aug 20 15:58:09 2009
@@ -24,6 +24,7 @@
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
+import org.osgi.service.log.LogService;
 
 /** Update a bundle from a RegisteredResource. Creates
  *  a bundleStartTask to restart the bundle if it was
@@ -61,6 +62,9 @@
         }
         b.stop();
         b.update(resource.getInputStream());
+        if(ctx.getLogService() != null) {
+            ctx.getLogService().log(LogService.LOG_DEBUG, "Bundle updated: " + 
b.getBundleId() + "/" + b.getSymbolicName());
+        }
         ctx.incrementCounter(OsgiInstaller.OSGI_TASKS_COUNTER);
     }
 

Modified: 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleResource.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleResource.java?rev=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleResource.java
 (original)
+++ 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleResource.java
 Thu Aug 20 15:58:09 2009
@@ -24,6 +24,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.sling.osgi.installer.InstallableResource;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Version;
 
@@ -33,11 +34,44 @@
        private final Map<String, Object> attributes = new HashMap<String, 
Object>();
        private boolean installable = true;
        private final String digest;
+       private final int priority;
+       private final long serialNumber;
+       private static long serialNumberCounter = System.currentTimeMillis();
        
-       MockBundleResource(String symbolicName, String version) {
+    MockBundleResource(String symbolicName, String version) {
+        this(symbolicName, version, InstallableResource.DEFAULT_PRIORITY);
+    }
+    
+       MockBundleResource(String symbolicName, String version, int priority) {
                attributes.put(Constants.BUNDLE_SYMBOLICNAME, symbolicName);
                attributes.put(Constants.BUNDLE_VERSION, new Version(version));
                digest = symbolicName + "." + version;
+               this.priority = priority;
+               serialNumber = getNextSerialNumber();
+       }
+       
+    MockBundleResource(String symbolicName, String version, int priority, 
String digest) {
+        attributes.put(Constants.BUNDLE_SYMBOLICNAME, symbolicName);
+        attributes.put(Constants.BUNDLE_VERSION, new Version(version));
+        this.digest = digest;
+        this.priority = priority;
+        serialNumber = getNextSerialNumber();
+    }
+    
+    private static long getNextSerialNumber() {
+        synchronized (MockBundleResource.class) {
+            return serialNumberCounter++; 
+        }
+    }
+    
+       @Override
+       public String toString() {
+           return getClass().getSimpleName() 
+           + ", n=" + attributes.get(Constants.BUNDLE_SYMBOLICNAME)
+        + ", v= " + attributes.get(Constants.BUNDLE_VERSION)
+        + ", d=" + digest
+        + ", p=" + priority
+        ;
        }
        
        public void cleanup() {
@@ -86,4 +120,12 @@
     public void setInstallable(boolean installable) {
         this.installable = installable;
     }
+    
+    public int getPriority() {
+        return priority;
+    }
+    
+    public long getSerialNumber() {
+        return serialNumber;
+    }
 }

Added: 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java?rev=806231&view=auto
==============================================================================
--- 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java
 (added)
+++ 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java
 Thu Aug 20 15:58:09 2009
@@ -0,0 +1,122 @@
+/*
+ * 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 static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+public class RegisteredResourceComparatorTest {
+    
+    private void assertOrder(List<RegisteredResource> toTest, 
RegisteredResource[] inOrder) {
+        assertEquals("Expected sizes to match", toTest.size(), inOrder.length);
+        Collections.sort(toTest, new RegisteredResourceComparator());
+        int i = 0;
+        for(RegisteredResource r : toTest) {
+            final RegisteredResource ref = inOrder[i];
+            assertSame("At index " + i + ", expected toTest and ref to match", 
ref, r);
+            i++;
+        }
+    }
+    
+    private void assertOrder(RegisteredResource[] inOrder) {
+        final List<RegisteredResource> toTest = new 
ArrayList<RegisteredResource>();
+        for(int i = inOrder.length - 1 ; i >= 0; i--) {
+            toTest.add(inOrder[i]);
+        }
+        assertOrder(toTest, inOrder);
+        toTest.clear();
+        for(RegisteredResource r : inOrder) {
+            toTest.add(r);
+        }
+        assertOrder(toTest, inOrder);
+    }
+    
+    @Test
+    public void testBundleName() {
+        final RegisteredResource [] inOrder = {
+                new MockBundleResource("a", "1.0", 10),
+                new MockBundleResource("b", "1.0", 10),
+                new MockBundleResource("c", "1.0", 10),
+                new MockBundleResource("d", "1.0", 10),
+        };
+        assertOrder(inOrder);
+    }
+    
+    @Test
+    public void testBundleVersion() {
+        final RegisteredResource [] inOrder = {
+                new MockBundleResource("a", "1.2.51", 10),
+                new MockBundleResource("a", "1.2.4", 10),
+                new MockBundleResource("a", "1.1.0", 10),
+                new MockBundleResource("a", "1.0.6", 10),
+                new MockBundleResource("a", "1.0.0", 10),
+        };
+        assertOrder(inOrder);
+    }
+    
+    @Test
+    public void testBundlePriority() {
+        final RegisteredResource [] inOrder = {
+                new MockBundleResource("a", "1.0.0", 101),
+                new MockBundleResource("a", "1.0.0", 10),
+                new MockBundleResource("a", "1.0.0", 0),
+                new MockBundleResource("a", "1.0.0", -5),
+        };
+        assertOrder(inOrder);
+    }
+    
+    @Test
+    public void testComposite() {
+        final RegisteredResource [] inOrder = {
+                new MockBundleResource("a", "1.2.0"),
+                new MockBundleResource("a", "1.0.0"),
+                new MockBundleResource("b", "1.0.0", 2),
+                new MockBundleResource("b", "1.0.0", 0),
+                new MockBundleResource("c", "1.5.0", -5),
+                new MockBundleResource("c", "1.4.0", 50),
+        };
+        assertOrder(inOrder);
+    }
+    
+    @Test
+    public void testDigest() {
+        final RegisteredResource [] inOrder = {
+                new MockBundleResource("a", "1.2.0", 0, "digestA"),
+                new MockBundleResource("a", "1.2.0", 0, "digestB"),
+                new MockBundleResource("a", "1.2.0", 0, "digestC"),
+        };
+        assertOrder(inOrder);
+    }
+    
+    @Test
+    public void testSnapshotSerialNumber() {
+        // Verify that snapshots with a higher serial number come first
+        final RegisteredResource [] inOrder = new RegisteredResource [3];
+        inOrder[2] = new MockBundleResource("a", "1.2.0.SNAPSHOT", 0, 
"digestC");
+        inOrder[1] = new MockBundleResource("a", "1.2.0.SNAPSHOT", 0, 
"digestB");
+        inOrder[0] = new MockBundleResource("a", "1.2.0.SNAPSHOT", 0, 
"digestA");
+        assertOrder(inOrder);
+    }
+}
\ No newline at end of file

Propchange: 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/RegisteredResourceComparatorTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Added: 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java?rev=806231&view=auto
==============================================================================
--- 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
 (added)
+++ 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
 Thu Aug 20 15:58:09 2009
@@ -0,0 +1,85 @@
+/*
+ * 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.it;
+
+import static org.junit.Assert.assertNull;
+
+import java.io.IOException;
+
+import org.apache.sling.osgi.installer.InstallableResource;
+import org.apache.sling.osgi.installer.OsgiInstaller;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.JUnit4TestRunner;
+import org.osgi.framework.Bundle;
+
+...@runwith(JUnit4TestRunner.class)
+public class BundlePrioritiesTest extends OsgiInstallerTestBase {
+    @org.ops4j.pax.exam.junit.Configuration
+    public static Option[] configuration() {
+        return defaultConfiguration();
+    }
+    
+    @Before
+    public void setUp() {
+        setupInstaller();
+    }
+    
+    @After
+    public void tearDown() {
+        super.tearDown();
+    }
+    
+    @Test
+    /** Use snapshots, it's the only bundles which are updated even if their 
version doesn't change */
+    public void testPrioritiesUsingSnapshots() throws IOException {
+        // Install test bundle
+        final String symbolicName = "osgi-installer-snapshot-test";
+        assertNull("Snapshot test bundle must be absent before installing", 
findBundle(symbolicName));
+        
+        final int lowPriority = InstallableResource.DEFAULT_PRIORITY - 1;
+        final int highPriority = InstallableResource.DEFAULT_PRIORITY + 1;
+        
+        {
+            resetCounters();
+            installer.addResource(getInstallableResource(
+                    getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest1"));
+            // wait for two tasks: install and start
+            waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 2);
+            assertBundle("Initial install", symbolicName, null, Bundle.ACTIVE);
+        }
+
+        {
+            installer.addResource(getInstallableResource(
+                    getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest2", 
lowPriority));
+            assertNoOsgiTasks("Low-priority snapshot updated must be ignored");
+        }
+
+        {
+            resetCounters();
+            installer.addResource(getInstallableResource(
+                    getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest3", 
highPriority));
+            // wait for two tasks: update and restart
+            waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 2);
+        }
+        
+        assertNoOsgiTasks("At end of test");
+    }
+}

Propchange: 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Modified: 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java?rev=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java
 (original)
+++ 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java
 Thu Aug 20 15:58:09 2009
@@ -192,11 +192,17 @@
     }
     
     protected InstallableResource getInstallableResource(File testBundle, 
String digest) throws IOException {
+        return getInstallableResource(testBundle, digest, 
InstallableResource.DEFAULT_PRIORITY);
+    }
+    
+    protected InstallableResource getInstallableResource(File testBundle, 
String digest, int priority) throws IOException {
         final String url = URL_SCHEME + ":" + testBundle.getAbsolutePath();
         if(digest == null) {
             digest = testBundle.getAbsolutePath() + testBundle.lastModified();
         }
-        return new InstallableResource(url, new FileInputStream(testBundle), 
digest);
+        final InstallableResource result = new InstallableResource(url, new 
FileInputStream(testBundle), digest);
+        result.setPriority(priority);
+        return result;
     }
     
     protected void waitForConfigAdmin(boolean shouldBePresent) throws 
InterruptedException {

Modified: 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RegisterResourcesTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RegisterResourcesTest.java?rev=806231&r1=806230&r2=806231&view=diff
==============================================================================
--- 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RegisterResourcesTest.java
 (original)
+++ 
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RegisterResourcesTest.java
 Thu Aug 20 15:58:09 2009
@@ -29,6 +29,8 @@
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.JUnit4TestRunner;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleException;
+
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertFalse;
 
@@ -71,7 +73,7 @@
     }
     
     @Test
-    public void removeAndReaddBundlesTest() throws IOException {
+    public void removeAndReaddBundlesTest() throws IOException, 
BundleException {
         {
             final List<InstallableResource> r = new 
ArrayList<InstallableResource>();
             r.add(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + 
"-testB-1.0.jar")));
@@ -126,9 +128,13 @@
             
             final String info = "After re-adding missing bundles";
             assertBundle(info, "osgi-installer-testB", "1.0", Bundle.ACTIVE);
-            assertBundle(info, "osgi-installer-needsB", "1.0", Bundle.ACTIVE);
             assertBundle(info, "osgi-installer-testbundle", "1.2", 
Bundle.ACTIVE);
             assertBundle(info, "osgi-installer-snapshot-test", 
"1.0.0.SNAPSHOT", Bundle.ACTIVE);
+            
+            final Bundle b = findBundle("osgi-installer-needsB");
+            b.start();
+            assertBundle("After reinstalling testB, needsB must be startable, 
",
+                       "osgi-installer-needsB", "1.0", Bundle.ACTIVE);
         }
     }
 }


Reply via email to