You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by oc...@apache.org on 2008/12/05 11:57:04 UTC

svn commit: r723707 - in /continuum/branches/continuum-parallel-builds/continuum-core/src: main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java

Author: oching
Date: Fri Dec  5 02:57:02 2008
New Revision: 723707

URL: http://svn.apache.org/viewvc?rev=723707&view=rev
Log:
o added parallel builds additional test cases

Modified:
    continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java
    continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java

Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java?rev=723707&r1=723706&r2=723707&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-core/src/main/java/org/apache/continuum/buildmanager/DefaultBuildManager.java Fri Dec  5 02:57:02 2008
@@ -36,6 +36,7 @@
 import org.codehaus.plexus.context.ContextException;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
+import org.codehaus.plexus.taskqueue.TaskQueue;
 import org.codehaus.plexus.taskqueue.TaskQueueException;
 
 /**
@@ -72,11 +73,16 @@
 
     // should be invoked before adding anything in any of the queues!
     private synchronized OverallBuildQueue getOverallBuildQueue()
-        throws ComponentLookupException
+        throws ComponentLookupException, TaskQueueException
     {
         OverallBuildQueue overallBuildQueue = null;
                 
         int parallelBuildsNum = configurationService.getNumberOfBuildsInParallel();
+        if( parallelBuildsNum <= 0 )
+        {
+            parallelBuildsNum = 1;
+        }
+        
         if( overallBuildQueuesInUse.size() < parallelBuildsNum )
         {   
             overallBuildQueue = ( OverallBuildQueue ) container.lookup( OverallBuildQueue.class );            
@@ -85,10 +91,21 @@
             overallBuildQueuesInUse.add( overallBuildQueue );            
         }       
         else
-        {
-            // add logic for distributing work among the queues            
-            // - check whether the project is already in any of the queues
-            // - if not, always get the overall build queue with the least tasks queued to it
+        {            
+            int size = 0;            
+            for( OverallBuildQueue overallBuildQueueInUse : overallBuildQueuesInUse )
+            {   
+                // TODO: must differentiate between checkout, prepare-build & build queues!
+                List<TaskQueue> tasks = overallBuildQueueInUse.getBuildQueue().getQueueSnapshot();
+                if( tasks != null )
+                {   
+                    if( size == 0 || tasks.size() < size )
+                    {
+                        overallBuildQueue = overallBuildQueueInUse;
+                        size = tasks.size();
+                    }                    
+                }
+            }
         }
         
         return overallBuildQueue;

Modified: continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java?rev=723707&r1=723706&r2=723707&view=diff
==============================================================================
--- continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java (original)
+++ continuum/branches/continuum-parallel-builds/continuum-core/src/test/java/org/apache/continuum/buildmanager/DefaultBuildManagerTest.java Fri Dec  5 02:57:02 2008
@@ -91,20 +91,82 @@
     
     public void testParallelBuildsLimitIsMaximized()
         throws Exception
-    {
-        // assert size of the overallBuildQueuesInUse!
+    {   
+        // set expectations
+        context.checking(new Expectations() {{
+            exactly( 3 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 2 ) );
+        }});
+        
+        Schedule schedule = new Schedule();
+        schedule.setMaxJobExecutionTime( 100 );
+        
+        BuildDefinition buildDef = new BuildDefinition();
+        buildDef.setId( 1 );
+        buildDef.setSchedule( schedule );
+        
+        buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" );
+        
+        buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" );
+        
+        buildManager.addProjectToBuildQueue( 3, buildDef, 1, "continuum-test-project-3", "build-def-label" );
+        
+        // verify
+        context.assertIsSatisfied();
+        
+        // assert if the project is in the correct build queue!
+        OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        
+        overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 );
+        assertEquals( 2, overallBuildQueue.getId() );
+        
+        overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 3 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        
+        assertEquals( 2, buildManager.getOverallBuildQueuesInUse().size() );
     }
     
     public void testParallelBuildsBuildIsCancelled()
         throws Exception
     {
-    
+        
     }
     
+    // project must not be queued!
     public void testParallelBuildsProjectAlreadyInBuildQueue()
         throws Exception
     {
-    
+        // set expectations
+        context.checking(new Expectations() {{
+            exactly( 2 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 2 ) );
+        }});
+        
+        Schedule schedule = new Schedule();
+        schedule.setMaxJobExecutionTime( 100 );
+        
+        BuildDefinition buildDef = new BuildDefinition();
+        buildDef.setId( 1 );
+        buildDef.setSchedule( schedule );
+        
+        buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" );
+        
+        buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" );
+        
+        buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" );
+        
+        // verify
+        context.assertIsSatisfied();
+        
+        // assert if the project is in the correct build queue!
+        OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        assertEquals( 1, overallBuildQueue.getBuildQueue().getQueueSnapshot().size() );
+        
+        overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 );
+        assertEquals( 2, overallBuildQueue.getId() );
+        assertEquals( 1, overallBuildQueue.getBuildQueue().getQueueSnapshot().size() );
+        
+        assertEquals( 2, buildManager.getOverallBuildQueuesInUse().size() );        
     }
     
     public void testParallelBuildsRemoveFromBuildQueue()
@@ -152,6 +214,68 @@
     public void testSingleBuild()
         throws Exception
     {
+        // set expectations
+        context.checking(new Expectations() {{
+            exactly( 2 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 1 ) );
+        }});
+        
+        Schedule schedule = new Schedule();
+        schedule.setMaxJobExecutionTime( 100 );
+        
+        BuildDefinition buildDef = new BuildDefinition();
+        buildDef.setId( 1 );
+        buildDef.setSchedule( schedule );
+        
+        buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" );
+        
+        buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" );
+        
+        // verify
+        context.assertIsSatisfied();
+        
+        // assert if the project is in the correct build queue!
+        OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        
+        overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        
+        assertEquals( 1, buildManager.getOverallBuildQueuesInUse().size() );
+        
+        assertEquals( 2, buildManager.getOverallBuildQueuesInUse().get( 0 ).getBuildQueue().getQueueSnapshot().size() );
+    }
     
+    public void testNumberOfBuildInParallelConfigSetToZero()
+        throws Exception
+    {
+        // set expectations
+        context.checking(new Expectations() {{
+            exactly( 2 ).of(configurationService).getNumberOfBuildsInParallel(); will( returnValue( 0 ) );
+        }});
+        
+        Schedule schedule = new Schedule();
+        schedule.setMaxJobExecutionTime( 100 );
+        
+        BuildDefinition buildDef = new BuildDefinition();
+        buildDef.setId( 1 );
+        buildDef.setSchedule( schedule );
+        
+        buildManager.addProjectToBuildQueue( 1, buildDef, 1, "continuum-test-project-1", "build-def-label" );
+        
+        buildManager.addProjectToBuildQueue( 2, buildDef, 1, "continuum-test-project-2", "build-def-label" );
+        
+        // verify
+        context.assertIsSatisfied();
+        
+        // assert if the project is in the correct build queue!
+        OverallBuildQueue overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 1 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        
+        overallBuildQueue = buildManager.getOverallBuildQueueWhereProjectIsQueued( 2 );
+        assertEquals( 1, overallBuildQueue.getId() );
+        
+        assertEquals( 1, buildManager.getOverallBuildQueuesInUse().size() );
+        
+        assertEquals( 2, buildManager.getOverallBuildQueuesInUse().get( 0 ).getBuildQueue().getQueueSnapshot().size() );
     }
 }