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/14 16:28:28 UTC

svn commit: r804237 - 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/ instal...

Author: bdelacretaz
Date: Fri Aug 14 14:28:27 2009
New Revision: 804237

URL: http://svn.apache.org/viewvc?rev=804237&view=rev
Log:
SLING-1078 - starting to rewrite integration tests, work in progress

Added:
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java
      - copied, changed from r804107, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerContext.java
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java
      - copied, changed from r804107, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerTask.java
Removed:
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerContext.java
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerTask.java
Modified:
    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/RegisteredResource.java
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/Storage.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/BundleStartTask.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/InstallRemoveTask.java
    sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/SynchronousRefreshPackagesTask.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/MockOsgiControllerContext.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/StorageTest.java
    sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java
    sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveIgnoreTest.java
    sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallTest.java
    sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/OsgiInstallerTestBase.java

Copied: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java (from r804107, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerContext.java)
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java?p2=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java&p1=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerContext.java&r1=804107&r2=804237&rev=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerContext.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerContext.java Fri Aug 14 14:28:27 2009
@@ -23,19 +23,20 @@
 import org.osgi.service.log.LogService;
 import org.osgi.service.packageadmin.PackageAdmin;
 
-/** Context for OsgiControllerTask */
-public interface OsgiControllerContext {
+/** Installer context, gives access to selected methods of the {@link OsgiInstallerImpl} */
+public interface OsgiInstallerContext {
 	Storage getStorage();
 	BundleContext getBundleContext();
 	PackageAdmin getPackageAdmin();
 	ConfigurationAdmin getConfigurationAdmin();
 	LogService getLogService();
+	void incrementCounter(int index);
 	
 	/** Schedule a task for execution in the current OsgiController cycle */
-	void addTaskToCurrentCycle(OsgiControllerTask t);
+	void addTaskToCurrentCycle(OsgiInstallerTask t);
 	
 	/** Schedule a task for execution in the next OsgiController cycle, 
 	 * 	usually to indicate that a task must be retried 
 	 */
-	void addTaskToNextCycle(OsgiControllerTask t);
+	void addTaskToNextCycle(OsgiInstallerTask t);
 }

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=804237&r1=804236&r2=804237&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 Fri Aug 14 14:28:27 2009
@@ -31,11 +31,12 @@
 import org.osgi.util.tracker.ServiceTracker;
 
 /** OsgiInstaller service implementation */
-public class OsgiInstallerImpl implements OsgiInstaller, OsgiControllerContext {
+public class OsgiInstallerImpl implements OsgiInstaller, OsgiInstallerContext {
 
 	private final BundleContext bundleContext;
     private final PackageAdmin packageAdmin;
     private final ServiceTracker logServiceTracker;
+    private final OsgiInstallerThread installerThread;
     private long [] counters = new long[COUNTERS_SIZE];
 
     public OsgiInstallerImpl(final BundleContext bc,
@@ -45,6 +46,10 @@
         this.bundleContext = bc;
         this.packageAdmin = pa;
         this.logServiceTracker = logServiceTracker;
+        
+        installerThread = new OsgiInstallerThread(this);
+        installerThread.setDaemon(true);
+        installerThread.start();
     }
 
     public void deactivate() {
@@ -71,15 +76,11 @@
 		return (LogService)logServiceTracker.getService();
 	}
 
-	public void addTaskToCurrentCycle(OsgiControllerTask t) {
-		if(getLogService() != null) {
-			getLogService().log(LogService.LOG_DEBUG, "adding task to current cycle:" + t);
-		}
-		// TODO
-		//tasksForThisCycle.add(t);
+	public void addTaskToCurrentCycle(OsgiInstallerTask t) {
+		installerThread.addTaskToCurrentCycle(t);
 	}
 
-	public void addTaskToNextCycle(OsgiControllerTask t) {
+	public void addTaskToNextCycle(OsgiInstallerTask t) {
 		if(getLogService() != null) {
 			getLogService().log(LogService.LOG_DEBUG, "adding task to next cycle:" + t);
 		}
@@ -99,8 +100,9 @@
 		return counters;
 	}
 
-	public void addResource(InstallableResource d) throws IOException {
-		// TODO
+	public void addResource(InstallableResource r) throws IOException {
+	    // TODO do not add if we already have it, based on digest
+	    installerThread.addResource(new RegisteredResource(bundleContext, r));
 	}
 
 	public void registerResources(Collection<InstallableResource> data,
@@ -116,4 +118,8 @@
 		// TODO
 		return null;
 	}
+	
+	public void incrementCounter(int index) {
+	    counters[index]++;
+	}
 }
\ No newline at end of file

Copied: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java (from r804107, sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerTask.java)
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java?p2=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java&p1=sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerTask.java&r1=804107&r2=804237&rev=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/OsgiInstallerTask.java Fri Aug 14 14:28:27 2009
@@ -18,28 +18,28 @@
  */
 package org.apache.sling.osgi.installer.impl;
 
-/** Base class for tasks that can be executed by the OsgiController */ 
-public abstract class OsgiControllerTask implements Comparable<OsgiControllerTask> {
+/** Base class for tasks that can be executed by the {@link OsgiInstallerImpl} */ 
+public abstract class OsgiInstallerTask implements Comparable<OsgiInstallerTask> {
 	/** Execute this task */
-	public abstract void execute(OsgiControllerContext ctx) throws Exception;
+	public abstract void execute(OsgiInstallerContext ctx) throws Exception;
 	
 	/** Tasks are sorted according to this key */
 	public abstract String getSortKey();
 
 	/** All comparisons are based on getSortKey() */
-	public final int compareTo(OsgiControllerTask o) {
+	public final int compareTo(OsgiInstallerTask o) {
 		return getSortKey().compareTo(o.getSortKey());
 	}
 	
 	/** Is it worth executing this task now? */
-	public boolean isExecutable(OsgiControllerContext ctx) throws Exception {
+	public boolean isExecutable(OsgiInstallerContext ctx) throws Exception {
 	    return true;
 	}
 
 	@Override
 	public final boolean equals(Object o) {
-		if(o instanceof OsgiControllerTask) {
-			return getSortKey().equals(((OsgiControllerTask)o).getSortKey());
+		if(o instanceof OsgiInstallerTask) {
+			return getSortKey().equals(((OsgiInstallerTask)o).getSortKey());
 		}
 		return false;
 	}

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=804237&r1=804236&r2=804237&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 14:28:27 2009
@@ -57,36 +57,61 @@
 	private final Dictionary<String, Object> dictionary;
 	private static long fileNumber;
 	
+	static enum State {
+	    NEW,
+	    ACTIVE,
+        INSTALLED,
+	    IGNORED,
+	    REMOVED,
+	}
+    private State desiredState = State.ACTIVE;
+    private State actualState = State.NEW;
+    
+    static enum ResourceType {
+        BUNDLE,
+        CONFIG
+    }
+    
+    private final ResourceType resourceType;
+	
 	public static final String DIGEST_TYPE = "MD5";
 	
+	/** Create a RegisteredResource from given data. If the data's extension
+	 *  maps to a configuration and the data provides an input stream, it is
+	 *  converted to a Dictionary 
+	 */
 	public RegisteredResource(BundleContext ctx, InstallableResource input) throws IOException {
-		url = input.getUrl();
-		
-		// TODO if input.url ends with a "config" extension, convert to dictionary
-		
-		try {
-			if(input.getDictionary() == null) {
-				dictionary = null;
-				if(input.getInputStream() == null) {
-					throw new IllegalArgumentException("input provides no Dictionary and no InputStream:" + input);
-				} else {
-					dataFile = getDataFile(ctx);
-					copyToLocalStorage(input.getInputStream(), dataFile);
-					digest = input.getDigest();
-					if(digest == null || digest.length() == 0) {
-					    throw new IllegalArgumentException(
-					            "Digest must be supplied for an InstallableResource that wraps an InputStream");
-					}
-				}
-			} else {
-				dataFile = null;
-				dictionary = copy(input.getDictionary());
-				digest = computeDigest(dictionary);
-			}
-			
-    	} catch(NoSuchAlgorithmException nse) {
-    		throw new IOException("NoSuchAlgorithmException:" + DIGEST_TYPE);
+	    
+	    try {
+    		url = input.getUrl();
+    		resourceType = computeResourceType(input.getExtension());
     		
+    		if(resourceType == ResourceType.BUNDLE) {
+                if(input.getInputStream() == null) {
+                    throw new IllegalArgumentException("InputStream is required for BUNDLE resource type: " + input);
+                }
+                dictionary = null;
+                dataFile = getDataFile(ctx);
+                copyToLocalStorage(input.getInputStream(), dataFile);
+                digest = input.getDigest();
+                if(digest == null || digest.length() == 0) {
+                    throw new IllegalArgumentException(
+                            "Digest must be supplied for BUNDLE resource type: " + input);
+                }
+    		} else {
+                dataFile = null;
+                if(input.getInputStream() == null) {
+                    // config provided as a Dictionary
+                    dictionary = copy(input.getDictionary());
+                } else {
+                    dictionary = readDictionary(input.getInputStream()); 
+                }
+                try {
+                    digest = computeDigest(dictionary);
+                } catch(NoSuchAlgorithmException nse) {
+                    throw new IOException("NoSuchAlgorithmException:" + DIGEST_TYPE);
+                }
+    		}
     	} finally {
     		if(input.getInputStream() != null) {
     			input.getInputStream().close();
@@ -146,7 +171,7 @@
     }
     
     /** Copy data to local storage */
-	private void copyToLocalStorage(InputStream data, File f) throws IOException, NoSuchAlgorithmException {
+	private void copyToLocalStorage(InputStream data, File f) throws IOException {
 		final OutputStream os = new BufferedOutputStream(new FileOutputStream(f));
 		try {
 			final byte[] buffer = new byte[16384];
@@ -191,4 +216,36 @@
 	    }
 	    return result;
 	}
+	
+	public String getUrl() {
+	    return url;
+	}
+
+    public State getDesiredState() {
+        return desiredState;
+    }
+
+    public void setDesiredState(State desiredState) {
+        this.desiredState = desiredState;
+    }
+
+    public State getActualState() {
+        return actualState;
+    }
+
+    public void setActualState(State actualState) {
+        this.actualState = actualState;
+    }
+    
+    public ResourceType getResourceType() {
+        return resourceType;
+    }
+    
+    static ResourceType computeResourceType(String extension) {
+        if(extension.equals("jar")) {
+            return ResourceType.BUNDLE;
+        } else {
+            return ResourceType.CONFIG;
+        }
+    }
 }

Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/Storage.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/Storage.java?rev=804237&r1=804236&r2=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/Storage.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/Storage.java Fri Aug 14 14:28:27 2009
@@ -45,7 +45,7 @@
     /** Create Storage that uses dataFile for persistence, and
      *  read the current status from that file */
     @SuppressWarnings("unchecked")
-    Storage(File dataFile, OsgiControllerContext ocs) throws IOException {
+    Storage(File dataFile, OsgiInstallerContext ocs) throws IOException {
         this.dataFile = dataFile;
         ObjectInputStream ois = null;
         Map<String, Map<String, Object>> loadedData = null;

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=804237&r1=804236&r2=804237&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 14:28:27 2009
@@ -23,27 +23,26 @@
 import java.util.Map;
 import java.util.jar.Manifest;
 
-import org.apache.sling.osgi.installer.impl.OsgiControllerContext;
-import org.apache.sling.osgi.installer.impl.OsgiInstallerImpl;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
 import org.apache.sling.osgi.installer.impl.Storage;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
 import org.osgi.framework.Version;
 import org.osgi.service.log.LogService;
 
-/** Install/remove task for bundles */
+/** Install/remove task for bundles 
+ *  TODO unusued? remove? */
 public class BundleInstallRemoveTask extends InstallRemoveTask {
 
 	private final BundleContext bundleContext;
 	
     public static final String MAVEN_SNAPSHOT_MARKER = "SNAPSHOT";
 
-    public BundleInstallRemoveTask(String uri, RegisteredResource data, BundleContext ctx, OsgiControllerContext ocs) {
+    public BundleInstallRemoveTask(String uri, RegisteredResource data, OsgiInstallerContext ocs) {
     	super(uri, data, ocs);
-    	this.bundleContext = ctx;
+    	this.bundleContext = ocs.getBundleContext();
     }
     
 	@Override
@@ -56,7 +55,7 @@
 	}
 
 	@Override
-	protected void doUninstall(OsgiControllerContext tctx, Map<String, Object> attributes) throws Exception {
+	protected void doUninstall(OsgiInstallerContext tctx, Map<String, Object> attributes) throws Exception {
         final Long longId = (Long) attributes.get(Storage.KEY_BUNDLE_ID);
         if (longId == null) {
         	if(ocs.getLogService() != null) {
@@ -80,7 +79,7 @@
 	}
 
 	@Override
-	protected boolean doInstallOrUpdate(OsgiControllerContext tctx, Map<String, Object> attributes) throws Exception {
+	protected boolean doInstallOrUpdate(OsgiInstallerContext tctx, Map<String, Object> attributes) throws Exception {
 
     	// Check that we have bundle data and manifest
     	InputStream is = data.getInputStream();
@@ -95,7 +94,7 @@
 
         // Update if we already have a bundle id, else install
 		Bundle b;
-		boolean updated;
+		boolean updated = false;
 		try {
 			b = null;
 			updated = false;

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=804237&r1=804236&r2=804237&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 Fri Aug 14 14:28:27 2009
@@ -20,15 +20,16 @@
 
 import java.text.DecimalFormat;
 
+import org.apache.sling.osgi.installer.OsgiInstaller;
 import org.apache.sling.osgi.installer.impl.Activator;
-import org.apache.sling.osgi.installer.impl.OsgiControllerTask;
-import org.apache.sling.osgi.installer.impl.OsgiControllerContext;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
 import org.osgi.service.log.LogService;
 
 /** Task that starts a bundle */
-public class BundleStartTask extends OsgiControllerTask {
+public class BundleStartTask extends OsgiInstallerTask {
 
 	private final long bundleId;
 	private final String sortKey;
@@ -50,7 +51,7 @@
 		return getClass().getSimpleName() + " (bundle " + bundleId + ")";
 	}
 
-	public void execute(OsgiControllerContext tctx) throws Exception {
+	public void execute(OsgiInstallerContext tctx) throws Exception {
 		final Bundle b = tctx.getBundleContext().getBundle(bundleId);
 		final LogService log = tctx.getLogService();
 		boolean needToRetry = false;
@@ -101,10 +102,11 @@
 	        }
 		}
 		retryCount++;
+		tctx.incrementCounter(OsgiInstaller.OSGI_TASKS_COUNTER);
 	}
 	
 	/** Do not execute this task if waiting for events */
-    public boolean isExecutable(OsgiControllerContext tctx) {
+    public boolean isExecutable(OsgiInstallerContext tctx) {
         final long eventsCount = Activator.getTotalEventsCount(); 
         final boolean result = eventsCount >= eventsCountForRetrying; 
         if(!result) {

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=804237&r1=804236&r2=804237&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 14:28:27 2009
@@ -21,7 +21,7 @@
 import java.util.Dictionary;
 import java.util.Map;
 
-import org.apache.sling.osgi.installer.impl.OsgiControllerContext;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.log.LogService;
@@ -33,7 +33,7 @@
     static final String CONFIG_PATH_KEY = "_jcr_config_path";
     static final String [] CONFIG_EXTENSIONS = { ".cfg", ".properties" };
     
-	public ConfigInstallRemoveTask(String uri, RegisteredResource data, OsgiControllerContext ocs) {
+	public ConfigInstallRemoveTask(String uri, RegisteredResource data, OsgiInstallerContext ocs) {
 		super(uri, data, ocs);
 	}
 	
@@ -47,7 +47,7 @@
 	}
 
 	@Override
-	protected boolean doInstallOrUpdate(OsgiControllerContext tctx, Map<String, Object> attributes) throws Exception {
+	protected boolean doInstallOrUpdate(OsgiInstallerContext tctx, Map<String, Object> attributes) throws Exception {
     	// Convert data to a configuration Dictionary
     	Dictionary dict = data.getDictionary();
 
@@ -88,7 +88,7 @@
 	}
 
 	@Override
-	protected void doUninstall(OsgiControllerContext tctx, Map<String, Object> attributes) throws Exception {
+	protected void doUninstall(OsgiInstallerContext tctx, Map<String, Object> attributes) throws Exception {
         final ConfigurationPid pid = new ConfigurationPid(uri);
         final Configuration cfg = TaskUtilities.getConfiguration(pid, false, ocs);
         // TODO defer delete if ConfigAdmin not available?

Modified: sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/InstallRemoveTask.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/InstallRemoveTask.java?rev=804237&r1=804236&r2=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/InstallRemoveTask.java (original)
+++ sling/trunk/installer/osgi/installer/src/main/java/org/apache/sling/osgi/installer/impl/tasks/InstallRemoveTask.java Fri Aug 14 14:28:27 2009
@@ -20,20 +20,20 @@
 
 import java.util.Map;
 
-import org.apache.sling.osgi.installer.impl.OsgiControllerContext;
-import org.apache.sling.osgi.installer.impl.OsgiControllerTask;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
 
 /** Base class for OsgiControllerTasks that install or
  * 	remove OSGi bundles or configs (or deployment packages, etc.)
  */
-abstract class InstallRemoveTask extends OsgiControllerTask {
+abstract class InstallRemoveTask extends OsgiInstallerTask {
 
 	protected final String uri;
 	protected final RegisteredResource data;
-	protected final OsgiControllerContext ocs;
+	protected final OsgiInstallerContext ocs;
 
-    protected InstallRemoveTask(String uri, RegisteredResource data, OsgiControllerContext ocs) {
+    protected InstallRemoveTask(String uri, RegisteredResource data, OsgiInstallerContext ocs) {
     	this.uri = uri;
     	this.data = data;
     	this.ocs = ocs;
@@ -51,7 +51,7 @@
 	}
 
 	/** {@inheritDoc} */
-	public void execute(OsgiControllerContext context) throws Exception {
+	public void execute(OsgiInstallerContext context) throws Exception {
 		// TODO cleanup stored data? (previously RegisteredResourceWrapper)
 	}
 	
@@ -61,8 +61,8 @@
 	}
 	
 	/** Do the actual uninstall */
-	protected abstract void doUninstall(OsgiControllerContext ctx, Map<String, Object> attributes) throws Exception;
+	protected abstract void doUninstall(OsgiInstallerContext ctx, Map<String, Object> attributes) throws Exception;
 	
 	/** Do the actual install or update */
-	protected abstract boolean doInstallOrUpdate(OsgiControllerContext ctx, Map<String, Object> attributes) throws Exception;
+	protected abstract boolean doInstallOrUpdate(OsgiInstallerContext ctx, Map<String, Object> attributes) throws Exception;
 }

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=804237&r1=804236&r2=804237&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 Fri Aug 14 14:28:27 2009
@@ -18,21 +18,21 @@
  */
 package org.apache.sling.osgi.installer.impl.tasks;
 
-import org.apache.sling.osgi.installer.impl.OsgiControllerContext;
-import org.apache.sling.osgi.installer.impl.OsgiControllerTask;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerTask;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.FrameworkEvent;
 import org.osgi.framework.FrameworkListener;
 import org.osgi.service.log.LogService;
 
 /** Task that executes an OSGi "refresh packages" operation, synchronously */
-public class SynchronousRefreshPackagesTask extends OsgiControllerTask implements FrameworkListener {
+public class SynchronousRefreshPackagesTask extends OsgiInstallerTask implements FrameworkListener {
 
     /** Max time allowed to refresh packages (TODO configurable??) */
     public static final int MAX_REFRESH_PACKAGES_WAIT_SECONDS = 30;
 
 	private int packageRefreshEventsCount;
-	private OsgiControllerContext ctx;
+	private OsgiInstallerContext ctx;
 
     /**
      * Handles the PACKAGES_REFRESHED framework event which is sent after
@@ -61,7 +61,7 @@
 		return getClass().getSimpleName();
 	}
 
-	public void execute(OsgiControllerContext ctx) throws Exception {
+	public void execute(OsgiInstallerContext ctx) throws Exception {
 		this.ctx = ctx;
         final int targetEventCount = packageRefreshEventsCount + 1;
         final long start = System.currentTimeMillis();
@@ -72,7 +72,7 @@
         // this task executes
     	for(Bundle b : ctx.getBundleContext().getBundles()) {
     		if(b.getState() == Bundle.ACTIVE) {
-    			final OsgiControllerTask t = new BundleStartTask(b.getBundleId());
+    			final OsgiInstallerTask t = new BundleStartTask(b.getBundleId());
     			ctx.addTaskToCurrentCycle(t);
             	if(ctx.getLogService() != null) {
             		ctx.getLogService().log(LogService.LOG_DEBUG, 

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=804237&r1=804236&r2=804237&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 14:28:27 2009
@@ -5,7 +5,7 @@
 import java.util.jar.JarInputStream;
 import java.util.jar.Manifest;
 
-import org.apache.sling.osgi.installer.impl.OsgiControllerContext;
+import org.apache.sling.osgi.installer.impl.OsgiInstallerContext;
 import org.apache.sling.osgi.installer.impl.RegisteredResource;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
@@ -87,7 +87,7 @@
     }
     
     /** Get or create configuration */
-    static Configuration getConfiguration(ConfigurationPid cp, boolean createIfNeeded, OsgiControllerContext ocs)
+    static Configuration getConfiguration(ConfigurationPid cp, boolean createIfNeeded, OsgiInstallerContext ocs)
     throws IOException, InvalidSyntaxException
     {
     	final ConfigurationAdmin configurationAdmin = ocs.getConfigurationAdmin();

Modified: 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/MockOsgiControllerContext.java?rev=804237&r1=804236&r2=804237&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/MockOsgiControllerContext.java Fri Aug 14 14:28:27 2009
@@ -23,12 +23,12 @@
 import org.osgi.service.log.LogService;
 import org.osgi.service.packageadmin.PackageAdmin;
 
-public class MockOsgiControllerContext implements OsgiControllerContext {
+public class MockOsgiControllerContext implements OsgiInstallerContext {
 
-	public void addTaskToCurrentCycle(OsgiControllerTask t) {
+	public void addTaskToCurrentCycle(OsgiInstallerTask t) {
 	}
 
-	public void addTaskToNextCycle(OsgiControllerTask t) {
+	public void addTaskToNextCycle(OsgiInstallerTask t) {
 	}
 
 	public BundleContext getBundleContext() {
@@ -50,4 +50,7 @@
 	public Storage getStorage() {
 		return null;
 	}
+
+    public void incrementCounter(int index) {
+    }
 }

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=804237&r1=804236&r2=804237&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 14:28:27 2009
@@ -19,6 +19,8 @@
 package org.apache.sling.osgi.installer.impl;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -26,6 +28,7 @@
 import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Dictionary;
 import java.util.Hashtable;
 
 import org.apache.sling.osgi.installer.InstallableResource;
@@ -57,10 +60,49 @@
 		assertEquals("TestInputStream must be closed by RegisteredResource", 1, t.closeCount);
 	}
 	
+    @org.junit.Test public void testResourceType() throws Exception {
+        {
+            final InputStream s = new ByteArrayInputStream("Some data".getBytes());
+            final RegisteredResource r = new LocalFileRegisteredResource(new InstallableResource("1.jar", s, "some digest"));
+            assertEquals(".jar URL creates a BUNDLE resource", 
+                    RegisteredResource.ResourceType.BUNDLE, r.getResourceType());
+            final InputStream rs = r.getInputStream();
+            assertNotNull("BUNDLE resource provides an InputStream", rs);
+            rs.close();
+            assertNull("BUNDLE resource does not provide a Dictionary", r.getDictionary());
+        }
+        
+        {
+            final InputStream s = new ByteArrayInputStream("foo=bar\nother=2".getBytes());
+            final RegisteredResource r = new LocalFileRegisteredResource(new InstallableResource("1.properties", s, null));
+            assertEquals(".properties URL creates a CONFIG resource", 
+                    RegisteredResource.ResourceType.CONFIG, r.getResourceType());
+            final InputStream rs = r.getInputStream();
+            assertNull("CONFIG resource does not provide an InputStream", rs);
+            final Dictionary<String, Object> d = r.getDictionary();
+            assertNotNull("CONFIG resource provides a Dictionary", d);
+            assertEquals("CONFIG resource dictionary has two properties", 2, d.size());
+        }
+        
+        {
+            final Hashtable<String, Object> data = new Hashtable<String, Object>();
+            data.put("foo", "bar");
+            data.put("other", 2);
+            final RegisteredResource r = new LocalFileRegisteredResource(new InstallableResource("1", data));
+            assertEquals("No-extension URL with Dictionary creates a CONFIG resource", 
+                    RegisteredResource.ResourceType.CONFIG, r.getResourceType());
+            final InputStream rs = r.getInputStream();
+            assertNull("CONFIG resource does not provide an InputStream", rs);
+            final Dictionary<String, Object> d = r.getDictionary();
+            assertNotNull("CONFIG resource provides a Dictionary", d);
+            assertEquals("CONFIG resource dictionary has two properties", 2, d.size());
+        }
+    }
+    
 	@org.junit.Test public void testLocalFileCopy() throws Exception {
 		final String data = "This is some data";
 		final InputStream in = new ByteArrayInputStream(data.getBytes());
-		final LocalFileRegisteredResource r = new LocalFileRegisteredResource(new InstallableResource(data, in, "somedigest"));
+		final LocalFileRegisteredResource r = new LocalFileRegisteredResource(new InstallableResource("1.jar", in, "somedigest"));
 		assertTrue("Local file exists", r.getDataFile(null).exists());
 		assertEquals("Local file length matches our data", data.getBytes().length, r.getDataFile(null).length());
 	}
@@ -68,14 +110,21 @@
     @org.junit.Test public void testMissingDigest() throws Exception {
         final String data = "This is some data";
         final InputStream in = new ByteArrayInputStream(data.getBytes());
+        
+        try {
+            new LocalFileRegisteredResource(new InstallableResource("1.jar", in, null));
+            fail("With jar extension, expected an IllegalArgumentException as digest is null");
+        } catch(IllegalArgumentException asExpected) {
+        }
+        
         try {
-            new LocalFileRegisteredResource(new InstallableResource(data, in, null));
-            fail("Expected an IllegalArgumentException as digest is null");
+            new LocalFileRegisteredResource(new InstallableResource("1.foo", in, null));
         } catch(IllegalArgumentException asExpected) {
+            fail("With non-jar extension, did not expect an IllegalArgumentException if digest is null");
         }
     }
     
-    @org.junit.Test public void testDictionaryDigestOutOfOrderData() throws Exception {
+    @org.junit.Test public void testDictionaryDigestFromDictionaries() throws Exception {
         final Hashtable<String, Object> d1 = new Hashtable<String, Object>();
         final Hashtable<String, Object> d2 = new Hashtable<String, Object>();
         
@@ -91,11 +140,26 @@
         final RegisteredResource r2 = new RegisteredResource(null, new InstallableResource("url1", d2));
         
         assertEquals(
-                "Two RegisteredResource with same values but different key orderings must have the same key", 
+                "Two RegisteredResource (Dictionary) with same values but different key orderings must have the same key", 
                 r1.getDigest(),
                 r2.getDigest()
         );
+    }
+    
+    @org.junit.Test public void testDictionaryDigestFromInputStreams() throws Exception {
+        final String d1 = "foo=bar\nsomething=another\n";
+        final String d2 = "something=another\nfoo=bar\n";
+        
+        final ByteArrayInputStream s1 = new ByteArrayInputStream(d1.getBytes());
+        final ByteArrayInputStream s2 = new ByteArrayInputStream(d2.getBytes());
         
-        // TODO do the same test starting with an InputStream, for configs
+        final RegisteredResource r1 = new RegisteredResource(null, new InstallableResource("url1.properties", s1, null));
+        final RegisteredResource r2 = new RegisteredResource(null, new InstallableResource("url2.properties", s2, null));
+        
+        assertEquals(
+                "Two RegisteredResource (InputStream) with same values but different key orderings must have the same key", 
+                r1.getDigest(),
+                r2.getDigest()
+        );
     }
 }
\ No newline at end of file

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=804237&r1=804236&r2=804237&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 Fri Aug 14 14:28:27 2009
@@ -29,7 +29,7 @@
 /** Test the Storage class */
 public class StorageTest {
 
-	private final OsgiControllerContext ocs = new MockOsgiControllerContext();
+	private final OsgiInstallerContext ocs = new MockOsgiControllerContext();
 	
     @org.junit.Test public void testEmptyDataFile() throws Exception {
         final Storage s = new Storage(Utilities.getTestFile(), ocs);

Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java?rev=804237&r1=804236&r2=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/TaskOrderingTest.java Fri Aug 14 14:28:27 2009
@@ -37,21 +37,21 @@
  */
 public class TaskOrderingTest {
 
-	private Set<OsgiControllerTask> taskSet;
+	private Set<OsgiInstallerTask> taskSet;
 	
 	@org.junit.Before public void setUp() {
 	    // The data type must be consistent with the "tasks" member
 	    // of the {@link OsgiControllerImpl} class.
-		taskSet = new TreeSet<OsgiControllerTask>(); 
+		taskSet = new TreeSet<OsgiInstallerTask>(); 
 	}
 	
 	private static RegisteredResource getRegisteredResource(String url) throws IOException {
 		return new RegisteredResource(null, new InstallableResource(url, new Hashtable<String, Object>()));
 	}
 	
-	private void assertOrder(int testId, Collection<OsgiControllerTask> actual, OsgiControllerTask [] expected) {
+	private void assertOrder(int testId, Collection<OsgiInstallerTask> actual, OsgiInstallerTask [] expected) {
 		int index = 0;
-		for(OsgiControllerTask t : actual) {
+		for(OsgiInstallerTask t : actual) {
 			if(!t.equals(expected[index])) {
 				fail("Test " + testId + ": at index " + index + ", expected " + expected[index] + " but got " + t);
 			}
@@ -62,11 +62,11 @@
 	@org.junit.Test 
 	public void testBasicOrdering() throws Exception {
 		int testIndex = 1;
-		final OsgiControllerTask [] tasksInOrder = {
+		final OsgiInstallerTask [] tasksInOrder = {
 			new ConfigInstallRemoveTask("someURI.cfg", null, null),
 			new ConfigInstallRemoveTask("someURI.cfg", getRegisteredResource("someURI.cfg"), null),
-			new BundleInstallRemoveTask("someURI", null, null, null),
-			new BundleInstallRemoveTask("someURI", getRegisteredResource("someURI.jar"), null, null),
+			new BundleInstallRemoveTask("someURI.jar", null, new MockOsgiControllerContext()),
+			new BundleInstallRemoveTask("someURI", getRegisteredResource("someURI.cfg"), new MockOsgiControllerContext()),
 			new SynchronousRefreshPackagesTask(),
 			new BundleStartTask(0),
 		};
@@ -115,15 +115,15 @@
 	@org.junit.Test 
 	public void testMultipleConfigAndBundles() throws Exception {
 		int testIndex = 1;
-		final OsgiControllerTask [] tasksInOrder = {
+		final OsgiInstallerTask [] tasksInOrder = {
 			new ConfigInstallRemoveTask("someURIa.cfg", null, null),
 			new ConfigInstallRemoveTask("someURIb.cfg", null, null),
 			new ConfigInstallRemoveTask("someURIa.cfg", getRegisteredResource("someURIa.cfg"), null),
 			new ConfigInstallRemoveTask("someURIb.cfg", getRegisteredResource("someURIb.cfg"), null),
-			new BundleInstallRemoveTask("someURIa.jar", null, null, null),
-			new BundleInstallRemoveTask("someURIb.jar", null, null, null),
-			new BundleInstallRemoveTask("someURIa.jar", getRegisteredResource("someURIa.jar"), null, null),
-			new BundleInstallRemoveTask("someURIb.jar", getRegisteredResource("someURIb.jar"), null, null),
+			new BundleInstallRemoveTask("someURIa.nothing", null, new MockOsgiControllerContext()),
+			new BundleInstallRemoveTask("someURIb.nothing", null, new MockOsgiControllerContext()),
+			new BundleInstallRemoveTask("someURIa.nothing", getRegisteredResource("someURIa.nothing"), new MockOsgiControllerContext()),
+			new BundleInstallRemoveTask("someURIb.nothing", getRegisteredResource("someURIb.nothing"), new MockOsgiControllerContext()),
 			new SynchronousRefreshPackagesTask(),
 			new BundleStartTask(0),
 		};
@@ -139,11 +139,11 @@
 	@org.junit.Test 
 	public void testMultipleRefreshAndStart() throws Exception {
 		int testIndex = 1;
-		final OsgiControllerTask [] tasksInOrder = {
+		final OsgiInstallerTask [] tasksInOrder = {
 			new ConfigInstallRemoveTask("someURI.cfg", null, null),
 			new ConfigInstallRemoveTask("someURI.cfg", getRegisteredResource("someURI.cfg"), null),
-			new BundleInstallRemoveTask("someURI", null, null, null),
-			new BundleInstallRemoveTask("someURI", getRegisteredResource("someURI.jar"), null, null),
+			new BundleInstallRemoveTask("someURI", null, new MockOsgiControllerContext()),
+			new BundleInstallRemoveTask("someURI", getRegisteredResource("someURI.nothing"), new MockOsgiControllerContext()),
 			new SynchronousRefreshPackagesTask(),
 			new BundleStartTask(0),
 			new BundleStartTask(1),
@@ -180,7 +180,7 @@
 	@org.junit.Test 
 	public void testBundleStartOrder() {
 		int testIndex = 1;
-		final OsgiControllerTask [] tasksInOrder = {
+		final OsgiInstallerTask [] tasksInOrder = {
 			new BundleStartTask(0),
 			new BundleStartTask(1),
 			new BundleStartTask(5),

Modified: sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveIgnoreTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveIgnoreTest.java?rev=804237&r1=804236&r2=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveIgnoreTest.java (original)
+++ sling/trunk/installer/osgi/installer/src/test/java/org/apache/sling/osgi/installer/impl/tasks/BundleInstallRemoveIgnoreTest.java Fri Aug 14 14:28:27 2009
@@ -32,7 +32,7 @@
 	private BundleInstallRemoveTask task;
 	
     @org.junit.Before public void setup() {
-        task = new BundleInstallRemoveTask(null, null, null, new MockOsgiControllerContext());
+        task = new BundleInstallRemoveTask(null, null, new MockOsgiControllerContext());
     }
 
 	@org.junit.Test public void testLowerVersion() {

Modified: sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallTest.java?rev=804237&r1=804236&r2=804237&view=diff
==============================================================================
--- sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallTest.java (original)
+++ sling/trunk/installer/osgi/it/src/test/java/org/apache/sling/osgi/installer/it/BundleInstallTest.java Fri Aug 14 14:28:27 2009
@@ -21,7 +21,7 @@
 import static org.junit.Assert.assertNull;
 
 import org.apache.sling.osgi.installer.OsgiInstaller;
-import org.junit.AfterClass;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -42,9 +42,9 @@
         setupInstaller();
     }
     
-    @AfterClass
-    public void cleanup() {
-        super.cleanup();
+    @After
+    public void tearDown() {
+        super.tearDown();
     }
 
 	@Test
@@ -60,8 +60,10 @@
     	{
             assertNull("Test bundle must be absent before installing", findBundle(symbolicName));
     	    resetCounters();
-    	    installer.addResource(getInstallableResource(getTestBundle("org.apache.sling.osgi.installer.it-" + POM_VERSION + "-testbundle-1.1.jar")));
-    	    waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 1);
+    	    installer.addResource(getInstallableResource(
+    	            getTestBundle("org.apache.sling.osgi.installer.it-" + POM_VERSION + "-testbundle-1.1.jar")));
+    	    // 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);
         	bundleId = b.getBundleId();
@@ -69,18 +71,21 @@
         	assertEquals("Version must be 1.1", "1.1", b.getHeaders().get(BUNDLE_VERSION));
     	}
 
-    	/** TODO
+        /** TODO
     	// Upgrade to later version, verify
     	{
-        	c.scheduleInstallOrUpdate(uri, new FileInstallableResource(getTestBundle("org.apache.sling.osgi.installer.it-" + POM_VERSION + "-testbundle-1.2.jar")));
-        	c.executeScheduledOperations();
+    	    resetCounters();
+            installer.addResource(getInstallableResource(
+                    getTestBundle("org.apache.sling.osgi.installer.it-" + POM_VERSION + "-testbundle-1.2.jar")));
+            // wait for two tasks: update (includes stop) and start
+            waitForInstallerAction(OsgiInstaller.OSGI_TASKS_COUNTER, 1);
         	final Bundle b = findBundle(symbolicName);
         	assertNotNull("Test bundle 1.2 must be found after waitForInstallerAction", b);
         	assertEquals("Installed bundle must be started", Bundle.ACTIVE, b.getState());
-        	assertEquals("Version must be 1.2 after upgrade", "1.2", b.getHeaders().get(BUNDLE_VERSION));
-        	assertEquals("Bundle ID must not change after upgrade", bundleId, b.getBundleId());
+        	assertEquals("Version must be 1.2 after update", "1.2", b.getHeaders().get(BUNDLE_VERSION));
+        	assertEquals("Bundle ID must not change after update", bundleId, b.getBundleId());
     	}
-    	
+
     	// Downgrade to lower version, installed bundle must not change
     	{
         	c.scheduleInstallOrUpdate(uri, new FileInstallableResource(getTestBundle("org.apache.sling.osgi.installer.it-" + POM_VERSION + "-testbundle-1.0.jar")));

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=804237&r1=804236&r2=804237&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 Fri Aug 14 14:28:27 2009
@@ -32,8 +32,6 @@
 
 import org.apache.sling.osgi.installer.InstallableResource;
 import org.apache.sling.osgi.installer.OsgiInstaller;
-import org.junit.Before;
-import org.junit.AfterClass;
 import org.ops4j.pax.exam.Inject;
 import org.ops4j.pax.exam.Option;
 import org.osgi.framework.Bundle;
@@ -75,7 +73,7 @@
         resetCounters();
     }
     
-    public void cleanup() {
+    public void tearDown() {
         if(configAdminTracker != null) {
             configAdminTracker.close();
             configAdminTracker = null;