You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ba...@apache.org on 2015/05/04 03:43:09 UTC
svn commit: r1677512 - in /continuum/trunk/continuum-webapp/src:
main/java/org/apache/continuum/web/action/
main/java/org/apache/maven/continuum/web/action/
test/java/org/apache/continuum/web/action/
test/java/org/apache/continuum/web/action/stub/
Author: batkinson
Date: Mon May 4 01:43:08 2015
New Revision: 1677512
URL: http://svn.apache.org/r1677512
Log:
Fixed broken build report action test.
Modified:
continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/ViewBuildsReportAction.java
continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java
continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/ViewBuildsReportActionTest.java
continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/stub/ViewBuildsReportActionStub.java
Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/ViewBuildsReportAction.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/ViewBuildsReportAction.java?rev=1677512&r1=1677511&r2=1677512&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/ViewBuildsReportAction.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/ViewBuildsReportAction.java Mon May 4 01:43:08 2015
@@ -135,9 +135,9 @@ public class ViewBuildsReportAction
private Map<Integer, String> buildStatuses;
- private Map<Integer, String> projectGroups;
+ private Map<Integer, String> groupSelections;
- private Map<String, Integer> permittedGroups;
+ private Map<String, Integer> permittedGroupMap;
private List<BuildResult> filteredResults = new ArrayList<BuildResult>();
@@ -148,7 +148,7 @@ public class ViewBuildsReportAction
this.rawResponse = response;
}
- private boolean isAuthorized( String projectGroupName )
+ protected boolean isAuthorized( String projectGroupName )
{
try
{
@@ -166,19 +166,48 @@ public class ViewBuildsReportAction
{
super.prepare();
- // Populate the state drop downs
- buildStatuses = new LinkedHashMap<Integer, String>();
- buildStatuses.put( 0, "ALL" );
- for ( ResultState state : ResultState.values() )
+ Collection<ProjectGroup> permittedGroups = getAuthorizedGroups();
+
+ groupSelections = createGroupSelections( permittedGroups );
+ permittedGroupMap = createPermittedGroupMap( permittedGroups );
+ buildStatuses = createStatusSelections();
+ }
+
+ protected Map<String, Integer> createPermittedGroupMap( Collection<ProjectGroup> allowedGroups )
+ {
+ Map<String, Integer> result = new HashMap<String, Integer>();
+ for ( ProjectGroup group : allowedGroups )
{
- buildStatuses.put( state.getDataId(), getText( state.getTextKey() ) );
+ result.put( group.getName(), group.getId() );
}
+ return result;
+ }
- permittedGroups = new HashMap<String, Integer>();
- projectGroups = new LinkedHashMap<Integer, String>();
- projectGroups.put( 0, "ALL" );
+ protected Map<Integer, String> createGroupSelections( Collection<ProjectGroup> permittedGroups )
+ {
+ Map<Integer, String> result = new LinkedHashMap<Integer, String>();
+ result.put( 0, "ALL" );
+ for ( ProjectGroup group : permittedGroups )
+ {
+ result.put( group.getId(), group.getName() );
+ }
+ return result;
+ }
+
+ protected Map<Integer, String> createStatusSelections()
+ {
+ Map<Integer, String> result = new LinkedHashMap<Integer, String>();
+ result.put( 0, "ALL" );
+ for ( ResultState state : ResultState.values() )
+ {
+ result.put( state.getDataId(), getText( state.getTextKey() ) );
+ }
+ return result;
+ }
- // TODO: Use these to limit results at the data layer
+ protected Collection<ProjectGroup> getAuthorizedGroups()
+ {
+ Collection<ProjectGroup> permitted = new ArrayList<ProjectGroup>();
List<ProjectGroup> groups = getContinuum().getAllProjectGroups();
if ( groups != null )
{
@@ -187,11 +216,11 @@ public class ViewBuildsReportAction
String groupName = group.getName();
if ( isAuthorized( groupName ) )
{
- projectGroups.put( group.getId(), groupName );
- permittedGroups.put( groupName, group.getId() );
+ permitted.add( group );
}
}
}
+ return permitted;
}
public String init()
@@ -206,7 +235,7 @@ public class ViewBuildsReportAction
return REQUIRES_AUTHORIZATION;
}
- if ( permittedGroups.isEmpty() )
+ if ( permittedGroupMap.isEmpty() )
{
addActionError( getText( "projectBuilds.report.noGroupsAuthorized" ) );
return REQUIRES_AUTHORIZATION;
@@ -228,7 +257,7 @@ public class ViewBuildsReportAction
return REQUIRES_AUTHORIZATION;
}
- if ( permittedGroups.isEmpty() )
+ if ( permittedGroupMap.isEmpty() )
{
addActionError( getText( "projectBuilds.report.noGroupsAuthorized" ) );
return REQUIRES_AUTHORIZATION;
@@ -262,7 +291,7 @@ public class ViewBuildsReportAction
}
else
{
- groupIds.addAll( permittedGroups.values() );
+ groupIds.addAll( permittedGroupMap.values() );
}
// Users can preview a limited number of records (use export for more)
@@ -279,7 +308,7 @@ public class ViewBuildsReportAction
for ( BuildResult result : results )
{
- if ( permittedGroups.containsKey( result.getProject().getProjectGroup().getName() ) )
+ if ( permittedGroupMap.containsKey( result.getProject().getProjectGroup().getName() ) )
{
filteredResults.add( result );
}
@@ -329,7 +358,7 @@ public class ViewBuildsReportAction
return REQUIRES_AUTHORIZATION;
}
- if ( permittedGroups.isEmpty() )
+ if ( permittedGroupMap.isEmpty() )
{
addActionError( getText( "projectBuilds.report.noGroupsAuthorized" ) );
return REQUIRES_AUTHORIZATION;
@@ -377,7 +406,7 @@ public class ViewBuildsReportAction
}
else
{
- groupIds.addAll( permittedGroups.values() );
+ groupIds.addAll( permittedGroupMap.values() );
}
// Build the output file by walking through the results in batches
@@ -395,7 +424,7 @@ public class ViewBuildsReportAction
for ( BuildResult result : results )
{
- if ( !permittedGroups.containsKey( result.getProject().getProjectGroup().getName() ) )
+ if ( !permittedGroupMap.containsKey( result.getProject().getProjectGroup().getName() ) )
{
continue;
}
@@ -555,6 +584,6 @@ public class ViewBuildsReportAction
public Map<Integer, String> getProjectGroups()
{
- return projectGroups;
+ return groupSelections;
}
}
\ No newline at end of file
Modified: continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java?rev=1677512&r1=1677511&r2=1677512&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java (original)
+++ continuum/trunk/continuum-webapp/src/main/java/org/apache/maven/continuum/web/action/ContinuumActionSupport.java Mon May 4 01:43:08 2015
@@ -79,6 +79,16 @@ public class ContinuumActionSupport
}
}
+ /**
+ * Here for unit testing support, it allows configuring a mock security session.
+ *
+ * @param securitySession
+ */
+ protected void setSecuritySession( SecuritySession securitySession )
+ {
+ this.securitySession = securitySession;
+ }
+
public Continuum getContinuum()
{
return continuum;
Modified: continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/ViewBuildsReportActionTest.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/ViewBuildsReportActionTest.java?rev=1677512&r1=1677511&r2=1677512&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/ViewBuildsReportActionTest.java (original)
+++ continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/ViewBuildsReportActionTest.java Mon May 4 01:43:08 2015
@@ -25,13 +25,17 @@ import org.apache.maven.continuum.Contin
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.codehaus.plexus.redback.system.SecuritySession;
import org.junit.Before;
import org.junit.Test;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.PrintWriter;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@@ -48,6 +52,8 @@ public class ViewBuildsReportActionTest
private List<BuildResult> buildResults = new ArrayList<BuildResult>();
+ private ProjectGroup allowedGroup;
+
@Before
public void setUp()
throws Exception
@@ -55,17 +61,15 @@ public class ViewBuildsReportActionTest
continuum = mock( Continuum.class );
action = new ViewBuildsReportActionStub();
+ action.setSecuritySession( mock( SecuritySession.class ) );
action.setContinuum( continuum );
- }
- @Test
- public void testInvalidRowCount()
- {
- String result = action.execute();
+ allowedGroup = new ProjectGroup();
+ allowedGroup.setId( 1 );
+ allowedGroup.setName( "Allowed Group" );
+ action.setAuthorizedGroups( Arrays.asList( allowedGroup ) );
- assertEquals( Action.INPUT, result );
- assertTrue( action.hasFieldErrors() );
- assertFalse( action.hasActionErrors() );
+ action.prepare();
}
@Test
@@ -86,7 +90,7 @@ public class ViewBuildsReportActionTest
action.setStartDate( "not a date" );
String result = action.execute();
- assertEquals( Action.ERROR, result );
+ assertEquals( Action.INPUT, result );
assertTrue( action.hasActionErrors() );
assertFalse( action.hasFieldErrors() );
}
@@ -97,7 +101,7 @@ public class ViewBuildsReportActionTest
action.setEndDate( "not a date" );
String result = action.execute();
- assertEquals( Action.ERROR, result );
+ assertEquals( Action.INPUT, result );
assertTrue( action.hasActionErrors() );
assertFalse( action.hasFieldErrors() );
}
@@ -152,7 +156,7 @@ public class ViewBuildsReportActionTest
String result = action.downloadBuildsReport();
assertNull( "result should be null", result );
- assertFileContentsEqual( out.toString(), cal.getTime().toString() );
+ assertExportContents( results, out.toString() );
}
private void assertSuccessResult( String result )
@@ -168,12 +172,9 @@ public class ViewBuildsReportActionTest
BuildResult result = new BuildResult();
- ProjectGroup group = new ProjectGroup();
- group.setName( "Test Group" );
-
Project project = new Project();
project.setName( "Test Project" );
- project.setProjectGroup( group );
+ project.setProjectGroup( allowedGroup );
result.setProject( project );
result.setState( 2 );
@@ -185,11 +186,22 @@ public class ViewBuildsReportActionTest
return results;
}
- private void assertFileContentsEqual( String report, String buildDate )
+ private void assertExportContents( List<BuildResult> results, String actualContents )
{
- String result = "Project Group,Project Name,Build Date,Triggered By,Build Status\n" +
- "Test Group,Test Project," + buildDate + ",test-admin,Ok\n";
-
- assertEquals( report, result );
+ DateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSSZ" );
+ String expectedContents = "Group,Project,ID,Build#,Started,Duration,Triggered By,Status\n";
+ for ( BuildResult result : results )
+ {
+ Project p = result.getProject();
+ ProjectGroup pg = p.getProjectGroup();
+ expectedContents += String.format( "%s,%s,%s,%s,%s,%s,%s,%s\n",
+ pg.getName(), p.getName(), result.getId(), result.getBuildNumber(),
+ dateFormat.format( new Date( result.getStartTime() ) ),
+ ( result.getEndTime() - result.getStartTime() ) / 1000,
+ result.getUsername(),
+ ViewBuildsReportAction.ResultState.fromId(
+ result.getState() ).getTextKey() );
+ }
+ assertEquals( expectedContents, actualContents );
}
}
Modified: continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/stub/ViewBuildsReportActionStub.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/stub/ViewBuildsReportActionStub.java?rev=1677512&r1=1677511&r2=1677512&view=diff
==============================================================================
--- continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/stub/ViewBuildsReportActionStub.java (original)
+++ continuum/trunk/continuum-webapp/src/test/java/org/apache/continuum/web/action/stub/ViewBuildsReportActionStub.java Mon May 4 01:43:08 2015
@@ -20,10 +20,34 @@ package org.apache.continuum.web.action.
*/
import org.apache.continuum.web.action.ViewBuildsReportAction;
+import org.apache.maven.continuum.model.project.ProjectGroup;
+import org.codehaus.plexus.redback.system.SecuritySession;
+
+import java.util.Collection;
+import java.util.Collections;
public class ViewBuildsReportActionStub
extends ViewBuildsReportAction
{
+
+ Collection<ProjectGroup> authorizedGroups = Collections.EMPTY_LIST;
+
+ public void setSecuritySession( SecuritySession securitySession )
+ {
+ super.setSecuritySession( securitySession );
+ }
+
+ @Override
+ protected Collection<ProjectGroup> getAuthorizedGroups()
+ {
+ return authorizedGroups;
+ }
+
+ public void setAuthorizedGroups( Collection<ProjectGroup> authorizedGroups )
+ {
+ this.authorizedGroups = authorizedGroups;
+ }
+
protected void checkViewProjectGroupAuthorization( String resource )
{
// skip authorization check