You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2014/10/04 18:36:22 UTC

svn commit: r1629411 - in /felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest: AspectRaceTest.java ServiceRaceTest.java

Author: pderop
Date: Sat Oct  4 16:36:21 2014
New Revision: 1629411

URL: http://svn.apache.org/r1629411
Log:
code cleanup

Modified:
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/AspectRaceTest.java
    felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceRaceTest.java

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/AspectRaceTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/AspectRaceTest.java?rev=1629411&r1=1629410&r2=1629411&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/AspectRaceTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/AspectRaceTest.java Sat Oct  4 16:36:21 2014
@@ -25,8 +25,8 @@ import org.osgi.framework.ServiceReferen
  */
 public class AspectRaceTest extends TestBase {
     final static int SERVICES = 3;
-    final static int ASPECTS_PER_SERVICE = 3;
-    final static int ITERATIONS = 3000;
+    final static int ASPECTS_PER_SERVICE = 10;
+    final static int ITERATIONS = 1000;
     final AtomicInteger m_IDGenerator = new AtomicInteger();
     ExecutorService m_threadpool;
 
@@ -40,12 +40,11 @@ public class AspectRaceTest extends Test
                 debug("Iteration: " + loop);
                 
                 // Use a helper class to wait for components to be started/stopped.
-                int count = SERVICES + (SERVICES * ASPECTS_PER_SERVICE);
+                int count = 1 /* for controller */ + SERVICES + (SERVICES * ASPECTS_PER_SERVICE);
                 ComponentTracker tracker = new ComponentTracker(count, count);
                 
                 // Create the components (controller / services / aspects)
-                Ensure e = new Ensure(false);
-                Controller controller = new Controller(e);
+                Controller controller = new Controller();
                 Factory f = new Factory();
                 f.createComponents(controller, tracker);
                 
@@ -56,22 +55,19 @@ public class AspectRaceTest extends Test
                 if (!tracker.awaitStarted(5000)) {
                     throw new IllegalStateException("Could not start components timely.");
                 }
-
-                // Make sure the controller.start() method has been called.
-                e.waitForStep(1, 5000);
                 
                 // Check aspect chains consistency.
                 controller.checkConsistency();
                 
                 // unregister all services and aspects.
-                f.unregister();
+                f.unregisterComponents();
                 
                 // use component tracker to wait for all components to be stopped.
                 if (!tracker.awaitStopped(5000)) {
                     throw new IllegalStateException("Could not stop components timely.");
                 }
 
-                if ((loop) % 100 == 0) {
+                if ((loop) % 50 == 0) {
                     warn("Performed " + loop + " tests.");
                 }
 
@@ -185,12 +181,11 @@ public class AspectRaceTest extends Test
         
         private void createComponents(Controller controller, ComponentTracker tracker) {
             // create the controller
-            
             int controllerID = m_IDGenerator.incrementAndGet();
-            
             m_controller = m_dm.createComponent()
                 .setImplementation(controller)
-                .setComposition("getComposition");        
+                .setComposition("getComposition")
+                .add(tracker);
             for (int i = 0; i < SERVICES; i ++) {
                 m_controller.add(m_dm.createServiceDependency()
                     .setService(S.class, "(controller.id=" + controllerID + ")")
@@ -256,7 +251,7 @@ public class AspectRaceTest extends Test
             }
         }
 
-        public void unregister() throws InterruptedException, InvalidSyntaxException {        
+        public void unregisterComponents() throws InterruptedException, InvalidSyntaxException {        
             m_dm.remove(m_controller);
             for (final Component s : m_services) {
                 m_dm.remove(s);
@@ -270,11 +265,6 @@ public class AspectRaceTest extends Test
     public class Controller {
         final Composition m_compo = new Composition();
         final HashSet<S> m_services = new HashSet<S>();
-        final Ensure m_ensure;
-
-        public Controller(Ensure e) {
-            m_ensure = e;
-        }
 
         Object[] getComposition() {
             return new Object[] { this, m_compo };
@@ -300,19 +290,11 @@ public class AspectRaceTest extends Test
             debug("unbind " + a);
             m_services.remove(a);
         }
-
-        /**
-         * Checks if the aspect chain is consstent. The chain may not have all the aspects, but at least, the list must be in consistent order, meaning that we 
-         * should never see an aspect with a lower rank of the its immediate next aspect in the chain.
-         */
-        void start() {
-            m_ensure.step(1);
-        }
         
         synchronized void checkConsistency() {
             debug("service count: %d", m_services.size());
             for (S s : m_services) {
-                debug("checking service: %s", s);
+                info("checking service: %s", s);
                 Ensure ensure = new Ensure(false);
                 s.invoke(ensure);
             }

Modified: felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceRaceTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceRaceTest.java?rev=1629411&r1=1629410&r2=1629411&view=diff
==============================================================================
--- felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceRaceTest.java (original)
+++ felix/sandbox/pderop/dependencymanager-prototype/org.apache.felix.dependencymanager.itest/src/org/apache/felix/dm/itest/ServiceRaceTest.java Sat Oct  4 16:36:21 2014
@@ -63,13 +63,7 @@ public class ServiceRaceTest extends Tes
     
     void doStart() {
         info("Starting createParallelComponentRegistgrationUnregistration test");
-        int cores = Math.max(16, Runtime.getRuntime().availableProcessors());
-        info("using " + cores + " cores.");
-
-        if (! m_parallel) { 
-            // We are not using a parallel DM, so we create a custom threadpool in order to add components concurrently.
-            m_threadpool = Executors.newFixedThreadPool(Math.max(cores, DEPENDENCIES + 3 /* start/stop/configure */));
-        }
+        initThreadPool(); // only if setParallel() has not been called (only if a parallel DM is not used).
 
         try {
             m_timeStamp = System.currentTimeMillis();
@@ -81,16 +75,25 @@ public class ServiceRaceTest extends Tes
             error("got unexpected exception", t);
         }
         finally {
-            shutdown(m_threadpool);
+            shutdownThreadPool();
             m_done.step(1);
         }
     }
 
-    void shutdown(ExecutorService exec) {
-        if (! m_parallel && exec != null) {
-            exec.shutdown();
+    private void initThreadPool() {
+        if (! m_parallel) { 
+            // We are not using a parallel DM, so we create a custom threadpool in order to add components concurrently.
+            int cores = Math.max(16, Runtime.getRuntime().availableProcessors());
+            info("using " + cores + " cores.");
+            m_threadpool = Executors.newFixedThreadPool(Math.max(cores, DEPENDENCIES + 3 /* start/stop/configure */));
+        }
+    }
+
+    void shutdownThreadPool() {
+        if (! m_parallel && m_threadpool != null) {
+            m_threadpool.shutdown();
             try {
-                exec.awaitTermination(5, TimeUnit.SECONDS);
+                m_threadpool.awaitTermination(5, TimeUnit.SECONDS);
             } catch (InterruptedException e) {
             }
         }
@@ -233,11 +236,15 @@ public class ServiceRaceTest extends Tes
 
         public void updated(Dictionary conf) throws ConfigurationException {
             m_conf = conf;
-            if (conf != null) {
-                Assert.assertEquals("bar", conf.get("foo"));
-                m_step.step(1);
-            } else {
-                m_step.step();
+            try {
+                if (conf != null) {
+                    Assert.assertEquals("bar", conf.get("foo"));
+                    m_step.step(1);
+                } else {
+                    m_step.step();
+                }
+            } catch (Throwable t) {
+                m_step.throwable(t);
             }
         }