You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2009/10/15 08:01:12 UTC
svn commit: r825404 - in /sling/trunk/installer/osgi:
installer/src/main/java/org/apache/sling/osgi/installer/impl/
installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/
installer/src/test/java/org/apache/sling/osgi/installer/impl/ it/src...
Author: bdelacretaz
Date: Thu Oct 15 06:01:12 2009
New Revision: 825404
URL: http://svn.apache.org/viewvc?rev=825404&view=rev
Log:
SLING-1106 - do not downgrade a bundle that we didn't install
Added:
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java (with props)
Modified:
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleTaskCreator.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.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/BundleTaskCreatorTest.java
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleTaskCreator.java
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentResourceListTest.java
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RemovedResourceDetectionTest.java
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleTaskCreator.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleTaskCreator.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleTaskCreator.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/BundleTaskCreator.java Thu Oct 15 06:01:12 2009
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl;
+import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.SortedSet;
@@ -42,15 +43,18 @@
/** Holds the bundle info that we need, makes it easier to test
* without an OSGi framework */
static class BundleInfo {
+ final String symbolicName;
final Version version;
final int state;
- BundleInfo(Version version, int state) {
+ BundleInfo(String symbolicName, Version version, int state) {
+ this.symbolicName = symbolicName;
this.version = version;
this.state = state;
}
BundleInfo(Bundle b) {
+ this.symbolicName = b.getSymbolicName();
this.version = new Version((String)b.getHeaders().get(Constants.BUNDLE_VERSION));
this.state = b.getState();
}
@@ -61,7 +65,7 @@
* has desired state == active, and generates the appropriate OSGi tasks to
* reach this state.
*/
- public void createTasks(OsgiInstallerContext ctx, SortedSet<RegisteredResource> resources, SortedSet<OsgiInstallerTask> tasks) {
+ public void createTasks(OsgiInstallerContext ctx, SortedSet<RegisteredResource> resources, SortedSet<OsgiInstallerTask> tasks) throws IOException {
// Find the bundle that must be active: the resources collection is ordered according
// to priorities, so we just need to find the first one that is installable
@@ -95,10 +99,27 @@
digestToSave = toActivate.getDigest();
} else {
final int compare = info.version.compareTo(newVersion);
- if(compare != 0) {
- // installed but different version. Can be a later version if
- // the newer version resource was removed, in case we downgrade
- toUpdate = toActivate;
+ if(compare < 0) {
+ // installed version is lower -> update
+ toUpdate = toActivate;
+ } else if(compare > 0) {
+ // installed version is higher -> downgrade only if
+ // we installed that version
+ final String installedVersion = ctx.getInstalledBundleVersion(info.symbolicName);
+ if(info.version.toString().equals(installedVersion)) {
+ toUpdate = toActivate;
+ if(ctx.getLogService() != null) {
+ ctx.getLogService().log(LogService.LOG_INFO,
+ "Bundle " + info.symbolicName + " " + installedVersion
+ + " was installed by this module, downgrading to " + newVersion);
+ }
+ } else {
+ if(ctx.getLogService() != null) {
+ ctx.getLogService().log(LogService.LOG_INFO,
+ "Bundle " + info.symbolicName + " " + installedVersion
+ + " was not installed by this module, leaving as is");
+ }
+ }
} else if(compare == 0 && ctx.isSnapshot(newVersion)){
// installed, same version but SNAPSHOT
toUpdate = toActivate;
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java Thu Oct 15 06:01:12 2009
@@ -46,11 +46,16 @@
*/
void addTaskToNextCycle(OsgiInstallerTask t);
- /** Store a bundle's digest, keyed by symbolic ID + version */
- void saveBundleDigest(Bundle b, String digest) throws IOException;
+ /** Store a bundle's digest and installed version, keyed by symbolic ID */
+ void saveInstalledBundleInfo(Bundle b, String digest, String version) throws IOException;
- /** Retrieve a bundle's digest that was stored by storeBundleDigest
+ /** Retrieve a bundle's digest that was stored by saveInstalledBundleInfo
* @return null if no digest was stored
* */
- String getBundleDigest(Bundle b) throws IOException;
+ String getInstalledBundleDigest(Bundle b) throws IOException;
+
+ /** Retrieve a bundle's version that was stored by saveInstalledBundleInfo
+ * @return null if no version was stored
+ * */
+ String getInstalledBundleVersion(String symbolicName) throws IOException;
}
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerImpl.java Thu Oct 15 06:01:12 2009
@@ -172,14 +172,21 @@
return v.toString().indexOf(MAVEN_SNAPSHOT_MARKER) >= 0;
}
- public String getBundleDigest(Bundle b) throws IOException {
+ public String getInstalledBundleDigest(Bundle b) throws IOException {
if(bundleDigestsStorage == null) {
return null;
}
return bundleDigestsStorage.getDigest(b.getSymbolicName());
}
- public void saveBundleDigest(Bundle b, String digest) throws IOException {
- bundleDigestsStorage.putInfo(b.getSymbolicName(), digest, "");
+ public String getInstalledBundleVersion(String symbolicName) throws IOException {
+ if(bundleDigestsStorage == null) {
+ return null;
+ }
+ return bundleDigestsStorage.getInstalledVersion(symbolicName);
+ }
+
+ public void saveInstalledBundleInfo(Bundle b, String digest, String version) throws IOException {
+ bundleDigestsStorage.putInfo(b.getSymbolicName(), digest, version);
}
}
\ No newline at end of file
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallTask.java Thu Oct 15 06:01:12 2009
@@ -23,6 +23,8 @@
import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
import org.apache.sling.osgi.installer.impl.RegisteredResource;
import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.Version;
/** Install a bundle supplied as a RegisteredResource.
* Creates a BundleStartTask to start the bundle */
@@ -41,7 +43,8 @@
public void execute(OsgiInstallerContext ctx) throws Exception {
final Bundle b = ctx.getBundleContext().installBundle(resource.getUrl(), resource.getInputStream());
- ctx.saveBundleDigest(b, resource.getDigest());
+ final Version newVersion = new Version((String)resource.getAttributes().get(Constants.BUNDLE_VERSION));
+ ctx.saveInstalledBundleInfo(b, resource.getDigest(), newVersion.toString());
logExecution(ctx);
ctx.addTaskToCurrentCycle(new BundleStartTask(b.getBundleId()));
ctx.incrementCounter(OsgiInstaller.OSGI_TASKS_COUNTER);
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=825404&r1=825403&r2=825404&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 Oct 15 06:01:12 2009
@@ -58,25 +58,23 @@
// Do not update if same version, unless snapshot
boolean snapshot = false;
- if(b != null) {
- final Version currentVersion = new Version((String)b.getHeaders().get(Constants.BUNDLE_VERSION));
- final Version newVersion = new Version((String)resource.getAttributes().get(Constants.BUNDLE_VERSION));
- snapshot = ctx.isSnapshot(newVersion);
- if(currentVersion.equals(newVersion) && !snapshot) {
- if(ctx.getLogService() != null) {
- ctx.getLogService().log(
- LogService.LOG_DEBUG,
- "Same version is already installed, and not a snapshot, ignoring update:" + resource);
- }
- return;
- }
- }
+ final Version currentVersion = new Version((String)b.getHeaders().get(Constants.BUNDLE_VERSION));
+ final Version newVersion = new Version((String)resource.getAttributes().get(Constants.BUNDLE_VERSION));
+ snapshot = ctx.isSnapshot(newVersion);
+ if(currentVersion.equals(newVersion) && !snapshot) {
+ if(ctx.getLogService() != null) {
+ ctx.getLogService().log(
+ LogService.LOG_DEBUG,
+ "Same version is already installed, and not a snapshot, ignoring update:" + resource);
+ }
+ return;
+ }
// If snapshot and ready to update, cancel if digest didn't change - as the list
// of RegisteredResources is not saved, this might not have been detected earlier,
// if the snapshot was installed and the installer was later restarted
- if( (b != null) && snapshot) {
- final String oldDigest = ctx.getBundleDigest(b);
+ if(snapshot) {
+ final String oldDigest = ctx.getInstalledBundleDigest(b);
if(resource.getDigest().equals(oldDigest)) {
if(ctx.getLogService() != null) {
ctx.getLogService().log(
@@ -95,7 +93,7 @@
}
b.stop();
b.update(resource.getInputStream());
- ctx.saveBundleDigest(b, resource.getDigest());
+ ctx.saveInstalledBundleInfo(b, resource.getDigest(), newVersion.toString());
ctx.addTaskToCurrentCycle(new SynchronousRefreshPackagesTask());
if(ctx.getLogService() != null) {
ctx.getLogService().log(LogService.LOG_DEBUG, "Bundle updated: " + b.getBundleId() + "/" + b.getSymbolicName());
Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleTaskCreatorTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleTaskCreatorTest.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleTaskCreatorTest.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/BundleTaskCreatorTest.java Thu Oct 15 06:01:12 2009
@@ -21,20 +21,27 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import java.io.IOException;
import java.util.SortedSet;
import java.util.TreeSet;
import org.apache.sling.osgi.installer.impl.tasks.BundleInstallTask;
import org.apache.sling.osgi.installer.impl.tasks.BundleRemoveTask;
import org.apache.sling.osgi.installer.impl.tasks.BundleUpdateTask;
+import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Bundle;
public class BundleTaskCreatorTest {
public static final String SN = "TestSymbolicName";
- private final OsgiInstallerContext ctx = new MockOsgiInstallerContext();
+ private MockOsgiInstallerContext ctx;
- private SortedSet<OsgiInstallerTask> getTasks(RegisteredResource [] resources, BundleTaskCreator btc) {
+ @Before
+ public void setUp() throws IOException {
+ ctx = new MockOsgiInstallerContext();
+ }
+
+ private SortedSet<OsgiInstallerTask> getTasks(RegisteredResource [] resources, BundleTaskCreator btc) throws IOException {
final SortedSet<RegisteredResource> s = OsgiInstallerThread.createRegisteredResourcesEntry();
for(RegisteredResource r : resources) {
s.add(r);
@@ -46,7 +53,7 @@
}
@Test
- public void testSingleBundleNew() {
+ public void testSingleBundleNew() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.0")
};
@@ -57,7 +64,7 @@
}
@Test
- public void testSingleBundleAlreadyInstalled() {
+ public void testSingleBundleAlreadyInstalled() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.0")
};
@@ -78,7 +85,7 @@
}
@Test
- public void testBundleUpgrade() {
+ public void testBundleUpgrade() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.1")
};
@@ -93,7 +100,7 @@
}
@Test
- public void testBundleUpgradeBothRegistered() {
+ public void testBundleUpgradeBothRegistered() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.1"),
new MockBundleResource(SN, "1.0")
@@ -109,7 +116,7 @@
}
@Test
- public void testBundleUpgradeBothRegisteredReversed() {
+ public void testBundleUpgradeBothRegisteredReversed() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.0"),
new MockBundleResource(SN, "1.1")
@@ -125,7 +132,7 @@
}
@Test
- public void testBundleUpgradeSnapshot() {
+ public void testBundleUpgradeSnapshot() throws IOException {
// Need to use OSGi-compliant version number, in bundles
// bnd and other tools generate correct numbers.
final String v = "2.0.7.SNAPSHOT";
@@ -143,7 +150,7 @@
}
@Test
- public void testBundleRemoveSingle() {
+ public void testBundleRemoveSingle() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.0")
};
@@ -159,7 +166,7 @@
}
@Test
- public void testBundleRemoveMultiple() {
+ public void testBundleRemoveMultiple() throws IOException {
final RegisteredResource [] r = {
new MockBundleResource(SN, "1.0"),
new MockBundleResource(SN, "1.1"),
@@ -179,10 +186,10 @@
}
@Test
- public void testDowngradeOfRemovedResource() {
+ public void testDowngradeOfRemovedResource() throws IOException {
final RegisteredResource [] r = {
- new MockBundleResource(SN, "1.0"),
- new MockBundleResource(SN, "1.1"),
+ new MockBundleResource(SN, "1.0.0"),
+ new MockBundleResource(SN, "1.1.0"),
};
// Simulate V1.1 installed but resource is gone -> downgrade to 1.0
@@ -190,7 +197,8 @@
{
final MockBundleTaskCreator c = new MockBundleTaskCreator();
- c.addBundleInfo(SN, "1.1", Bundle.ACTIVE);
+ c.addBundleInfo(SN, "1.1.0", Bundle.ACTIVE);
+ ctx.saveInstalledBundleInfo(SN, "fakedigest", "1.1.0");
final SortedSet<OsgiInstallerTask> s = getTasks(r, c);
assertEquals("Expected one task", 1, s.size());
assertTrue("Expected a BundleUpdateTask", s.first() instanceof BundleUpdateTask);
@@ -198,5 +206,4 @@
assertEquals("Update should be to V1.0", r[0], t.getResource());
}
}
-
}
\ No newline at end of file
Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleTaskCreator.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleTaskCreator.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleTaskCreator.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockBundleTaskCreator.java Thu Oct 15 06:01:12 2009
@@ -30,7 +30,7 @@
private final Map<String, BundleInfo> fakeBundleInfo = new HashMap<String, BundleInfo>();
void addBundleInfo(String symbolicName, String version, int state) {
- fakeBundleInfo.put(symbolicName, new BundleInfo(new Version(version), state));
+ fakeBundleInfo.put(symbolicName, new BundleInfo(symbolicName, new Version(version), state));
}
@Override
Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java Thu Oct 15 06:01:12 2009
@@ -18,6 +18,7 @@
*/
package org.apache.sling.osgi.installer.impl;
+import java.io.File;
import java.io.IOException;
import org.osgi.framework.Bundle;
@@ -29,6 +30,14 @@
public class MockOsgiInstallerContext implements OsgiInstallerContext {
+ private final PersistentBundleInfo persistentBundleInfo;
+
+ public MockOsgiInstallerContext() throws IOException {
+ final File f = File.createTempFile(MockOsgiInstallerContext.class.getSimpleName(), ".data");
+ f.deleteOnExit();
+ persistentBundleInfo = new PersistentBundleInfo(this, f);
+ }
+
public void addTaskToCurrentCycle(OsgiInstallerTask t) {
}
@@ -65,10 +74,19 @@
return v.toString().indexOf(OsgiInstallerImpl.MAVEN_SNAPSHOT_MARKER) >= 0;
}
- public String getBundleDigest(Bundle b) throws IOException {
- return null;
+ public String getInstalledBundleDigest(Bundle b) throws IOException {
+ return persistentBundleInfo.getDigest(b.getSymbolicName());
}
- public void saveBundleDigest(Bundle b, String digest) throws IOException {
+ public String getInstalledBundleVersion(String symbolicName) throws IOException {
+ return persistentBundleInfo.getInstalledVersion(symbolicName);
+ }
+
+ public void saveInstalledBundleInfo(Bundle b, String digest, String version) throws IOException {
+ saveInstalledBundleInfo(b.getSymbolicName(), digest, version);
+ }
+
+ public void saveInstalledBundleInfo(String symbolicName, String digest, String version) throws IOException {
+ persistentBundleInfo.putInfo(symbolicName, digest, version);
}
}
Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentResourceListTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentResourceListTest.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentResourceListTest.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/PersistentResourceListTest.java Thu Oct 15 06:01:12 2009
@@ -39,7 +39,7 @@
private final static String FAKE = "fakebundle.";
@Test
- public void testFileNotFound() {
+ public void testFileNotFound() throws IOException {
File f = new File("NONEXISTENT");
PersistentResourceList p = new PersistentResourceList(new MockOsgiInstallerContext(), f);
assertNotNull(p.getData());
@@ -61,7 +61,7 @@
}
@Test
- public void testTestData() {
+ public void testTestData() throws IOException {
File f = new File("NONEXISTENT");
PersistentResourceList p = new PersistentResourceList(new MockOsgiInstallerContext(), f);
assertNotNull(p.getData());
Modified: 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=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundlePrioritiesTest.java Thu Oct 15 06:01:12 2009
@@ -61,8 +61,7 @@
resetCounters();
installer.addResource(getInstallableResource(
getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest1"));
- // wait for two tasks: install and start
- waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 2);
+ waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
assertBundle("Initial install", symbolicName, null, Bundle.ACTIVE);
}
@@ -76,8 +75,7 @@
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);
+ waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
}
assertNoOsgiTasks("At end of test");
Added: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java?rev=825404&view=auto
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java (added)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java Thu Oct 15 06:01:12 2009
@@ -0,0 +1,84 @@
+/*
+ * 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.FileInputStream;
+import java.io.InputStream;
+
+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;
+
+/** Test the second SLING-1106 scenario: if a bundle is updated
+ * via the BundleContext, the installer should not downgrade it
+ * back to its own version.
+ */
+@RunWith(JUnit4TestRunner.class)
+public class ContextBundleUpdateTest 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
+ public void testContextUpdate() throws Exception {
+
+ // Install V1.0 via installer
+ final String symbolicName = "osgi-installer-testbundle";
+ assertNull("Test bundle must be absent before installing", findBundle(symbolicName));
+ resetCounters();
+ installer.addResource(getInstallableResource(
+ getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.0.jar"), "digest0"));
+ waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
+ final Bundle b = assertBundle("After initial install", symbolicName, "1.0", Bundle.ACTIVE);
+
+ // Update to 1.1, directly via bundle context
+ final InputStream is = new FileInputStream(getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar"));
+ try {
+ b.update(is);
+ } finally {
+ is.close();
+ }
+ assertBundle("After direct update", symbolicName, "1.1", Bundle.ACTIVE);
+
+ // Install another bundle (to trigger installer queue activity), wait
+ // for installer to be idle and check version
+ resetCounters();
+ installer.addResource(getInstallableResource(
+ getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest1"));
+ waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
+ assertBundle("-snap bundle install", "osgi-installer-snapshot-test", null, Bundle.ACTIVE);
+ assertBundle("After installing another bundle", symbolicName, "1.1", Bundle.ACTIVE);
+ }
+}
Propchange: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/ContextBundleUpdateTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RemovedResourceDetectionTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RemovedResourceDetectionTest.java?rev=825404&r1=825403&r2=825404&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RemovedResourceDetectionTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/RemovedResourceDetectionTest.java Thu Oct 15 06:01:12 2009
@@ -79,6 +79,7 @@
final List<InstallableResource> data = new ArrayList<InstallableResource>();
data.add(getInstallableResource(getTestBundle(BUNDLE_BASE_NAME + "-testB-1.0.jar")));
installer.registerResources(data, URL_SCHEME);
+ sleep(500);
waitForInstallerAction(OsgiInstaller.WORKER_THREAD_BECOMES_IDLE_COUNTER, 1);
assertBundle("After installer restart", symbolicNameB, "1.0", Bundle.ACTIVE);
assertNull("Bundle not in second list should be removed", findBundle(symbolicNameA));