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/05/19 15:50:42 UTC

svn commit: r776315 - in /incubator/sling/trunk/contrib/extensions/jcrinstall: it/src/test/java/org/apache/sling/jcr/jcrinstall/it/ osgi/src/main/java/org/apache/sling/osgi/installer/ osgi/src/main/java/org/apache/sling/osgi/installer/impl/ osgi/src/te...

Author: bdelacretaz
Date: Tue May 19 13:50:41 2009
New Revision: 776315

URL: http://svn.apache.org/viewvc?rev=776315&view=rev
Log:
SLING-904 - fix OsgiControllerTest.testDeferredConfigInstall

Added:
    incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java
      - copied, changed from r776243, incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ServiceProxy.java
Removed:
    incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ServiceProxy.java
Modified:
    incubator/sling/trunk/contrib/extensions/jcrinstall/it/src/test/java/org/apache/sling/jcr/jcrinstall/it/OsgiControllerTest.java
    incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessor.java
    incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
    incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiResourceProcessorList.java
    incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java

Modified: incubator/sling/trunk/contrib/extensions/jcrinstall/it/src/test/java/org/apache/sling/jcr/jcrinstall/it/OsgiControllerTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/contrib/extensions/jcrinstall/it/src/test/java/org/apache/sling/jcr/jcrinstall/it/OsgiControllerTest.java?rev=776315&r1=776314&r2=776315&view=diff
==============================================================================
--- incubator/sling/trunk/contrib/extensions/jcrinstall/it/src/test/java/org/apache/sling/jcr/jcrinstall/it/OsgiControllerTest.java (original)
+++ incubator/sling/trunk/contrib/extensions/jcrinstall/it/src/test/java/org/apache/sling/jcr/jcrinstall/it/OsgiControllerTest.java Tue May 19 13:50:41 2009
@@ -34,6 +34,7 @@
 
 import org.apache.sling.osgi.installer.DictionaryInstallableData;
 import org.apache.sling.osgi.installer.OsgiController;
+import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Inject;
@@ -44,14 +45,11 @@
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.service.startlevel.StartLevel;
 
 /** Test the OsgiController running in the OSGi framework */
 @RunWith(JUnit4TestRunner.class)
 public class OsgiControllerTest {
 	public final static String POM_VERSION = System.getProperty("jcrinstall.pom.version");
-	public final static int CONFIG_ADMIN_START_LEVEL = 100;
-	public final static int NO_CONFIG_ADMIN_START_LEVEL = CONFIG_ADMIN_START_LEVEL - 1;
 	
     @Inject
     protected BundleContext bundleContext;
@@ -93,23 +91,22 @@
     	return new File(System.getProperty("jcrinstall.base.dir"), bundleName);
     }
     
