You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ct...@apache.org on 2010/12/15 04:01:25 UTC

svn commit: r1049398 - in /continuum/trunk/continuum-buildagent/continuum-buildagent-core/src: main/java/org/apache/continuum/buildagent/taskqueue/execution/ test/java/org/apache/continuum/buildagent/taskqueue/execution/

Author: ctan
Date: Wed Dec 15 03:01:25 2010
New Revision: 1049398

URL: http://svn.apache.org/viewvc?rev=1049398&view=rev
Log:
[CONTINUUM-2592] utilize build agents own installations configured in continuum-buildagent.xml

Submitted By: Marc Jansen Tan Chua

Modified:
    continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java
    continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/test/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutorTest.java

Modified: continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java?rev=1049398&r1=1049397&r2=1049398&view=diff
==============================================================================
--- continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java (original)
+++ continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/main/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutor.java Wed Dec 15 03:01:25 2010
@@ -35,6 +35,7 @@ import org.apache.continuum.buildagent.b
 import org.apache.continuum.buildagent.configuration.BuildAgentConfigurationService;
 import org.apache.continuum.buildagent.installation.BuildAgentInstallationService;
 import org.apache.continuum.buildagent.manager.BuildAgentManager;
+import org.apache.continuum.buildagent.model.Installation;
 import org.apache.continuum.buildagent.model.LocalRepository;
 import org.apache.continuum.buildagent.utils.BuildContextToBuildDefinition;
 import org.apache.continuum.buildagent.utils.BuildContextToProject;
