View Javadoc

1   package org.apache.maven.continuum.web.action;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.continuum.buildmanager.BuildsManager;
23  import org.apache.continuum.web.action.AbstractActionTest;
24  import org.apache.maven.continuum.Continuum;
25  import org.apache.maven.continuum.configuration.ConfigurationService;
26  import org.apache.maven.continuum.model.project.BuildResult;
27  import org.apache.maven.continuum.model.project.Project;
28  import org.apache.maven.continuum.model.project.ProjectGroup;
29  import org.apache.maven.continuum.web.action.stub.SummaryActionStub;
30  import org.apache.maven.continuum.web.model.ProjectSummary;
31  import org.apache.maven.continuum.xmlrpc.project.ContinuumProjectState;
32  import org.jmock.Mock;
33  
34  import java.util.ArrayList;
35  import java.util.Collection;
36  import java.util.HashMap;
37  import java.util.List;
38  import java.util.Map;
39  
40  public class SummaryActionTest
41      extends AbstractActionTest
42  {
43      private SummaryActionStub action;
44  
45      private Mock continuum;
46  
47      private Mock configurationService;
48  
49      private Mock buildsManager;
50  
51      protected void setUp()
52          throws Exception
53      {
54          super.setUp();
55  
56          action = new SummaryActionStub();
57  
58          continuum = mock( Continuum.class );
59  
60          configurationService = mock( ConfigurationService.class );
61  
62          buildsManager = mock( BuildsManager.class );
63  
64          action.setContinuum( (Continuum) continuum.proxy() );
65          action.setParallelBuildsManager( (BuildsManager) buildsManager.proxy() );
66      }
67  
68      public void testLatestBuildIdWhenCurrentlyBuildingInDistributedBuild()
69          throws Exception
70      {
71          Collection<Project> projectsInGroup = createProjectsInGroup( 1, ContinuumProjectState.BUILDING );
72          Map<Integer, BuildResult> buildResults = createBuildResults( 0, ContinuumProjectState.OK );
73          Map<Integer, BuildResult> buildResultsInSuccess = new HashMap<Integer, BuildResult>();
74  
75          continuum.expects( once() ).method( "getProjectsInGroup" ).will( returnValue( projectsInGroup ) );
76          continuum.expects( once() ).method( "getLatestBuildResults" ).will( returnValue( buildResults ) );
77          continuum.expects( once() ).method( "getBuildResultsInSuccess" ).will( returnValue( buildResultsInSuccess ) );
78  
79          buildsManager.expects( once() ).method( "isInAnyBuildQueue" ).will( returnValue( false ) );
80          buildsManager.expects( once() ).method( "isInPrepareBuildQueue" ).will( returnValue( false ) );
81          buildsManager.expects( once() ).method( "isInAnyCheckoutQueue" ).will( returnValue( false ) );
82  
83          continuum.expects( once() ).method( "getConfiguration" ).will( returnValue(
84              (ConfigurationService) configurationService.proxy() ) );
85          configurationService.expects( once() ).method( "isDistributedBuildEnabled" ).will( returnValue( true ) );
86  
87          action.execute();
88          continuum.verify();
89  
90          List<ProjectSummary> projects = action.getProjects();
91  
92          assertNotNull( projects );
93          assertEquals( 1, projects.size() );
94  
95          ProjectSummary summary = projects.get( 0 );
96          assertEquals( 0, summary.getLatestBuildId() );
97      }
98  
99      public void testLatestBuildIdInDistributedBuild()
100         throws Exception
101     {
102         Collection<Project> projectsInGroup = createProjectsInGroup( 1, ContinuumProjectState.OK );
103         Map<Integer, BuildResult> buildResults = createBuildResults( 1, ContinuumProjectState.OK );
104         Map<Integer, BuildResult> buildResultsInSuccess = new HashMap<Integer, BuildResult>();
105 
106         continuum.expects( once() ).method( "getProjectsInGroup" ).will( returnValue( projectsInGroup ) );
107         continuum.expects( once() ).method( "getLatestBuildResults" ).will( returnValue( buildResults ) );
108         continuum.expects( once() ).method( "getBuildResultsInSuccess" ).will( returnValue( buildResultsInSuccess ) );
109 
110         buildsManager.expects( once() ).method( "isInAnyBuildQueue" ).will( returnValue( false ) );
111         buildsManager.expects( once() ).method( "isInPrepareBuildQueue" ).will( returnValue( false ) );
112         buildsManager.expects( once() ).method( "isInAnyCheckoutQueue" ).will( returnValue( false ) );
113 
114         continuum.expects( once() ).method( "getConfiguration" ).will( returnValue(
115             (ConfigurationService) configurationService.proxy() ) );
116         configurationService.expects( once() ).method( "isDistributedBuildEnabled" ).will( returnValue( true ) );
117 
118         action.execute();
119         continuum.verify();
120 
121         List<ProjectSummary> projects = action.getProjects();
122 
123         assertNotNull( projects );
124         assertEquals( 1, projects.size() );
125 
126         ProjectSummary summary = projects.get( 0 );
127         assertEquals( 1, summary.getLatestBuildId() );
128     }
129 
130     public void testLatestBuildIdWhenCurrentlyBuilding()
131         throws Exception
132     {
133         Collection<Project> projectsInGroup = createProjectsInGroup( 1, ContinuumProjectState.BUILDING );
134         Map<Integer, BuildResult> buildResults = createBuildResults( 1, ContinuumProjectState.BUILDING );
135         Map<Integer, BuildResult> buildResultsInSuccess = new HashMap<Integer, BuildResult>();
136 
137         continuum.expects( once() ).method( "getProjectsInGroup" ).will( returnValue( projectsInGroup ) );
138         continuum.expects( once() ).method( "getLatestBuildResults" ).will( returnValue( buildResults ) );
139         continuum.expects( once() ).method( "getBuildResultsInSuccess" ).will( returnValue( buildResultsInSuccess ) );
140 
141         buildsManager.expects( once() ).method( "isInAnyBuildQueue" ).will( returnValue( false ) );
142         buildsManager.expects( once() ).method( "isInPrepareBuildQueue" ).will( returnValue( false ) );
143         buildsManager.expects( once() ).method( "isInAnyCheckoutQueue" ).will( returnValue( false ) );
144 
145         continuum.expects( once() ).method( "getConfiguration" ).will( returnValue(
146             (ConfigurationService) configurationService.proxy() ) );
147         configurationService.expects( once() ).method( "isDistributedBuildEnabled" ).will( returnValue( false ) );
148 
149         action.execute();
150         continuum.verify();
151 
152         List<ProjectSummary> projects = action.getProjects();
153 
154         assertNotNull( projects );
155         assertEquals( 1, projects.size() );
156 
157         ProjectSummary summary = projects.get( 0 );
158         assertEquals( 1, summary.getLatestBuildId() );
159     }
160 
161     private Collection<Project> createProjectsInGroup( int projectId, int state )
162     {
163         Collection<Project> projectsInGroup = new ArrayList<Project>();
164 
165         ProjectGroup group = new ProjectGroup();
166         group.setId( 1 );
167         group.setName( "test-group" );
168 
169         Project project = new Project();
170         project.setId( projectId );
171         project.setName( "test-project" );
172         project.setVersion( "1.0" );
173         project.setBuildNumber( 1 );
174         project.setState( state );
175         project.setExecutorId( "maven2" );
176         project.setProjectGroup( group );
177 
178         projectsInGroup.add( project );
179 
180         return projectsInGroup;
181     }
182 
183     private Map<Integer, BuildResult> createBuildResults( int projectId, int state )
184     {
185         Map<Integer, BuildResult> buildResults = new HashMap<Integer, BuildResult>();
186 
187         BuildResult br = new BuildResult();
188         br.setId( 1 );
189         br.setStartTime( System.currentTimeMillis() );
190         br.setEndTime( System.currentTimeMillis() );
191         br.setState( state );
192 
193         buildResults.put( projectId, br );
194 
195         return buildResults;
196     }
197 }