-    protected void setStartLevel(int level) throws InterruptedException {
-    	final StartLevel s = getService(StartLevel.class);
-    	s.setStartLevel(level);
+    protected void waitForConfigAdmin(boolean shouldBePresent) throws InterruptedException {
+    	final OsgiControllerServices svc = getService(OsgiControllerServices.class);
     	final int timeout = 5;
     	final long waitUntil = System.currentTimeMillis() + (timeout * 1000L);
     	do {
-    		if(s.getStartLevel() == level) {
+    		boolean isPresent = svc.getConfigurationAdmin() != null;
+    		if(isPresent == shouldBePresent) {
     			return;
     		}
     		Thread.sleep(100L);
     	} while(System.currentTimeMillis() < waitUntil);
-    	fail("Start level did not change to " + level + " after waiting " + timeout + " seconds");
+    	fail("ConfigurationAdmin service not available after waiting " + timeout + " seconds");
     }
     
     @Test
     public void testInstallAndRemoveConfig() throws Exception {
-    	setStartLevel(CONFIG_ADMIN_START_LEVEL);
     	final OsgiController c = getService(OsgiController.class);
     	final Dictionary<String, Object> cfgData = new Hashtable<String, Object>();
     	cfgData.put("foo", "bar");
@@ -132,10 +129,19 @@
     	assertNull("Config " + cfgPid + " must be gone after executeScheduledOperations", findConfiguration(cfgPid));
     }
     
-    // TODO test fails due to SCR no rebinding the ConfigurationAdmin service
-    // to the OsgiController @Test
+    @Test
     public void testDeferredConfigInstall() throws Exception {
-    	setStartLevel(CONFIG_ADMIN_START_LEVEL);
+    	
+    	final String cfgName = "org.apache.felix.configadmin";
+    	Bundle configAdmin = null;
+    	for(Bundle b : bundleContext.getBundles()) {
+    		if(b.getSymbolicName().equals(cfgName)) {
+    			configAdmin = b;
+    			break;
+    		}
+    	}
+    	assertNotNull(cfgName + " bundle must be found", configAdmin);
+    	waitForConfigAdmin(true);
     	
     	final OsgiController c = getService(OsgiController.class);
     	final Dictionary<String, Object> cfgData = new Hashtable<String, Object>();
@@ -147,10 +153,11 @@
     	assertNull("Config " + cfgPid + " must not be found right after scheduleInstall", findConfiguration(cfgPid));
     	
     	// Config installs must be deferred if ConfigAdmin service is stopped
-    	setStartLevel(NO_CONFIG_ADMIN_START_LEVEL);
+    	configAdmin.stop();
+    	waitForConfigAdmin(false);
     	c.executeScheduledOperations();
-    	setStartLevel(CONFIG_ADMIN_START_LEVEL);
-    	getService(ConfigurationAdmin.class);
+    	configAdmin.start();
+    	waitForConfigAdmin(true);
     	assertNull("Config " + cfgPid + " must not be installed if ConfigAdmin was stopped", findConfiguration(cfgPid));
     	
     	// with configadmin back, executeScheduledOperations must install deferred configs
@@ -248,8 +255,9 @@
                 vmOption(vmOpt),
                 waitForFrameworkStartup(),
         		provision(
-        	            mavenBundle("org.apache.felix", "org.apache.felix.scr", "1.0.6"),
-        	            mavenBundle("org.apache.felix", "org.apache.felix.configadmin").startLevel(CONFIG_ADMIN_START_LEVEL),
+        				// TODO use latest scr?
+        	            mavenBundle("org.apache.felix", "org.apache.felix.scr"),
+        	            mavenBundle("org.apache.felix", "org.apache.felix.configadmin"),
         	            mavenBundle("org.apache.sling", "org.apache.sling.commons.log"),
         	        	mavenBundle("org.apache.sling", "org.apache.sling.osgi.installer", POM_VERSION)
         		)

Copied: incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java (from r776243, incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ServiceProxy.java)
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java?p2=incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java&p1=incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ServiceProxy.java&r1=776243&r2=776315&rev=776315&view=diff
==============================================================================
--- incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ServiceProxy.java (original)
+++ incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/OsgiControllerServices.java Tue May 19 13:50:41 2009
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.sling.osgi.installer.impl;
+package org.apache.sling.osgi.installer;
 
 import org.osgi.service.cm.ConfigurationAdmin;
 
 /** Proxy for services that might not be always available, allows
- * 	classes which are not OSGi services to access such services easily
+ * 	classes which are not OSGi services to access such services easily.
+ * 	Should normally be part of the implementation package, but it is
+ * 	used in tests to find out when the controller is ready.
  */
-interface ServiceProxy {
+public interface OsgiControllerServices {
 	ConfigurationAdmin getConfigurationAdmin();
 }

Modified: incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessor.java?rev=776315&r1=776314&r2=776315&view=diff
==============================================================================
--- incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessor.java (original)
+++ incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessor.java Tue May 19 13:50:41 2009
@@ -28,6 +28,7 @@
 
 import org.apache.sling.osgi.installer.InstallableData;
 import org.apache.sling.osgi.installer.JcrInstallException;
+import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.apache.sling.osgi.installer.OsgiResourceProcessor;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.service.cm.Configuration;
@@ -43,9 +44,9 @@
     public static final String CONFIG_EXTENSION = ".cfg";
     private final Logger log = LoggerFactory.getLogger(this.getClass());
     private final DictionaryReader reader = new DictionaryReader();
-    private final ServiceProxy serviceProxy;
+    private final OsgiControllerServices serviceProxy;
     
-    ConfigResourceProcessor(ServiceProxy sp) {
+    ConfigResourceProcessor(OsgiControllerServices sp) {
         serviceProxy = sp;
     }
     

Modified: incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java?rev=776315&r1=776314&r2=776315&view=diff
==============================================================================
--- incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java (original)
+++ incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiControllerImpl.java Tue May 19 13:50:41 2009
@@ -28,10 +28,12 @@
 import org.apache.sling.osgi.installer.InstallableData;
 import org.apache.sling.osgi.installer.JcrInstallException;
 import org.apache.sling.osgi.installer.OsgiController;
+import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.apache.sling.osgi.installer.OsgiResourceProcessor;
 import org.apache.sling.osgi.installer.ResourceOverrideRules;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.BundleEvent;
+import org.osgi.framework.ServiceReference;
 import org.osgi.framework.SynchronousBundleListener;
 import org.osgi.service.cm.ConfigurationAdmin;
 import org.osgi.service.component.ComponentContext;
@@ -52,7 +54,7 @@
  *      name="service.vendor"
  *      value="The Apache Software Foundation"
 */
-public class OsgiControllerImpl implements OsgiController, SynchronousBundleListener, ServiceProxy {
+public class OsgiControllerImpl implements OsgiController, SynchronousBundleListener, OsgiControllerServices {
 
 	private BundleContext bundleContext;
     private Storage storage;
@@ -66,9 +68,6 @@
     /** Storage key: digest of an InstallableData */
     public static final String KEY_DIGEST = "data.digest";
 
-    /** @scr.reference cardinality="0..1" policy="dynamic" */
-    private ConfigurationAdmin configAdmin;
-
     /** @scr.reference */
     private PackageAdmin packageAdmin;
 
@@ -198,6 +197,14 @@
     }
 
 	public ConfigurationAdmin getConfigurationAdmin() {
-		return configAdmin;
+		// TODO ConfigurationAdmin should be bound/unbound rather than
+		// looking it up every time, but that caused problems in the it/OsgiControllerTest
+		if(bundleContext != null) {
+		   	final ServiceReference ref = bundleContext.getServiceReference(ConfigurationAdmin.class.getName());
+		    if(ref != null) {
+		    	return (ConfigurationAdmin)bundleContext.getService(ref);
+		    }
+		}
+		return null;
 	}
 }
\ No newline at end of file

Modified: incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiResourceProcessorList.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiResourceProcessorList.java?rev=776315&r1=776314&r2=776315&view=diff
==============================================================================
--- incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiResourceProcessorList.java (original)
+++ incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/main/java/org/apache/sling/osgi/installer/impl/OsgiResourceProcessorList.java Tue May 19 13:50:41 2009
@@ -21,6 +21,7 @@
 import java.util.LinkedList;
 
 import org.apache.sling.osgi.installer.InstallableData;
+import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.apache.sling.osgi.installer.OsgiResourceProcessor;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.packageadmin.PackageAdmin;
@@ -35,7 +36,7 @@
 class OsgiResourceProcessorList extends LinkedList<OsgiResourceProcessor> {
     private final Logger log = LoggerFactory.getLogger(getClass());
     
-	OsgiResourceProcessorList(BundleContext ctx, PackageAdmin pa, StartLevel sa, ServiceProxy sp) {
+	OsgiResourceProcessorList(BundleContext ctx, PackageAdmin pa, StartLevel sa, OsgiControllerServices sp) {
         add(new BundleResourceProcessor(ctx, pa, sa));
         add(new ConfigResourceProcessor(sp));
 	}

Modified: incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java?rev=776315&r1=776314&r2=776315&view=diff
==============================================================================
--- incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java (original)
+++ incubator/sling/trunk/contrib/extensions/jcrinstall/osgi/src/test/java/org/apache/sling/osgi/installer/impl/ConfigResourceProcessorTest.java Tue May 19 13:50:41 2009
@@ -20,6 +20,7 @@
 
 import java.util.Dictionary;
 
+import org.apache.sling.osgi.installer.OsgiControllerServices;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
 import org.hamcrest.Matcher;
@@ -41,7 +42,7 @@
         final String data = "foo = bar";
         final MockInstallableData id = new MockInstallableData(path, data);
         final ConfigurationAdmin ca = mockery.mock(ConfigurationAdmin.class);
-        final ServiceProxy sp = new ServiceProxy() {
+        final OsgiControllerServices sp = new OsgiControllerServices() {
 			public ConfigurationAdmin getConfigurationAdmin() {
 				return ca;
 			}