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/08/20 11:31:56 UTC
svn commit: r806097 - 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 Aug 20 09:31:54 2009
New Revision: 806097
URL: http://svn.apache.org/viewvc?rev=806097&view=rev
Log:
SLING-1078 - keep track of bundle digests to avoid unnecessary updates, and test snapshot updates
Added:
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java
- copied, changed from r805815, sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiControllerContext.java
Removed:
sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiControllerContext.java
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/OsgiInstallerThread.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/BundleInstallTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleUpdateTask.java
sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.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/MockBundleResource.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/StorageTest.java
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleSnapshotUpdateTest.java
sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.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=806097&r1=806096&r2=806097&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 Aug 20 09:31:54 2009
@@ -18,6 +18,8 @@
*/
package org.apache.sling.osgi.installer.impl;
+import java.util.HashMap;
+import java.util.Map;
import java.util.SortedSet;
import org.apache.sling.osgi.installer.impl.tasks.BundleInstallTask;
@@ -25,15 +27,21 @@
import org.apache.sling.osgi.installer.impl.tasks.BundleUpdateTask;
import org.apache.sling.osgi.installer.impl.tasks.TaskUtilities;
import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
+import org.osgi.service.log.LogService;
/** TaskCreator that processes a list of bundle RegisteredResources */
class BundleTaskCreator implements OsgiInstallerThread.TaskCreator {
public static final String MAVEN_SNAPSHOT_MARKER = "SNAPSHOT";
+ /** Store the digests of the bundles for which we create update tasks,
+ * keyed by symbolic name, to avoid generating repated updates
+ * for snapshot bundles
+ */
+ private final Map<String, String> digests = new HashMap<String, String>();
+
/** Holds the bundle info that we need, makes it easier to test
* without an OSGi framework */
static class BundleInfo {
@@ -56,7 +64,7 @@
* has desired state == active, and generates the appropriate OSGi tasks to
* reach this state.
*/
- public void createTasks(BundleContext ctx, SortedSet<RegisteredResource> resources, SortedSet<OsgiInstallerTask> tasks) {
+ public void createTasks(OsgiInstallerContext ctx, SortedSet<RegisteredResource> resources, SortedSet<OsgiInstallerTask> tasks) {
// 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
@@ -68,10 +76,15 @@
}
}
+ RegisteredResource toUpdate = null;
+ String digestToSave = null;
+ final RegisteredResource firstResource = resources.first();
+ final String symbolicName = firstResource == null ? null :
+ (String)firstResource.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
+
if(toActivate == null) {
- // None of our resources are installable, remove corresponding bundle
- final BundleInfo info = getBundleInfo(ctx, resources.first());
- if(info != null) {
+ // None of our resources are installable, remove corresponding bundle if present
+ if(getBundleInfo(ctx, resources.first()) != null) {
tasks.add(new BundleRemoveTask(resources.first()));
}
@@ -79,26 +92,55 @@
final BundleInfo info = getBundleInfo(ctx, toActivate);
final Version newVersion = (Version)toActivate.getAttributes().get(Constants.BUNDLE_VERSION);
if(info == null) {
- // bundle is not installed yet
+ // bundle is not installed yet: install and save digest to avoid
+ // unnecessary updates
tasks.add(new BundleInstallTask(toActivate));
+ 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
- tasks.add(new BundleUpdateTask(toActivate));
+ toUpdate = toActivate;
} else if(compare == 0 && newVersion.toString().indexOf(MAVEN_SNAPSHOT_MARKER) >= 0){
// installed, same version but SNAPSHOT
- // TODO: update only if not updated with same digest yet
- tasks.add(new BundleUpdateTask(toActivate));
+ toUpdate = toActivate;
+ }
+ }
+
+ // Save the digest of installed and updated resources, keyed by
+ // bundle symbolic name, to avoid unnecessary updates
+ if(toUpdate != null) {
+ final String previousDigest = digests.get(symbolicName);
+ if(toUpdate.getDigest().equals(previousDigest)) {
+ if(ctx.getLogService() != null) {
+ ctx.getLogService().log(LogService.LOG_DEBUG,
+ "Ignoring update of " + toUpdate + ", digest didn't change");
+ }
+ digestToSave = previousDigest;
+ } else {
+ if(ctx.getLogService() != null) {
+ ctx.getLogService().log(LogService.LOG_DEBUG,
+ "Scheduling update of " + toUpdate + ", digest has changed");
+ }
+ tasks.add(new BundleUpdateTask(toUpdate));
+ digestToSave = toUpdate.getDigest();
}
}
+
+ if(digestToSave == null) {
+ if(symbolicName != null) {
+ digests.remove(symbolicName);
+ }
+ } else {
+ digests.put(symbolicName, digestToSave);
+ }
}
}
- protected BundleInfo getBundleInfo(BundleContext ctx, RegisteredResource bundle) {
+ protected BundleInfo getBundleInfo(OsgiInstallerContext ctx, RegisteredResource bundle) {
final String symbolicName = (String)bundle.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
- final Bundle b = TaskUtilities.getMatchingBundle(ctx, symbolicName);
+ final Bundle b = TaskUtilities.getMatchingBundle(ctx.getBundleContext(), symbolicName);
if(b == null) {
return null;
}
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=806097&r1=806096&r2=806097&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 Thu Aug 20 09:31:54 2009
@@ -26,7 +26,6 @@
import java.util.SortedSet;
import java.util.TreeSet;
-import org.osgi.framework.BundleContext;
import org.osgi.service.log.LogService;
/** Worker thread where all OSGi tasks are executed.
@@ -57,7 +56,7 @@
* @param resources ordered set of RegisteredResource which all have the same entityId
* @param tasks lists of tasks, to which we'll add the ones computed by this method
*/
- void createTasks(BundleContext ctx, SortedSet<RegisteredResource> resources, SortedSet<OsgiInstallerTask> tasks);
+ void createTasks(OsgiInstallerContext ctx, SortedSet<RegisteredResource> resources, SortedSet<OsgiInstallerTask> tasks);
}
OsgiInstallerThread(OsgiInstallerContext ctx) {
@@ -152,9 +151,11 @@
}
// Walk the list of entities, and create appropriate OSGi tasks for each group
+ // TODO do nothing for a group that's "stable" - i.e. one where no tasks were
+ // created in the last cycle??
for(SortedSet<RegisteredResource> group : registeredResources.values()) {
if(group.first().getResourceType().equals(RegisteredResource.ResourceType.BUNDLE)) {
- bundleTaskCreator.createTasks(ctx.getBundleContext(), group, tasks);
+ bundleTaskCreator.createTasks(ctx, group, tasks);
} else {
throw new IllegalArgumentException("No TaskCreator for resource type "+ group.first().getResourceType());
}
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=806097&r1=806096&r2=806097&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 09:31:54 2009
@@ -129,6 +129,11 @@
}
}
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + " " + url + " (" + digest + ")";
+ }
+
protected File getDataFile(BundleContext ctx) throws IOException {
String filename = null;
synchronized (getClass()) {
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=806097&r1=806096&r2=806097&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 Aug 20 09:31:54 2009
@@ -41,6 +41,7 @@
@Override
public void execute(OsgiInstallerContext ctx) throws Exception {
+ super.execute(ctx);
final Bundle b = ctx.getBundleContext().installBundle(resource.getUrl(), resource.getInputStream());
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/BundleRemoveTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java?rev=806097&r1=806096&r2=806097&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleRemoveTask.java Thu Aug 20 09:31:54 2009
@@ -44,6 +44,7 @@
@Override
public void execute(OsgiInstallerContext ctx) throws Exception {
+ super.execute(ctx);
final String symbolicName = (String)resource.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
final Bundle b = TaskUtilities.getMatchingBundle(ctx.getBundleContext(), symbolicName);
if(b == null) {
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java?rev=806097&r1=806096&r2=806097&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/BundleStartTask.java Thu Aug 20 09:31:54 2009
@@ -55,9 +55,10 @@
return getClass().getSimpleName() + ": bundle " + bundleId;
}
- public void execute(OsgiInstallerContext tctx) throws Exception {
- final Bundle b = tctx.getBundleContext().getBundle(bundleId);
- final LogService log = tctx.getLogService();
+ public void execute(OsgiInstallerContext ctx) throws Exception {
+ super.execute(ctx);
+ final Bundle b = ctx.getBundleContext().getBundle(bundleId);
+ final LogService log = ctx.getLogService();
boolean needToRetry = false;
if(b == null) {
@@ -102,11 +103,11 @@
eventsCountForRetrying = Activator.getTotalEventsCount() + 1;
}
- tctx.addTaskToNextCycle(this);
+ ctx.addTaskToNextCycle(this);
}
}
retryCount++;
- tctx.incrementCounter(OsgiInstaller.OSGI_TASKS_COUNTER);
+ ctx.incrementCounter(OsgiInstaller.OSGI_TASKS_COUNTER);
}
/** Do not execute this task if waiting for events */
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=806097&r1=806096&r2=806097&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 09:31:54 2009
@@ -41,8 +41,14 @@
return resource;
}
+ @Override
+ public String toString() {
+ return getClass().getSimpleName() + ": " + resource;
+ }
+
@Override
public void execute(OsgiInstallerContext ctx) throws Exception {
+ super.execute(ctx);
final String symbolicName = (String)resource.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME);
final Bundle b = TaskUtilities.getMatchingBundle(ctx.getBundleContext(), symbolicName);
if(b == null) {
Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java?rev=806097&r1=806096&r2=806097&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.java Thu Aug 20 09:31:54 2009
@@ -62,6 +62,7 @@
}
public void execute(OsgiInstallerContext ctx) throws Exception {
+ super.execute(ctx);
this.ctx = ctx;
final int targetEventCount = packageRefreshEventsCount + 1;
final long start = System.currentTimeMillis();
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=806097&r1=806096&r2=806097&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 Aug 20 09:31:54 2009
@@ -32,6 +32,7 @@
public class BundleTaskCreatorTest {
public static final String SN = "TestSymbolicName";
+ private final OsgiInstallerContext ctx = new MockOsgiInstallerContext();
private SortedSet<OsgiInstallerTask> getTasks(RegisteredResource [] resources, BundleTaskCreator btc) {
final SortedSet<RegisteredResource> s = OsgiInstallerThread.createRegisteredResourcesEntry();
@@ -40,7 +41,7 @@
}
final SortedSet<OsgiInstallerTask> tasks = new TreeSet<OsgiInstallerTask>();
- btc.createTasks(null, s, tasks);
+ btc.createTasks(ctx, s, tasks);
return tasks;
}
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=806097&r1=806096&r2=806097&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 09:31:54 2009
@@ -32,10 +32,12 @@
private final Map<String, Object> attributes = new HashMap<String, Object>();
private boolean installable = true;
+ private final String digest;
MockBundleResource(String symbolicName, String version) {
attributes.put(Constants.BUNDLE_SYMBOLICNAME, symbolicName);
attributes.put(Constants.BUNDLE_VERSION, new Version(version));
+ digest = symbolicName + "." + version;
}
public void cleanup() {
@@ -50,7 +52,7 @@
}
public String getDigest() {
- return null;
+ return digest;
}
public String getEntityId() {
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=806097&r1=806096&r2=806097&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 Aug 20 09:31:54 2009
@@ -21,7 +21,6 @@
import java.util.HashMap;
import java.util.Map;
-import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.Version;
@@ -35,8 +34,7 @@
}
@Override
- protected BundleInfo getBundleInfo(BundleContext ctx, RegisteredResource bundle) {
+ protected BundleInfo getBundleInfo(OsgiInstallerContext ctx, RegisteredResource bundle) {
return fakeBundleInfo.get(bundle.getAttributes().get(Constants.BUNDLE_SYMBOLICNAME));
}
-
}
Copied: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java (from r805815, sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiControllerContext.java)
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java?p2=sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java&p1=sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiControllerContext.java&r1=805815&r2=806097&rev=806097&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiControllerContext.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/MockOsgiInstallerContext.java Thu Aug 20 09:31:54 2009
@@ -23,7 +23,7 @@
import org.osgi.service.log.LogService;
import org.osgi.service.packageadmin.PackageAdmin;
-public class MockOsgiControllerContext implements OsgiInstallerContext {
+public class MockOsgiInstallerContext implements OsgiInstallerContext {
public void addTaskToCurrentCycle(OsgiInstallerTask t) {
}
Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/StorageTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/StorageTest.java?rev=806097&r1=806096&r2=806097&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/StorageTest.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/StorageTest.java Thu Aug 20 09:31:54 2009
@@ -29,7 +29,7 @@
/** Test the Storage class */
public class StorageTest {
- private final OsgiInstallerContext ocs = new MockOsgiControllerContext();
+ private final OsgiInstallerContext ocs = new MockOsgiInstallerContext();
@org.junit.Test public void testEmptyDataFile() throws Exception {
final Storage s = new Storage(Utilities.getTestFile(), ocs);
Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleSnapshotUpdateTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleSnapshotUpdateTest.java?rev=806097&r1=806096&r2=806097&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleSnapshotUpdateTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleSnapshotUpdateTest.java Thu Aug 20 09:31:54 2009
@@ -60,37 +60,61 @@
assertNull("Test bundle must be absent before installing", findBundle(symbolicName));
resetCounters();
installer.addResource(getInstallableResource(
- getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
+ getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar"), "digest1"));
// wait for two tasks: install and start
waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 2);
final Bundle b = findBundle(symbolicName);
assertNotNull("Test bundle 1.1 must be found after waitForInstallerAction", b);
+ assertNoOsgiTasks("At end of test");
- final long nOps = installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER];
+ // Update with same digest must be ignored
+ long nOps = installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER];
installer.addResource(getInstallableResource(
- getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar")));
+ getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar"), "digest1"));
waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 1);
- assertEquals("Updating non-snapshot bundle must not generate any OSGi tasks",
+ assertEquals("Updating testbundle with same digest must not generate any OSGi tasks",
nOps, installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER]);
+
+ // Update with different digest must be ignored
+ nOps = installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER];
+ installer.addResource(getInstallableResource(
+ getTestBundle(BUNDLE_BASE_NAME + "-testbundle-1.1.jar"), "digest2"));
+ waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 1);
+ assertEquals("Updating testbundle with different digest must not generate any OSGi tasks",
+ nOps, installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER]);
+
+ assertNoOsgiTasks("At end of test");
}
@Test
public void testSnapshot() throws IOException {
+
+ // Install test bundle
final String symbolicName = "osgi-installer-snapshot-test";
assertNull("Snapshot test bundle must be absent before installing", findBundle(symbolicName));
resetCounters();
installer.addResource(getInstallableResource(
- getTestBundle(BUNDLE_BASE_NAME + "-snap.jar")));
+ getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest1"));
// wait for two tasks: install and start
waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 2);
final Bundle b = findBundle(symbolicName);
assertNotNull("Snapshot bundle must be found after waitForInstallerAction", b);
- resetCounters();
+ // Update with same digest must be ignored
+ final long nOps = installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER];
installer.addResource(getInstallableResource(
- getTestBundle(BUNDLE_BASE_NAME + "-snap.jar")));
+ getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest1"));
waitForInstallerAction(OsgiInstaller.INSTALLER_CYCLES_COUNTER, 1);
- // If this fails it means bundle has not been updated
+ assertEquals("Updating snapshot bundle with same digest must not generate any OSGi tasks",
+ nOps, installer.getCounters()[OsgiInstaller.OSGI_TASKS_COUNTER]);
+
+ // Update with different digest must generate an OSGi update
+ resetCounters();
+ installer.addResource(getInstallableResource(
+ getTestBundle(BUNDLE_BASE_NAME + "-snap.jar"), "digest2"));
waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 1);
+
+ // And no more OSGi tasks after that
+ assertNoOsgiTasks("At end of test");
}
}
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=806097&r1=806096&r2=806097&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 09:31:54 2009
@@ -168,8 +168,14 @@
}
protected InstallableResource getInstallableResource(File testBundle) throws IOException {
+ return getInstallableResource(testBundle, null);
+ }
+
+ protected InstallableResource getInstallableResource(File testBundle, String digest) throws IOException {
final String url = URL_SCHEME + testBundle.getAbsolutePath();
- final String digest = testBundle.getAbsolutePath() + testBundle.lastModified();
+ if(digest == null) {
+ digest = testBundle.getAbsolutePath() + testBundle.lastModified();
+ }
return new InstallableResource(url, new FileInputStream(testBundle), digest);
}
@@ -207,12 +213,13 @@
}
protected void waitForInstallerAction(int counterType, long howMany) {
- // if waiting for installer cycles, reset counters first - we know
- // we want to wait from now on, not from an earlier resetCounters() call
+ // if waiting for installer cycles, get initial value from
+ // that counter - we know we want to wait from now on, not from an
+ // earlier resetCounters() call
+ long targetValue = counters[counterType] + howMany;
if(counterType == OsgiInstaller.INSTALLER_CYCLES_COUNTER) {
- resetCounters();
+ targetValue = installer.getCounters()[counterType] + howMany;
}
- final long targetValue = counters[counterType] + howMany;
final long endTime = System.currentTimeMillis() + WAIT_FOR_ACTION_TIMEOUT_MSEC;
long lastValue = 0;
while(System.currentTimeMillis() < endTime) {