Package org.apache.continuum.builder.distributed.manager

Source Code of org.apache.continuum.builder.distributed.manager.DefaultDistributedBuildManagerTest

package org.apache.continuum.builder.distributed.manager;

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

import org.apache.continuum.builder.distributed.executor.ThreadedDistributedBuildTaskQueueExecutor;
import org.apache.continuum.builder.distributed.stubs.DefaultDistributedBuildManagerStub;
import org.apache.continuum.configuration.BuildAgentConfiguration;
import org.apache.continuum.configuration.BuildAgentGroupConfiguration;
import org.apache.continuum.dao.BuildDefinitionDao;
import org.apache.continuum.dao.BuildResultDao;
import org.apache.continuum.dao.ProjectDao;
import org.apache.continuum.dao.ProjectScmRootDao;
import org.apache.continuum.model.project.ProjectRunSummary;
import org.apache.continuum.model.project.ProjectScmRoot;
import org.apache.continuum.taskqueue.BuildProjectTask;
import org.apache.continuum.taskqueue.OverallDistributedBuildQueue;
import org.apache.continuum.taskqueue.PrepareBuildProjectsTask;
import org.apache.continuum.utils.build.BuildTrigger;
import org.apache.maven.continuum.configuration.ConfigurationService;
import org.apache.maven.continuum.model.project.BuildDefinition;
import org.apache.maven.continuum.model.project.BuildResult;
import org.apache.maven.continuum.model.project.Project;
import org.apache.maven.continuum.model.project.ProjectGroup;
import org.apache.maven.continuum.model.system.Profile;
import org.apache.maven.continuum.project.ContinuumProjectState;
import org.codehaus.plexus.spring.PlexusInSpringTestCase;
import org.codehaus.plexus.taskqueue.Task;
import org.codehaus.plexus.taskqueue.TaskQueue;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit3.JUnit3Mockery;
import org.jmock.lib.legacy.ClassImposteriser;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class DefaultDistributedBuildManagerTest
    extends PlexusInSpringTestCase
{
    private final String TEST_BUILD_AGENT1 = "http://sampleagent";

    private final String TEST_BUILD_AGENT2 = "http://testagent";

    private final String TEST_BUILD_AGENT_GROUP1 = "buildAgentGroup1";

    private DefaultDistributedBuildManager distributedBuildManager;

    private DefaultDistributedBuildManager distributedBuildManagerStub = new DefaultDistributedBuildManagerStub();

    private Mockery context;

    private OverallDistributedBuildQueue overallDistributedBuildQueue1;

    private OverallDistributedBuildQueue overallDistributedBuildQueue2;

    private BuildDefinitionDao buildDefinitionDao;

    private BuildResultDao buildResultDao;

    private ProjectDao projectDao;

    private ProjectScmRootDao projectScmRootDao;

    private ConfigurationService configurationService;

    private List<BuildAgentConfiguration> buildAgents;

    private BuildAgentConfiguration buildAgent1;

    private BuildAgentConfiguration buildAgent2;

    private ThreadedDistributedBuildTaskQueueExecutor distributedBuildTaskQueueExecutor;

    private TaskQueue distributedBuildQueue;

    private Project project;

    private Project project2;

    private ProjectGroup projectGroup;

    private BuildDefinition buildDefinition;

    private BuildAgentGroupConfiguration buildAgentGroup;

    @Override
    public void setUp()
        throws Exception
    {
        super.setUp();

        context = new JUnit3Mockery();
        context.setImposteriser( ClassImposteriser.INSTANCE );

        distributedBuildManager = (DefaultDistributedBuildManager) lookup( DistributedBuildManager.class );

        buildDefinitionDao = context.mock( BuildDefinitionDao.class );
        distributedBuildManager.setBuildDefinitionDao( buildDefinitionDao );
        distributedBuildManagerStub.setBuildDefinitionDao( buildDefinitionDao );

        buildResultDao = context.mock( BuildResultDao.class );
        distributedBuildManager.setBuildResultDao( buildResultDao );
        distributedBuildManagerStub.setBuildResultDao( buildResultDao );

        projectDao = context.mock( ProjectDao.class );
        distributedBuildManager.setProjectDao( projectDao );
        distributedBuildManagerStub.setProjectDao( projectDao );

        projectScmRootDao = context.mock( ProjectScmRootDao.class );
        distributedBuildManager.setProjectScmRootDao( projectScmRootDao );
        distributedBuildManagerStub.setProjectScmRootDao( projectScmRootDao );

        distributedBuildManagerStub.setContainer( getContainer() );

        configurationService = context.mock( ConfigurationService.class );

        distributedBuildManager.setConfigurationService( configurationService );
        distributedBuildManagerStub.setConfigurationService( configurationService );

        distributedBuildTaskQueueExecutor = (ThreadedDistributedBuildTaskQueueExecutor) context.mock(
            ThreadedDistributedBuildTaskQueueExecutor.class, "distributed-build-project" );

        distributedBuildQueue = context.mock( TaskQueue.class, "distributed-build-queue" );

        overallDistributedBuildQueue1 = context.mock( OverallDistributedBuildQueue.class, TEST_BUILD_AGENT1 );
        overallDistributedBuildQueue2 = context.mock( OverallDistributedBuildQueue.class, TEST_BUILD_AGENT2 );

        init();
    }

    private void init()
    {
        buildAgent1 = new BuildAgentConfiguration();
        buildAgent1.setEnabled( true );
        buildAgent1.setUrl( TEST_BUILD_AGENT1 );

        buildAgent2 = new BuildAgentConfiguration();
        buildAgent2.setEnabled( true );
        buildAgent2.setUrl( TEST_BUILD_AGENT2 );

        List<BuildAgentConfiguration> buildAgents = new ArrayList<BuildAgentConfiguration>();
        buildAgents.add( buildAgent1 );
        buildAgents.add( buildAgent2 );

        setUpBuildAgentGroup( buildAgents );
        setupBuildDefinition();

        projectGroup = new ProjectGroup();
        projectGroup.setId( 1 );
        projectGroup.setGroupId( "group" );

        project = new Project();
        project.setId( 1 );
        project.setGroupId( "groupId" );
        project.setArtifactId( "artifactId" );
        project.setVersion( "1.0" );
        project.setProjectGroup( projectGroup );

        project2 = new Project();
        project2.setId( 2 );
        project2.setGroupId( "groupId" );
        project2.setArtifactId( "artifactId" );
        project2.setVersion( "1.0" );
        project2.setProjectGroup( projectGroup );
    }

    public void testViewQueuesAfterBuildAgentIsLost()
        throws Exception
    {
        distributedBuildManager.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 1 ) );

        recordViewQueuesAfterBuildAgentIsLost();

        Map<String, List<PrepareBuildProjectsTask>> prepareBuildQueues =
            distributedBuildManager.getProjectsInPrepareBuildQueue();
        Map<String, List<BuildProjectTask>> buildQueues = distributedBuildManager.getProjectsInBuildQueue();
        Map<String, PrepareBuildProjectsTask> currentPrepareBuild =
            distributedBuildManager.getProjectsCurrentlyPreparingBuild();
        Map<String, BuildProjectTask> currentBuild = distributedBuildManager.getProjectsCurrentlyBuilding();

        assertEquals( prepareBuildQueues.size(), 0 );
        assertEquals( buildQueues.size(), 0 );
        assertEquals( currentPrepareBuild.size(), 0 );
        assertEquals( currentBuild.size(), 0 );

        context.assertIsSatisfied();
    }

    public void testDisableBuildAgentWhenUnavailableToPing()
        throws Exception
    {
        distributedBuildManager.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 1 ) );

        recordDisableOfBuildAgent();

        distributedBuildManager.isAgentAvailable( TEST_BUILD_AGENT1 );

        context.assertIsSatisfied();
    }

    public void testViewQueuesWhen2BuildAgentsAreLost()
        throws Exception
    {
        distributedBuildManager.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 2 ) );

        recordViewQueuesAfter2BuildAgentsAreLost();

        Map<String, List<PrepareBuildProjectsTask>> prepareBuildQueues =
            distributedBuildManager.getProjectsInPrepareBuildQueue();
        Map<String, List<BuildProjectTask>> buildQueues = distributedBuildManager.getProjectsInBuildQueue();
        Map<String, PrepareBuildProjectsTask> currentPrepareBuild =
            distributedBuildManager.getProjectsCurrentlyPreparingBuild();
        Map<String, BuildProjectTask> currentBuild = distributedBuildManager.getProjectsCurrentlyBuilding();

        assertEquals( prepareBuildQueues.size(), 0 );
        assertEquals( buildQueues.size(), 0 );
        assertEquals( currentPrepareBuild.size(), 0 );
        assertEquals( currentBuild.size(), 0 );

        context.assertIsSatisfied();
    }

    public void testBuildProjectWithBuildAgentGroupWithNoCurrentBuilds()
        throws Exception
    {
        distributedBuildManagerStub.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 2 ) );

        Map<Integer, Integer> projectsBuildDefinitionsMap = new HashMap<Integer, Integer>();
        projectsBuildDefinitionsMap.put( 1, 1 );
        projectsBuildDefinitionsMap.put( 2, 1 );

        BuildTrigger buildTrigger = new BuildTrigger( 1 );

        recordBuildOfProjectWithBuildAgentGroupWithNoCurrentBuilds();

        List<ProjectScmRoot> scmRoots = new ArrayList<ProjectScmRoot>();
        ProjectScmRoot scmRoot = new ProjectScmRoot();
        scmRoot.setId( 1 );
        scmRoot.setProjectGroup( projectGroup );
        scmRoot.setScmRootAddress( "scmRootAddress1" );
        scmRoots.add( scmRoot );

        scmRoot = new ProjectScmRoot();
        scmRoot.setId( 2 );
        scmRoot.setProjectGroup( projectGroup );
        scmRoot.setScmRootAddress( "scmRootAddress2" );
        scmRoots.add( scmRoot );

        distributedBuildManagerStub.prepareBuildProjects( projectsBuildDefinitionsMap, buildTrigger, 1, "sample",
                                                          "scmRootAddress1", 1, scmRoots );

        context.assertIsSatisfied();
    }

    public void testBuildProjectWithBuildAgentGroupWithCurrentBuild()
        throws Exception
    {
        distributedBuildManagerStub.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 2 ) );

        Map<Integer, Integer> projectsBuildDefinitionsMap = new HashMap<Integer, Integer>();
        projectsBuildDefinitionsMap.put( 1, 1 );

        BuildTrigger buildTrigger = new BuildTrigger( 1 );

        recordBuildOfProjectWithBuildAgentGroupWithCurrentBuild();

        List<ProjectScmRoot> scmRoots = new ArrayList<ProjectScmRoot>();
        ProjectScmRoot scmRoot = new ProjectScmRoot();
        scmRoot.setId( 2 );
        scmRoot.setProjectGroup( projectGroup );
        scmRoot.setScmRootAddress( "scmRootAddress2" );
        scmRoots.add( scmRoot );

        scmRoot = new ProjectScmRoot();
        scmRoot.setId( 1 );
        scmRoot.setProjectGroup( projectGroup );
        scmRoot.setScmRootAddress( "scmRootAddress1" );
        scmRoots.add( scmRoot );

        distributedBuildManagerStub.prepareBuildProjects( projectsBuildDefinitionsMap, buildTrigger, 1, "sample",
                                                          "scmRootAddress1", 1, scmRoots );

        context.assertIsSatisfied();
    }

    // CONTINUUM-2494
    public void testBuildProjectWithTheSecondBuildAgentAttachedToTheBuildAgentGroup()
        throws Exception
    {
        distributedBuildManagerStub.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 2 ) );

        List<BuildAgentConfiguration> buildAgents = new ArrayList<BuildAgentConfiguration>();
        buildAgents.add( buildAgent2 );

        setUpBuildAgentGroup( buildAgents );
        setupBuildDefinition();

        Map<Integer, Integer> projectsBuildDefinitionsMap = new HashMap<Integer, Integer>();
        projectsBuildDefinitionsMap.put( 1, 1 );

        BuildTrigger buildTrigger = new BuildTrigger( 1 );

        recordBuildProjectWithTheSecondBuildAgentAttachedToTheBuildAgentGroup();

        List<ProjectScmRoot> scmRoots = new ArrayList<ProjectScmRoot>();
        ProjectScmRoot scmRoot = new ProjectScmRoot();
        scmRoot.setId( 1 );
        scmRoot.setProjectGroup( projectGroup );
        scmRoot.setScmRootAddress( "scmRootAddress1" );
        scmRoots.add( scmRoot );

        distributedBuildManagerStub.prepareBuildProjects( projectsBuildDefinitionsMap, buildTrigger, 1, "sample",
                                                          "scmRootAddress", 1, scmRoots );
    }

    public void testGetBuildAgentPlatform()
        throws Exception
    {
        distributedBuildManager.setOverallDistributedBuildQueues( getMockOverallDistributedBuildQueues( 1 ) );
        context.checking( new Expectations()
        {
            {
                exactly( 2 ).of( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                one( configurationService ).getSharedSecretPassword();
                will( returnValue( null ) );

                one( configurationService ).updateBuildAgent( buildAgent1 );
                one( configurationService ).store();

                exactly( 2 ).of( overallDistributedBuildQueue1 ).getDistributedBuildTaskQueueExecutor();
                will( returnValue( distributedBuildTaskQueueExecutor ) );

                one( distributedBuildTaskQueueExecutor ).getCurrentTask();
                will( returnValue( null ) );

                one( overallDistributedBuildQueue1 ).getProjectsInQueue();
                will( returnValue( new ArrayList<PrepareBuildProjectsTask>() ) );

                one( overallDistributedBuildQueue1 ).getDistributedBuildQueue();
                will( returnValue( distributedBuildQueue ) );

                one( distributedBuildQueue ).removeAll( new ArrayList<PrepareBuildProjectsTask>() );

                one( distributedBuildTaskQueueExecutor ).stop();
            }
        } );
        assertEquals( distributedBuildManager.getBuildAgentPlatform( TEST_BUILD_AGENT1 ), "" );
        context.assertIsSatisfied();
    }

    public void testBuildAgentIsAvailable()
        throws Exception
    {
        assertTrue( distributedBuildManagerStub.isAgentAvailable( TEST_BUILD_AGENT1 ) );
        context.checking( new Expectations()
        {
            {
                never( configurationService ).getBuildAgents();
                never( configurationService ).updateBuildAgent( buildAgent1 );
                never( configurationService ).store();
            }
        } );
        context.assertIsSatisfied();
    }

    public void testCancelBuildStuckUpdate()
        throws Exception
    {
        distributedBuildManagerStub.setCurrentRuns( getCurrentRuns() );

        recordOfStuckScm();

        distributedBuildManagerStub.cancelBuild( 1 );
    }

    public void testCancelBuildStuckBuild()
        throws Exception
    {
        distributedBuildManagerStub.setCurrentRuns( getCurrentRuns() );

        recordOfStuckBuild();

        distributedBuildManagerStub.cancelBuild( 1 );
    }

    private void recordOfStuckBuild()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                exactly( 4 ).of( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                exactly( 2 ).of( projectScmRootDao ).getProjectScmRoot( 1 );
                will( returnValue( getScmRoot( ContinuumProjectState.OK ) ) );

                Project proj1 = getProject( 1, ContinuumProjectState.BUILDING );
                one( projectDao ).getProject( 1 );
                will( returnValue( proj1 ) );

                one( buildDefinitionDao ).getBuildDefinition( 1 );
                will( returnValue( new BuildDefinition() ) );

                one( buildResultDao ).addBuildResult( with( any( Project.class ) ), with( any( BuildResult.class ) ) );
                one( projectDao ).updateProject( proj1 );

                one( projectDao ).getProject( 2 );
                will( returnValue( getProject( 2, ContinuumProjectState.OK ) ) );
            }
        } );
    }

    private void recordOfStuckScm()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                exactly( 4 ).of( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                ProjectScmRoot scmRootUpdating = getScmRoot( ContinuumProjectState.UPDATING );
                one( projectScmRootDao ).getProjectScmRoot( 1 );
                will( returnValue( scmRootUpdating ) );

                one( projectScmRootDao ).updateProjectScmRoot( scmRootUpdating );

                one( projectScmRootDao ).getProjectScmRoot( 1 );
                will( returnValue( getScmRoot( ContinuumProjectState.ERROR ) ) );
            }
        } );
    }

    private List<ProjectRunSummary> getCurrentRuns()
    {
        List<ProjectRunSummary> runs = new ArrayList<ProjectRunSummary>();

        ProjectRunSummary run1 = new ProjectRunSummary();
        run1.setProjectId( 1 );
        run1.setBuildDefinitionId( 1 );
        run1.setProjectGroupId( 1 );
        run1.setProjectScmRootId( 1 );
        run1.setTrigger( 1 );
        run1.setTriggeredBy( "user" );
        run1.setBuildAgentUrl( "http://localhost:8181/continuum-buildagent/xmlrpc" );
        runs.add( run1 );

        ProjectRunSummary run2 = new ProjectRunSummary();
        run2.setProjectId( 2 );
        run2.setBuildDefinitionId( 2 );
        run2.setProjectGroupId( 1 );
        run2.setProjectScmRootId( 1 );
        run2.setTrigger( 1 );
        run2.setTriggeredBy( "user" );
        run2.setBuildAgentUrl( "http://localhost:8181/continuum-buildagent/xmlrpc" );
        runs.add( run2 );

        return runs;
    }

    private ProjectScmRoot getScmRoot( int state )
    {
        ProjectScmRoot scmRoot = new ProjectScmRoot();
        scmRoot.setState( state );
        return scmRoot;
    }

    private Project getProject( int projectId, int state )
    {
        Project project = new Project();
        project.setId( projectId );
        project.setState( state );
        return project;
    }

    private Map<String, OverallDistributedBuildQueue> getMockOverallDistributedBuildQueues( int size )
    {
        Map<String, OverallDistributedBuildQueue> overallDistributedBuildQueues = Collections.synchronizedMap(
            new LinkedHashMap<String, OverallDistributedBuildQueue>() );

        buildAgents = new ArrayList<BuildAgentConfiguration>();
        buildAgents.add( buildAgent1 );

        overallDistributedBuildQueues.put( TEST_BUILD_AGENT1, overallDistributedBuildQueue1 );

        if ( size == 2 )
        {
            buildAgents.add( buildAgent2 );
            overallDistributedBuildQueues.put( TEST_BUILD_AGENT2, overallDistributedBuildQueue2 );
        }

        return overallDistributedBuildQueues;
    }

    private void setUpBuildAgentGroup( List<BuildAgentConfiguration> buildAgents )
    {
        buildAgentGroup = new BuildAgentGroupConfiguration();
        buildAgentGroup.setName( TEST_BUILD_AGENT_GROUP1 );
        buildAgentGroup.setBuildAgents( buildAgents );
    }

    private void setupBuildDefinition()
    {
        Profile buildEnv1 = new Profile();
        buildEnv1.setBuildAgentGroup( TEST_BUILD_AGENT_GROUP1 );

        buildDefinition = new BuildDefinition();
        buildDefinition.setId( 1 );
        buildDefinition.setProfile( buildEnv1 );
    }

    private void recordDisableOfBuildAgent()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                one( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                one( configurationService ).getSharedSecretPassword();
                will( returnValue( null ) );

                one( configurationService ).updateBuildAgent( buildAgent1 );
                one( configurationService ).store();
            }
        } );
    }

    private void recordViewQueuesAfterBuildAgentIsLost()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                exactly( 5 ).of( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                one( configurationService ).getSharedSecretPassword();
                will( returnValue( null ) );

                one( configurationService ).updateBuildAgent( buildAgent1 );
                one( configurationService ).store();

                exactly( 2 ).of( overallDistributedBuildQueue1 ).getDistributedBuildTaskQueueExecutor();
                will( returnValue( distributedBuildTaskQueueExecutor ) );

                one( distributedBuildTaskQueueExecutor ).getCurrentTask();
                will( returnValue( null ) );

                one( overallDistributedBuildQueue1 ).getProjectsInQueue();
                will( returnValue( new ArrayList<PrepareBuildProjectsTask>() ) );

                one( overallDistributedBuildQueue1 ).getDistributedBuildQueue();
                will( returnValue( distributedBuildQueue ) );

                one( distributedBuildQueue ).removeAll( new ArrayList<PrepareBuildProjectsTask>() );

                one( distributedBuildTaskQueueExecutor ).stop();
            }
        } );
    }

    private void recordViewQueuesAfter2BuildAgentsAreLost()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                exactly( 6 ).of( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                exactly( 2 ).of( configurationService ).getSharedSecretPassword();
                will( returnValue( null ) );

                one( configurationService ).updateBuildAgent( buildAgent1 );
                one( configurationService ).updateBuildAgent( buildAgent2 );
                exactly( 2 ).of( configurationService ).store();

                exactly( 2 ).of( overallDistributedBuildQueue1 ).getDistributedBuildTaskQueueExecutor();
                will( returnValue( distributedBuildTaskQueueExecutor ) );

                exactly( 2 ).of( overallDistributedBuildQueue2 ).getDistributedBuildTaskQueueExecutor();
                will( returnValue( distributedBuildTaskQueueExecutor ) );

                exactly( 2 ).of( distributedBuildTaskQueueExecutor ).getCurrentTask();
                will( returnValue( null ) );

                one( overallDistributedBuildQueue1 ).getProjectsInQueue();
                will( returnValue( new ArrayList<PrepareBuildProjectsTask>() ) );

                one( overallDistributedBuildQueue2 ).getProjectsInQueue();
                will( returnValue( new ArrayList<PrepareBuildProjectsTask>() ) );

                one( overallDistributedBuildQueue1 ).getDistributedBuildQueue();
                will( returnValue( distributedBuildQueue ) );

                one( overallDistributedBuildQueue2 ).getDistributedBuildQueue();
                will( returnValue( distributedBuildQueue ) );

                exactly( 2 ).of( distributedBuildQueue ).removeAll( new ArrayList<PrepareBuildProjectsTask>() );

                exactly( 2 ).of( distributedBuildTaskQueueExecutor ).stop();
            }
        } );
    }

    private void recordBuildOfProjectWithBuildAgentGroupWithNoCurrentBuilds()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                exactly( 3 ).of( projectDao ).getProjectWithDependencies( 1 );
                will( returnValue( project ) );

                exactly( 3 ).of( projectDao ).getProjectWithDependencies( 2 );
                will( returnValue( project2 ) );

                exactly( 3 ).of( buildDefinitionDao ).getBuildDefinition( 1 );
                will( returnValue( buildDefinition ) );

                exactly( 3 ).of( configurationService ).getBuildAgentGroup( TEST_BUILD_AGENT_GROUP1 );
                will( returnValue( buildAgentGroup ) );

                one( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                one( overallDistributedBuildQueue1 ).getBuildAgentUrl();

                one( overallDistributedBuildQueue1 ).addToDistributedBuildQueue( with( any( Task.class ) ) );
            }
        } );
    }

    private void recordBuildOfProjectWithBuildAgentGroupWithCurrentBuild()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                one( overallDistributedBuildQueue1 ).getProjectsInQueue();

                one( overallDistributedBuildQueue1 ).getDistributedBuildTaskQueueExecutor();
                will( returnValue( distributedBuildTaskQueueExecutor ) );

                one( distributedBuildTaskQueueExecutor ).getCurrentTask();
                will( returnValue( null ) );

                one( projectDao ).getProjectsInGroup( 1 );
                will( returnValue( new ArrayList<Project>() ) );

                one( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                one( overallDistributedBuildQueue1 ).getBuildAgentUrl();

                one( overallDistributedBuildQueue1 ).addToDistributedBuildQueue( with( any( Task.class ) ) );
            }
        } );
    }

    private void recordBuildProjectWithTheSecondBuildAgentAttachedToTheBuildAgentGroup()
        throws Exception
    {
        context.checking( new Expectations()
        {
            {
                exactly( 3 ).of( projectDao ).getProjectWithDependencies( 1 );
                will( returnValue( project ) );

                exactly( 3 ).of( buildDefinitionDao ).getBuildDefinition( 1 );
                will( returnValue( buildDefinition ) );

                exactly( 3 ).of( configurationService ).getBuildAgentGroup( TEST_BUILD_AGENT_GROUP1 );
                will( returnValue( buildAgentGroup ) );

                one( configurationService ).getBuildAgents();
                will( returnValue( buildAgents ) );

                one( overallDistributedBuildQueue2 ).getBuildAgentUrl();

                one( overallDistributedBuildQueue2 ).addToDistributedBuildQueue( with( any( Task.class ) ) );
            }
        } );
    }
}
TOP

Related Classes of org.apache.continuum.builder.distributed.manager.DefaultDistributedBuildManagerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.