@@ -398,7 +399,17 @@ public class BuildProjectTaskExecutor
     {
         try
         {
-            return buildAgentManager.getEnvironments( buildDefinitionId, installationType );
+            // get environments from Master (Continuum)
+            Map<String, String> environments = buildAgentManager.getEnvironments( buildDefinitionId, installationType );
+
+            // get environments from Slave (Build Agent)
+            for ( Installation installation : buildAgentConfigurationService.getAvailableInstallations() )
+            {
+                // combine environments (Master and Slave); Slave's environments overwrite Master's environments
+                environments.put( installation.getVarName(), installation.getVarValue() );
+            }
+
+            return environments;
         }
         catch ( ContinuumException e )
         {

Modified: continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/test/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutorTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/test/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutorTest.java?rev=1049398&r1=1049397&r2=1049398&view=diff
==============================================================================
--- continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/test/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutorTest.java (original)
+++ continuum/trunk/continuum-buildagent/continuum-buildagent-core/src/test/java/org/apache/continuum/buildagent/taskqueue/execution/BuildProjectTaskExecutorTest.java Wed Dec 15 03:01:25 2010
@@ -32,7 +32,9 @@ import org.apache.continuum.buildagent.b
 import org.apache.continuum.buildagent.buildcontext.manager.BuildContextManager;
 import org.apache.continuum.buildagent.configuration.BuildAgentConfigurationService;
 import org.apache.continuum.buildagent.manager.BuildAgentManager;
+import org.apache.continuum.buildagent.model.Installation;
 import org.apache.continuum.buildagent.model.LocalRepository;
+import org.apache.continuum.buildagent.utils.ContinuumBuildAgentUtil;
 import org.apache.continuum.taskqueue.BuildProjectTask;
 import org.apache.continuum.utils.build.BuildTrigger;
 import org.apache.maven.continuum.execution.ContinuumBuildExecutorConstants;
@@ -97,22 +99,104 @@ public class BuildProjectTaskExecutorTes
 
         final List<LocalRepository> localRepos = new ArrayList<LocalRepository>();
 
-        LocalRepository localRepo = new LocalRepository();
-        localRepo.setName( "temp" );
-        localRepo.setLocation( "/tmp/.m2/repository" );
-        localRepo.setLayout( "default" );
+        LocalRepository localRepo = createLocalRepository( "temp", "/tmp/.m2/repository", "default" );
+        localRepos.add( localRepo );
 
+        localRepo = createLocalRepository( "default", "/home/user/.m2/repository", "default" );
         localRepos.add( localRepo );
 
-        localRepo = new LocalRepository();
-        localRepo.setName( "default" );
-        localRepo.setLocation( "/home/user/.m2/repository" );
-        localRepo.setLayout( "default" );
+        final Map<String, String> masterBuildEnvironments = new HashMap<String, String>();
+        masterBuildEnvironments.put( "M2_HOME", "/tmp/apache-maven-2.2.1" );
+
+        final List<Installation> slaveBuildEnvironments = new ArrayList<Installation>();
+
+        final ContinuumAgentBuildExecutor executor = context.mock( ContinuumAgentBuildExecutor.class );
+        final File workingDir = new File( "/tmp/data/working-directory/project-test" );
+        final MavenProject project = new MavenProject();
+        final File outputFile = new File( "/tmp/data/build-output-directory/output.txt" );
+
+        context.checking( new Expectations()
+        {
+            {
+                one( buildContextManager ).getBuildContext( 1 );
+                will( returnValue( buildContext ) );
+
+                one( buildAgentManager ).getEnvironments( 1, "maven2" );
+                will( returnValue( masterBuildEnvironments ) );
+
+                one( buildAgentConfigurationService ).getAvailableInstallations();
+                will( returnValue( slaveBuildEnvironments ) );
 
+                one( buildAgentConfigurationService ).getLocalRepositories();
+                will( returnValue( localRepos ) );
+
+                one( buildAgentManager ).shouldBuild( with( any( Map.class ) ) );
+                will( returnValue( true ) );
+
+                one( buildAgentBuildExecutorManager ).getBuildExecutor( ContinuumBuildExecutorConstants.MAVEN_TWO_BUILD_EXECUTOR );
+                will( returnValue( executor ) );
+
+                one( buildAgentConfigurationService ).getWorkingDirectory( 1 );
+                will( returnValue( workingDir ) );
+
+                one( executor ).getMavenProject( with( any( File.class ) ), with( any( BuildDefinition.class ) ) );
+                will( returnValue( project ) );
+
+                one( buildAgentManager ).startProjectBuild( 1 );
+
+                one( buildAgentConfigurationService ).getBuildOutputFile( 1 );
+                will( returnValue( outputFile ) );
+
+                one( buildAgentManager ).returnBuildResult( with( any( Map.class ) ) );
+
+                one( buildContextManager ).removeBuildContext( 1 );
+            }
+        } );
+
+        try
+        {
+            buildProjectExecutor.executeTask( createBuildProjectTask() );
+        }
+        catch ( Exception e )
+        {
+            fail( "An exception should not have been thrown!" );
+        }
+    }
+
+    public void testBuildProjectWithConfiguredInstallationsFromBuildAgent()
+        throws Exception
+    {
+        BuildProjectTaskExecutor buildProjectExecutor =
+            (BuildProjectTaskExecutor) lookup( TaskExecutor.class, "build-agent" );
+
+        buildProjectExecutor.setBuildAgentBuildExecutorManager( buildAgentBuildExecutorManager );
+
+        buildProjectExecutor.setBuildAgentConfigurationService( buildAgentConfigurationService );
+
+        buildProjectExecutor.setBuildContextManager( buildContextManager );
+
+        buildProjectExecutor.setBuildAgentManager( buildAgentManager );
+
+        final BuildContext buildContext = createBuildContext();
+
+        final List<LocalRepository> localRepos = new ArrayList<LocalRepository>();
+
+        LocalRepository localRepo = createLocalRepository( "temp", "/tmp/.m2/repository", "default" );
         localRepos.add( localRepo );
 
-        final Map<String, String> buildEnvironments = new HashMap<String, String>();
-        buildEnvironments.put( "M2_HOME", "/tmp/apache-maven-2.2.1" );
+        localRepo = createLocalRepository( "default", "/home/user/.m2/repository", "default" );
+        localRepos.add( localRepo );
+
+        final Map<String, String> masterBuildEnvironments = new HashMap<String, String>();
+        masterBuildEnvironments.put( "M2_HOME", "/tmp/apache-maven-2.2.1" );
+
+        final List<Installation> slaveBuildEnvironments = new ArrayList<Installation>();
+
+        Installation slaveBuildEnvironment = createInstallation( "M2_HOME", "/home/user/apache-maven-2.2.1" );
+        slaveBuildEnvironments.add( slaveBuildEnvironment );
+
+        slaveBuildEnvironment = createInstallation( "EXTRA_VAR", "/home/user/extra" );
+        slaveBuildEnvironments.add( slaveBuildEnvironment );
 
         final ContinuumAgentBuildExecutor executor = context.mock( ContinuumAgentBuildExecutor.class );
         final File workingDir = new File( "/tmp/data/working-directory/project-test" );
@@ -126,7 +210,10 @@ public class BuildProjectTaskExecutorTes
                 will( returnValue( buildContext ) );
 
                 one( buildAgentManager ).getEnvironments( 1, "maven2" );
-                will( returnValue( buildEnvironments ) );
+                will( returnValue( masterBuildEnvironments ) );
+
+                one( buildAgentConfigurationService ).getAvailableInstallations();
+                will( returnValue( slaveBuildEnvironments ) );
 
                 one( buildAgentConfigurationService ).getLocalRepositories();
                 will( returnValue( localRepos ) );
@@ -158,6 +245,103 @@ public class BuildProjectTaskExecutorTes
         try
         {
             buildProjectExecutor.executeTask( createBuildProjectTask() );
+
+            Map<String, String> environments =
+                (Map<String, String>) buildContext.getActionContext().get( ContinuumBuildAgentUtil.KEY_ENVIRONMENTS );
+            assertEquals( 2, environments.size() );
+            assertTrue( environments.containsKey( "M2_HOME" ) );
+            assertTrue( environments.containsKey( "EXTRA_VAR" ) );
+            // shows that build agent's environment variables overwrites Continuum Master's environment variables
+            assertEquals( "/home/user/apache-maven-2.2.1", environments.get( "M2_HOME" ) );
+            assertEquals( "/home/user/extra", environments.get( "EXTRA_VAR" ) );
+        }
+        catch ( Exception e )
+        {
+            fail( "An exception should not have been thrown!" );
+        }
+    }
+
+    public void testBuildProjectWithNoConfiguredInstallationsFromBuildAgent()
+        throws Exception
+    {
+        BuildProjectTaskExecutor buildProjectExecutor =
+            (BuildProjectTaskExecutor) lookup( TaskExecutor.class, "build-agent" );
+
+        buildProjectExecutor.setBuildAgentBuildExecutorManager( buildAgentBuildExecutorManager );
+
+        buildProjectExecutor.setBuildAgentConfigurationService( buildAgentConfigurationService );
+
+        buildProjectExecutor.setBuildContextManager( buildContextManager );
+
+        buildProjectExecutor.setBuildAgentManager( buildAgentManager );
+
+        final BuildContext buildContext = createBuildContext();
+
+        final List<LocalRepository> localRepos = new ArrayList<LocalRepository>();
+
+        LocalRepository localRepo = createLocalRepository( "temp", "/tmp/.m2/repository", "default" );
+        localRepos.add( localRepo );
+
+        localRepo = createLocalRepository( "default", "/home/user/.m2/repository", "default" );
+        localRepos.add( localRepo );
+
+        final Map<String, String> masterBuildEnvironments = new HashMap<String, String>();
+        masterBuildEnvironments.put( "M2_HOME", "/tmp/apache-maven-2.2.1" );
+
+        final List<Installation> slaveBuildEnvironments = new ArrayList<Installation>();
+
+        final ContinuumAgentBuildExecutor executor = context.mock( ContinuumAgentBuildExecutor.class );
+        final File workingDir = new File( "/tmp/data/working-directory/project-test" );
+        final MavenProject project = new MavenProject();
+        final File outputFile = new File( "/tmp/data/build-output-directory/output.txt" );
+
+        context.checking( new Expectations()
+        {
+            {
+                one( buildContextManager ).getBuildContext( 1 );
+                will( returnValue( buildContext ) );
+
+                one( buildAgentManager ).getEnvironments( 1, "maven2" );
+                will( returnValue( masterBuildEnvironments ) );
+
+                one( buildAgentConfigurationService ).getAvailableInstallations();
+                will( returnValue( slaveBuildEnvironments ) );
+
+                one( buildAgentConfigurationService ).getLocalRepositories();
+                will( returnValue( localRepos ) );
+
+                one( buildAgentManager ).shouldBuild( with( any( Map.class ) ) );
+                will( returnValue( true ) );
+
+                one( buildAgentBuildExecutorManager ).getBuildExecutor( ContinuumBuildExecutorConstants.MAVEN_TWO_BUILD_EXECUTOR );
+                will( returnValue( executor ) );
+
+                one( buildAgentConfigurationService ).getWorkingDirectory( 1 );
+                will( returnValue( workingDir ) );
+
+                one( executor ).getMavenProject( with( any( File.class ) ), with( any( BuildDefinition.class ) ) );
+                will( returnValue( project ) );
+
+                one( buildAgentManager ).startProjectBuild( 1 );
+
+                one( buildAgentConfigurationService ).getBuildOutputFile( 1 );
+                will( returnValue( outputFile ) );
+
+                one( buildAgentManager ).returnBuildResult( with( any( Map.class ) ) );
+
+                one( buildContextManager ).removeBuildContext( 1 );
+            }
+        } );
+
+        try
+        {
+            buildProjectExecutor.executeTask( createBuildProjectTask() );
+
+            Map<String, String> environments =
+                (Map<String, String>) buildContext.getActionContext().get( ContinuumBuildAgentUtil.KEY_ENVIRONMENTS );
+            assertEquals( 1, environments.size() );
+            assertTrue( environments.containsKey( "M2_HOME" ) );
+            assertEquals( "/tmp/apache-maven-2.2.1", environments.get( "M2_HOME" ) );
         }
         catch ( Exception e )
         {
@@ -210,4 +394,21 @@ public class BuildProjectTaskExecutorTes
 
         return context;
     }
+
+    private LocalRepository createLocalRepository( String name, String locataion, String layout )
+    {
+        LocalRepository localRepository = new LocalRepository();
+        localRepository.setName( name );
+        localRepository.setLocation( locataion );
+        localRepository.setLayout( layout );
+        return localRepository;
+    }
+
+    private Installation createInstallation( String varName, String varValue )
+    {
+        Installation installation = new Installation();
+        installation.setVarName( varName );
+        installation.setVarValue( varValue );
+        return installation;
+    }
 }
\ No newline at end of file