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 2008/09/10 14:44:34 UTC

svn commit: r693820 - in /incubator/sling/trunk/extensions/jcrinstall/src: main/java/org/apache/sling/jcr/jcrinstall/osgi/impl/ test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/

Author: bdelacretaz
Date: Wed Sep 10 05:44:33 2008
New Revision: 693820

URL: http://svn.apache.org/viewvc?rev=693820&view=rev
Log:
SLING-646 - processResourceQueue test added

Modified:
    incubator/sling/trunk/extensions/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessor.java
    incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessorTest.java
    incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/Utilities.java

Modified: incubator/sling/trunk/extensions/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessor.java?rev=693820&r1=693819&r2=693820&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessor.java (original)
+++ incubator/sling/trunk/extensions/jcrinstall/src/main/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessor.java Wed Sep 10 05:44:33 2008
@@ -105,30 +105,31 @@
         while(iter.hasNext()) {
             final Long id = iter.next();
             final Bundle bundle = ctx.getBundle(id.longValue());
+            final int state = bundle.getState();
             
             if(bundle == null) {
                 log.debug("Bundle id {} not found in processResourceQueue(), removed from pending bundles queue");
                 iter.remove();
                 
-            } else if ((bundle.getState() & Bundle.ACTIVE) > 0) {
+            } else if ((state & Bundle.ACTIVE) > 0) {
                 log.info("Bundle {} is already active, removed from pending bundles queue", bundle.getLocation());
                 iter.remove();
             
-            } else if ((bundle.getState() & Bundle.STARTING) > 0) {
+            } else if ((state & Bundle.STARTING) > 0) {
                 log.info("Bundle {} is starting.", bundle.getLocation());
                 
-            } else if ((bundle.getState() & Bundle.STOPPING) > 0) {
+            } else if ((state & Bundle.STOPPING) > 0) {
                 log.info("Bundle {} is stopping.", bundle.getLocation());
                 
-            } else if ((bundle.getState() & Bundle.UNINSTALLED) > 0) {
+            } else if ((state & Bundle.UNINSTALLED) > 0) {
                 log.info("Bundle {} is uninstalled, removed from pending bundles queue", bundle.getLocation());
                 iter.remove();
                 
-            } else if ((bundle.getState() & Bundle.RESOLVED) > 0) {
+            } else if ((state & Bundle.RESOLVED) > 0) {
                 log.info("Bundle {} is resolved, trying to start it.", bundle.getLocation());
                 bundle.start();
                 
-            } else if ((bundle.getState() & Bundle.INSTALLED) > 0) {
+            } else if ((state & Bundle.INSTALLED) > 0) {
                 log.info("Bundle {} is installed but not resolved.", bundle.getLocation());
             }
         }

Modified: incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessorTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessorTest.java?rev=693820&r1=693819&r2=693820&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessorTest.java (original)
+++ incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/BundleResourceProcessorTest.java Wed Sep 10 05:44:33 2008
@@ -29,6 +29,8 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.jmock.Expectations;
 import org.jmock.Mockery;
@@ -122,4 +124,63 @@
         // And verify expectations
         mockery.assertIsSatisfied();
     }
+    
+    @org.junit.Test public void testBundleProcessingQueue() throws Exception {
+        
+        // Fill the pending bundles queue with one bundle in each of the
+        // possible states, process the queue and verify results
+        final BundleContext bc = mockery.mock(BundleContext.class);
+        final Bundle [] b = new Bundle[6];
+        for(int i = 0; i < b.length; i++) {
+            b[i] = mockery.mock(Bundle.class);
+        };
+        
+        mockery.checking(new Expectations() {{
+            allowing(bc).getBundle(0L); will(returnValue(b[0]));
+            allowing(bc).getBundle(1L); will(returnValue(b[1]));
+            allowing(bc).getBundle(2L); will(returnValue(b[2]));
+            allowing(bc).getBundle(3L); will(returnValue(b[3]));
+            allowing(bc).getBundle(4L); will(returnValue(b[4]));
+            allowing(bc).getBundle(5L); will(returnValue(b[5]));
+            
+            allowing(b[0]).getBundleId(); will(returnValue(0L));
+            allowing(b[1]).getBundleId(); will(returnValue(1L));
+            allowing(b[2]).getBundleId(); will(returnValue(2L));
+            allowing(b[3]).getBundleId(); will(returnValue(3L));
+            allowing(b[4]).getBundleId(); will(returnValue(4L));
+            allowing(b[5]).getBundleId(); will(returnValue(5L));
+
+            allowing(b[0]).getState(); will(returnValue(Bundle.ACTIVE));
+            allowing(b[1]).getState(); will(returnValue(Bundle.STARTING));
+            allowing(b[2]).getState(); will(returnValue(Bundle.STOPPING));
+            allowing(b[3]).getState(); will(returnValue(Bundle.UNINSTALLED));
+            allowing(b[4]).getState(); will(returnValue(Bundle.INSTALLED));
+            allowing(b[5]).getState(); will(returnValue(Bundle.RESOLVED));
+            
+            allowing(b[0]).getLocation();
+            allowing(b[1]).getLocation();
+            allowing(b[2]).getLocation();
+            allowing(b[3]).getLocation();
+            allowing(b[4]).getLocation();
+            allowing(b[5]).getLocation();
+            
+            one(b[5]).start();
+        }});
+        
+        final BundleResourceProcessor p = new BundleResourceProcessor(bc);
+        final Map<Long, Bundle> pendingBundles = new HashMap<Long, Bundle>();
+        Utilities.setField(p, "pendingBundles", pendingBundles);
+
+        for(Bundle bu : b) {
+            pendingBundles.put(new Long(bu.getBundleId()), bu);
+        }
+        p.processResourceQueue();
+        
+        assertEquals("Only 4 bundles must be left in queue", 4, pendingBundles.size());
+        assertTrue("STARTING bundle must be left in queue", pendingBundles.containsKey(b[1].getBundleId()));
+        assertTrue("STOPPING bundle must be left in queue", pendingBundles.containsKey(b[2].getBundleId()));
+        assertTrue("INSTALLED bundle must be left in queue", pendingBundles.containsKey(b[4].getBundleId()));
+        assertTrue("RESOLVED bundle must be left in queue", pendingBundles.containsKey(b[5].getBundleId()));
+    }
+    
 }

Modified: incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/Utilities.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/Utilities.java?rev=693820&r1=693819&r2=693820&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/Utilities.java (original)
+++ incubator/sling/trunk/extensions/jcrinstall/src/test/java/org/apache/sling/jcr/jcrinstall/osgi/impl/Utilities.java Wed Sep 10 05:44:33 2008
@@ -39,10 +39,7 @@
         for(OsgiResourceProcessor p : processors) {
             list.add(p);
         }
-        
-        final Field f = c.getClass().getDeclaredField("processors");
-        f.setAccessible(true);
-        f.set(c, list);
+        setField(c, "processors", list);
     }
     
     static void setStorage(OsgiControllerImpl c, Storage s) throws Exception {
@@ -50,5 +47,11 @@
         f.setAccessible(true);
         f.set(c, s);
     }
+    
+    static void setField(Object o, String name, Object value) throws Exception {
+        final Field f = o.getClass().getDeclaredField(name);
+        f.setAccessible(true);
+        f.set(o, value);
+    }
 
 }