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 2010/05/06 11:23:34 UTC
svn commit: r941625 [20/24] - in
/continuum/branches/continuum-flat-multi-module: ./ continuum-api/
continuum-api/src/main/java/org/apache/continuum/builder/distributed/
continuum-api/src/main/java/org/apache/continuum/builder/distributed/manager/
cont...
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractContinuumTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractContinuumTest.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractContinuumTest.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractContinuumTest.java Thu May 6 09:23:13 2010
@@ -19,11 +19,15 @@ package org.apache.continuum.web.test.pa
* under the License.
*/
+import org.apache.continuum.web.test.ConfigurationTest;
+import org.apache.continuum.web.test.listener.CaptureScreenShotsListener;
import org.testng.Assert;
+import java.io.File;
+
/**
* Based on AbstractContinuumTestCase of Emmanuel Venisse test.
- *
+ *
* @author José Morales MartÃnez
* @version $Id$
*/
@@ -50,7 +54,7 @@ public abstract class AbstractContinuumT
assertButtonWithValuePresent( "Create Admin" );
}
- public void submitAdminData( String fullname, String email, String password )
+ public void submitAdminData(String fullname,String email,String password )
{
setFieldValue( "user.fullName", fullname );
setFieldValue( "user.email", email );
@@ -64,8 +68,8 @@ public abstract class AbstractContinuumT
// ////////////////////////////////////
public void goToAboutPage()
{
+ getSelenium().open( baseUrl );
clickLinkWithText( "About" );
-
assertAboutPage();
}
@@ -82,6 +86,7 @@ public abstract class AbstractContinuumT
public void goToLoginPage()
{
+ getSelenium().deleteAllVisibleCookies();
getSelenium().open( baseUrl );
clickLinkWithText( "Login" );
assertLoginPage();
@@ -104,7 +109,7 @@ public abstract class AbstractContinuumT
assertTextPresent( "Forgot your Password? Request a password reset." );
}
- public void submitUserData( String username, String password, boolean rememberme, boolean success )
+ public void submitUserData(String username,String password,boolean rememberme,boolean success )
{
setFieldValue( "username", username );
@@ -124,7 +129,7 @@ public abstract class AbstractContinuumT
}
}
- public void assertAutenticatedPage( String username )
+ public void assertAutenticatedPage(String username )
{
assertTextPresent( "Current User" );
assertTextPresent( "Edit Details" );
@@ -133,6 +138,38 @@ public abstract class AbstractContinuumT
assertTextPresent( username );
}
+ public void assertChangePasswordPage()
+ {
+ assertPage( "Change Password" );
+ assertTextPresent( "Change Password" );
+ assertTextPresent( "Existing Password*:" );
+ assertElementPresent( "existingPassword" );
+ assertTextPresent( "New Password*:" );
+ assertElementPresent( "newPassword" );
+ assertTextPresent( "Confirm New Password*:" );
+ assertElementPresent( "newPasswordConfirm" );
+ }
+
+ public void assertUserEditPage( String username, String name, String email )
+ {
+ assertPage( "[Admin] User Edit" );
+ assertTextPresent( "[Admin] User Edit" );
+ assertTextPresent( "Username" );
+ assertTextPresent( username );
+ assertTextPresent( "Full Name*:" );
+ assertFieldValue( name, "userEditForm_user_fullName" );
+ assertTextPresent( "Email Address*:" );
+ assertFieldValue( email, "userEditForm_user_email" );
+ assertTextPresent( "Password*:" );
+ assertFieldValue( "", "userEditForm_user_password" );
+ assertTextPresent( "Confirm Password*:" );
+ assertElementPresent( "userEditForm_user_confirmPassword" );
+ assertTextPresent( "Account Creation:" );
+ assertTextPresent( "Last Password Change:" );
+ assertTextPresent( "Effective Roles" );
+ assertLinkPresent( "Edit Roles" );
+ }
+
// ////////////////////////////////////
// Configuration
// ////////////////////////////////////
@@ -163,7 +200,7 @@ public abstract class AbstractContinuumT
// Build Queue
// ////////////////////////////////////
- public void setMaxBuildQueue( int maxBuildQueue )
+ public void setMaxBuildQueue(int maxBuildQueue )
{
clickLinkWithText( "Configuration" );
setFieldValue( "numberOfAllowedBuildsinParallel", String.valueOf( maxBuildQueue ) );
@@ -176,7 +213,8 @@ public abstract class AbstractContinuumT
public void goToProjectGroupsSummaryPage()
throws Exception
{
- clickLinkWithText( "Show Project Groups" );
+ getSelenium().open( "/continuum/groupSummary.action" );
+ waitPage();
assertProjectGroupsSummaryPage();
}
@@ -201,7 +239,7 @@ public abstract class AbstractContinuumT
// ////////////////////////////////////
// Project Group
// ////////////////////////////////////
- public void showProjectGroup( String name, String groupId, String description )
+ public void showProjectGroup(String name,String groupId,String description )
throws Exception
{
goToProjectGroupsSummaryPage();
@@ -213,7 +251,7 @@ public abstract class AbstractContinuumT
assertProjectGroupSummaryPage( name, groupId, description );
}
- public void assertProjectGroupSummaryPage( String name, String groupId, String description )
+ public void assertProjectGroupSummaryPage(String name,String groupId,String description )
{
assertPage( "Continuum - Project Group" );
assertTextPresent( "Project Group Name" );
@@ -230,6 +268,7 @@ public abstract class AbstractContinuumT
// assertElementPresent( "remove" );
assertTextPresent( "Project Group Scm Root" );
+ assertTextPresent( "Scm Root URL" );
if ( isTextPresent( "Member Projects" ) )
{
@@ -243,7 +282,7 @@ public abstract class AbstractContinuumT
}
}
- public void addProjectGroup( String name, String groupId, String description, boolean success )
+ public void addProjectGroup(String name,String groupId,String description,boolean success )
throws Exception
{
goToProjectGroupsSummaryPage();
@@ -280,7 +319,7 @@ public abstract class AbstractContinuumT
assertElementPresent( "description" );
}
- public void removeProjectGroup( String name, String groupId, String description )
+ public void removeProjectGroup(String name,String groupId,String description )
throws Exception
{
showProjectGroup( name, groupId, description );
@@ -293,8 +332,19 @@ public abstract class AbstractContinuumT
clickButtonWithValue( "Save" );
assertProjectGroupsSummaryPage();
}
+
+ public void removeProjectGroup( String groupName )
+ throws Exception
+ {
+ goToProjectGroupsSummaryPage();
+ clickLinkWithText( groupName );
+ clickButtonWithValue( "Delete Group" );
+ assertTextPresent( "Project Group Removal" );
+ clickButtonWithValue( "Delete" );
+ assertProjectGroupsSummaryPage();
+ }
- public void editProjectGroup( String name, String groupId, String description, String newName, String newDescription )
+ public void editProjectGroup(String name,String groupId,String description,String newName,String newDescription )
throws Exception
{
showProjectGroup( name, groupId, description );
@@ -305,7 +355,7 @@ public abstract class AbstractContinuumT
clickButtonWithValue( "Save" );
}
- public void assertEditGroupPage( String groupId )
+ public void assertEditGroupPage(String groupId )
throws Exception
{
assertPage( "Continuum - Update Project Group" );
@@ -320,29 +370,32 @@ public abstract class AbstractContinuumT
assertElementPresent( "Cancel" );
}
- public void buildProjectGroup( String projectGroupName, String groupId, String description, String projectName )
+ public void buildProjectGroup(String projectGroupName,String groupId,String description,String projectName )
throws Exception
{
- int currentIt = 1;
- int maxIt = 10;
showProjectGroup( projectGroupName, groupId, description );
+ waitForProjectUpdate();
clickButtonWithValue( "Build all projects" );
- while ( isElementPresent( "//img[@alt='Building']" ) || isElementPresent( "//img[@alt='Updating']" ) )
+
+ // wait for project to finish building
+ waitForProjectBuild();
+
+ // wait for the success status of project
+ if ( !isElementPresent( "//a/img[@alt='Success']" ) )
+ {
+ waitForElementPresent( "//a/img[@alt='Success']" );
+ }
+
+ // wait for the projectName link
+ if ( !isLinkPresent( projectName ) )
{
- Thread.sleep( 10000 );
- getSelenium().refresh();
- waitPage();
- if ( currentIt > maxIt )
- {
- Assert.fail( "Timeout, Can't build project group" );
- }
- currentIt++;
+ waitForElementPresent( "link=" + projectName );
}
- Thread.sleep( 10000 );
+
clickLinkWithText( projectName );
clickLinkWithText( "Builds" );
clickLinkWithText( "Result" );
- assertTextPresent( "BUILD SUCCESSFUL" );
+ assertTextPresent( "BUILD SUCCESS" );
clickLinkWithText( "Project Group Summary" );
}
@@ -356,8 +409,8 @@ public abstract class AbstractContinuumT
assertButtonWithValuePresent( "Submit" );
}
- public void addValidM2ProjectFromProjectGroup( String projectGroupName, String groupId, String description,
- String m2PomUrl )
+ public void addValidM2ProjectFromProjectGroup(String projectGroupName,String groupId,String description,
+ String m2PomUrl )
throws Exception
{
showProjectGroup( projectGroupName, groupId, description );
@@ -370,7 +423,7 @@ public abstract class AbstractContinuumT
assertProjectGroupsSummaryPage();
}
- public void goToGroupBuildDefinitionPage( String projectGroupName, String groupId, String description )
+ public void goToGroupBuildDefinitionPage(String projectGroupName,String groupId,String description )
throws Exception
{
showProjectGroup( projectGroupName, groupId, description );
@@ -378,12 +431,12 @@ public abstract class AbstractContinuumT
assertGroupBuildDefinitionPage( projectGroupName );
}
- public void assertGroupBuildDefinitionPage( String projectGroupName )
+ public void assertGroupBuildDefinitionPage(String projectGroupName )
{
assertTextPresent( "Project Group Build Definitions of " + projectGroupName + " group" );
}
- public void assertDeleteBuildDefinitionPage( String description, String goals )
+ public void assertDeleteBuildDefinitionPage(String description,String goals )
{
assertTextPresent( "Are you sure you want to delete the build definition with description \"" + description
+ "\", goals \"" + goals + "\" and id" );
@@ -415,9 +468,9 @@ public abstract class AbstractContinuumT
assertElementPresent( "profileId" );
}
- public void addEditGroupBuildDefinition( String groupName, String buildFile, String goals, String arguments,
- String description, boolean buildFresh, boolean alwaysBuild,
- boolean isDefault )
+ public void addEditGroupBuildDefinition(String groupName,String buildFile,String goals,String arguments,
+ String description,boolean buildFresh,boolean alwaysBuild,
+ boolean isDefault )
{
assertAddEditBuildDefinitionPage();
// Enter values into Add Build Definition fields, and submit
@@ -454,7 +507,10 @@ public abstract class AbstractContinuumT
uncheckField( "alwaysBuild" );
}
+ selectValue( "scheduleId", "DEFAULT_SCHEDULE" );
+
submit();
+
if ( groupName != null )
{
assertGroupBuildDefinitionPage( groupName );
@@ -468,7 +524,7 @@ public abstract class AbstractContinuumT
// ////////////////////////////////////
// General Project Pages
// ////////////////////////////////////
- public void goToEditProjectPage( String projectGroupName, String projectName )
+ public void goToEditProjectPage(String projectGroupName,String projectName )
{
clickLinkWithText( "Show Project Groups" );
clickLinkWithText( projectGroupName );
@@ -497,7 +553,7 @@ public abstract class AbstractContinuumT
assertElementPresent( "scmTag" );
}
- public void goToProjectInformationPage( String projectGroupName, String projectName )
+ public void goToProjectInformationPage(String projectGroupName,String projectName )
{
clickLinkWithText( "Show Project Groups" );
clickLinkWithText( projectGroupName );
@@ -518,12 +574,19 @@ public abstract class AbstractContinuumT
assertTextPresent( "Developers" );
}
- public void moveProjectToProjectGroup( String groupName, String groupId, String groupDescription,
- String projectName, String newProjectGroup )
+ public void moveProjectToProjectGroup(String groupName,String groupId,String groupDescription,
+ String projectName,String newProjectGroup )
throws Exception
{
showProjectGroup( groupName, groupId, groupDescription );
- clickButtonWithValue( "Edit" );
+
+ // wait for project not being used
+ waitForProjectBuild();
+
+ String id = getFieldValue( "name=projectGroupId" );
+ String url = baseUrl + "/editProjectGroup.action?projectGroupId=" + id;
+ getSelenium().open( url );
+ waitPage();
assertTextPresent( "Move to Group" );
String xPath = "//preceding::th/label[contains(text(),'" + projectName + "')]//following::select";
@@ -556,8 +619,8 @@ public abstract class AbstractContinuumT
assertElementPresent( "selectedProjectGroup" );
}
- public void addMavenTwoProject( String pomUrl, String username, String password, String projectGroup,
- boolean success )
+ public void addMavenTwoProject(String pomUrl,String username,String password,String projectGroup,
+ boolean success )
throws Exception
{
goToAddMavenTwoProjectPage();
@@ -586,11 +649,11 @@ public abstract class AbstractContinuumT
/**
* submit the page
- *
+ *
* @param m2PomUrl
* @param validPom
*/
- public void submitAddMavenTwoProjectPage( String m2PomUrl, boolean validPom )
+ public void submitAddMavenTwoProjectPage(String m2PomUrl,boolean validPom )
throws Exception
{
addMavenTwoProject( m2PomUrl, "", "", null, validPom );
@@ -634,8 +697,8 @@ public abstract class AbstractContinuumT
assertButtonWithValuePresent( "Cancel" );
}
- public void addMavenOneProject( String pomUrl, String username, String password, String projectGroup,
- String buildTemplate, boolean success )
+ public void addMavenOneProject(String pomUrl,String username,String password,String projectGroup,
+ String buildTemplate,boolean success )
throws Exception
{
setFieldValue( "m1PomUrl", pomUrl );
@@ -679,7 +742,7 @@ public abstract class AbstractContinuumT
assertAddProjectPage( "shell" );
}
- public void assertAddProjectPage( String type )
+ public void assertAddProjectPage(String type )
{
String title = type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ).toLowerCase();
assertPage( "Continuum - Add " + title + " Project" );
@@ -712,9 +775,9 @@ public abstract class AbstractContinuumT
assertButtonWithValuePresent( "Cancel" );
}
- public void addProject( String name, String description, String version, String scmUrl, String scmUser,
- String scmPassword, String scmTag, boolean useCache, String projectGroup,
- String buildTemplate, boolean success )
+ public void addProject(String name,String description,String version,String scmUrl,String scmUser,
+ String scmPassword,String scmTag,boolean useCache,String projectGroup,
+ String buildTemplate,boolean success,String type )
throws Exception
{
setFieldValue( "projectName", name );
@@ -738,25 +801,270 @@ public abstract class AbstractContinuumT
}
submit();
String title;
+ type = type.substring( 0, 1 ).toUpperCase() + type.substring( 1 ).toLowerCase();
if ( success )
{
title = "Continuum - Project Group";
}
else
{
- title = "Continuum - Add ";
+ title = "Continuum - Add " + type + " Project";
}
waitAddProject( title );
}
- private void waitAddProject( String title )
+ public void waitAddProject( String title )
throws Exception
{
- Thread.sleep( 100 );
- String condition = "selenium.browserbot.getCurrentWindow().document.title != ''";
- getSelenium().waitForCondition( condition, maxWaitTimeInMs );
- Thread.sleep( 1000 );
- String t = getTitle();
- Assert.assertTrue( t.contains( title ) );
+ // the "adding project" interstitial page has an empty title, so we wait for a real title to appear
+
+ if ( browser.equals( "*iexplore" ) )
+ {
+ int currentIt = 1;
+ int maxIt = 20;
+
+ // there's a problem with ie using waitForCondition
+ while( getTitle().equals( "" ) && currentIt <= maxIt )
+ {
+ waitPage();
+ currentIt++;
+ }
+ }
+ else
+ {
+ String condition = "selenium.browserbot.getCurrentWindow().document.title.replace(/^\\s*/, \"\").replace(/\\s*$/, \"\") != '' && selenium.browserbot.getCurrentWindow().document.getElementById('footer') != null";
+ waitForCondition( condition );
+ }
+
+ Assert.assertEquals( getTitle(), title );
+ }
+
+ public void createAndAddUserAsDeveloperToGroup( String username, String name, String email, String password, String groupName )
+ {
+ clickLinkWithText( "Users" );
+ assertPage( "[Admin] User List" );
+ assertTextNotPresent( username );
+ clickButtonWithValue( "Create New User" );
+ assertPage( "[Admin] User Create" );
+ setFieldValue( "user.fullName", name );
+ setFieldValue( "user.username", username );
+ setFieldValue( "user.email", email );
+ setFieldValue( "user.password", password );
+ setFieldValue( "user.confirmPassword", password );
+ clickButtonWithValue( "Create User" );
+ assertPage( "[Admin] User Edit" );
+ assignContinuumResourceRoleToUser( "Project Developer", groupName );
+ clickButtonWithValue( "Submit" );
+ assertPage( "[Admin] User List" );
+ assertTextPresent( username );
+ assertTextPresent( name );
+ assertTextPresent( email );
+ }
+
+ public void showMembers( String name, String groupId, String description )
+ throws Exception
+ {
+ showProjectGroup( name, groupId, description );
+ clickLinkWithText( "Members" );
+ assertTextPresent( "Member Projects of " + name + " group" );
+ assertTextPresent( "Users" );
+ }
+
+ public void assertUserPresent( String username, String name, String email )
+ {
+ assertTextPresent( username );
+ assertTextPresent( name );
+ assertTextPresent( email );
+ }
+
+ public void assertUserNotPresent( String username, String name, String email )
+ {
+ assertTextNotPresent( username );
+ assertTextNotPresent( name );
+ assertTextNotPresent( email );
+ }
+
+ public void waitForProjectCheckout()
+ throws Exception
+ {
+ // wait for project to finish checking out
+ waitForElementPresent( "//img[@alt='Checking Out']", false );
+ }
+
+ public void waitForProjectUpdate()
+ throws Exception
+ {
+ if ( isElementPresent( "//img[@alt='Checking Out']" ) )
+ {
+ waitForProjectCheckout();
+ }
+
+ // wait for project to finish updating
+ waitForElementPresent( "//img[@alt='Updating']", false );
+ }
+
+ public void waitForProjectBuild()
+ throws Exception
+ {
+ if ( isElementPresent( "//img[@alt='Checking Out']" ) || isElementPresent( "//img[@alt='Updating']" ) )
+ {
+ waitForProjectUpdate();
+ }
+
+ // wait for project to finish building
+ waitForElementPresent( "//img[@alt='Building']", false );
+ }
+
+ public void createNewUser( String username, String name, String email, String password )
+ {
+ clickLinkWithText( "Users" );
+ assertPage( "[Admin] User List" );
+ assertTextNotPresent( username );
+ clickButtonWithValue( "Create New User" );
+ assertPage( "[Admin] User Create" );
+ setFieldValue( "user.fullName", name );
+ setFieldValue( "user.username", username );
+ setFieldValue( "user.email", email );
+ setFieldValue( "user.password", password );
+ setFieldValue( "user.confirmPassword", password );
+ clickButtonWithValue( "Create User" );
+ assertPage( "[Admin] User Edit" );
+ }
+
+ public void assignContinuumRoleToUser( String role )
+ {
+ clickLinkWithXPath( "//input[@id='addRolesToUser_addNDSelectedRoles' and @name='addNDSelectedRoles' and @value='" + role + "']", false );
+ }
+
+ public void assignContinuumResourceRoleToUser( String resourceRole, String groupName )
+ {
+ clickLinkWithXPath( "//input[@name='addDSelectedRoles' and @value='" + resourceRole + " - " + groupName + "']", false );
+ }
+
+ public void assertUserCreatedPage()
+ {
+ assertPage( "[Admin] User List" );
+ assertTextPresent( "[Admin] List of Users in Role: Any" );
+ assertLinkPresent( "admin" );
+ assertLinkPresent( "guest" );
+ }
+
+ public void removeDefaultBuildDefinitionFromTemplate( String type )
+ {
+ goToEditBuildDefinitionTemplate( type );
+ clickLinkWithXPath( "//input[@value='<-']", false );
+ submit();
+ }
+
+ public void addDefaultBuildDefinitionFromTemplate( String type )
+ {
+ goToEditBuildDefinitionTemplate( type );
+
+ if ( "maven2".equals( type ) )
+ {
+ selectForOption( "saveBuildDefinitionTemplate_buildDefinitionIds", "Default Maven 2 Build Definition" );
+ }
+ else if ( "maven1".equals( type ) )
+ {
+
+ }
+ else if ( "ant".equals( type ) )
+ {
+
+ }
+ else
+ {
+
+ }
+
+ clickLinkWithXPath( "//input[@value='->']", false );
+ submit();
+ }
+
+ public void goToEditBuildDefinitionTemplate( String type )
+ {
+ clickLinkWithText( "Build Definition Templates" );
+
+ assertBuildDefinitionTemplatesPage();
+
+ if ( "maven2".equals( type ) )
+ {
+ clickLinkWithXPath( "//table[@id='ec_table']/tbody/tr[3]/td[2]/a/img", true );
+ }
+ else if ( "maven1".equals( type ) )
+ {
+ clickLinkWithXPath( "//table[@id='ec_table']/tbody/tr[2]/td[2]/a/img", true );
+ }
+ else if ( "ant".equals( type ) )
+ {
+ clickLinkWithXPath( "//img[@alt='Edit']", true );
+ }
+ else
+ {
+ clickLinkWithXPath( "//table[@id='ec_table']/tbody/tr[4]/td[2]/a/img", true );
+ }
+
+ assertPage( "Continuum - Build Definition Template" );
+ }
+
+ public void assertBuildDefinitionTemplatesPage()
+ {
+ assertPage( "Continuum - Build Definition Templates" );
+ assertTextPresent( "Default Ant Template" );
+ assertTextPresent( "Default Maven 1 Template" );
+ assertTextPresent( "Default Maven 2 Template" );
+ assertTextPresent( "Default Shell Template" );
+ assertTextPresent( "Available Build Definitions" );
+ assertTextPresent( "Default Ant Build Definition" );
+ assertTextPresent( "Default Maven 1 Build Definition" );
+ assertTextPresent( "Default Maven 2 Build Definition" );
+ assertTextPresent( "Default Shell Build Definition" );
+ }
+
+ // ////////////////////////////////////
+ // Distributed Builds
+ // ////////////////////////////////////
+
+ public void enableDistributedBuilds()
+ {
+ ConfigurationTest config = new ConfigurationTest();
+ config.goToConfigurationPage();
+ setFieldValue( "numberOfAllowedBuildsinParallel", "2" );
+ if ( !isChecked( "configuration_distributedBuildEnabled" ) )
+ {
+ checkField( "configuration_distributedBuildEnabled" );
+ }
+ clickAndWait( "configuration_" );
+ assertTextPresent( "true" );
+ assertTextPresent( "Distributed Builds" );
+ assertElementPresent( "link=Build Agents" );
+ }
+
+ public void disableDistributedBuilds()
+ {
+ ConfigurationTest config = new ConfigurationTest();
+ config.goToConfigurationPage();
+ setFieldValue( "numberOfAllowedBuildsinParallel", "2" );
+ if ( isChecked( "configuration_distributedBuildEnabled" ) )
+ {
+ uncheckField( "configuration_distributedBuildEnabled" );
+ }
+ submit();
+ assertTextPresent( "false" );
+ assertElementNotPresent( "link=Build Agents" );
+ }
+
+ public void goToBuildAgentPage()
+ {
+ clickAndWait("link=Build Agents");
+ assertPage("Continuum - Build Agents");
+ }
+
+ public void assertBuildAgentPage()
+ {
+ assertPage("Continuum - Build Agents");
+ assertTextPresent("Build Agents");
+ assertTextPresent("Build Agent Groups");
+ assertButtonWithValuePresent( "Add" );
}
}
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractContinuumTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractContinuumTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractScheduleTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractScheduleTest.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractScheduleTest.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractScheduleTest.java Thu May 6 09:23:13 2010
@@ -84,8 +84,8 @@ public abstract class AbstractScheduleTe
assertTextPresent( "Quiet Period (seconds):" );
assertElementPresent( "delay" );
assertTextPresent( "Add Build Queue" );
- assertElementPresent( "availableBuildQueues" );
- assertElementPresent( "selectedBuildQueues" );
+ assertElementPresent( "availableBuildQueuesIds" );
+ assertElementPresent( "selectedBuildQueuesIds" );
assertElementPresent( "active" );
assertTextPresent( "Enable/Disable the schedule" );
assertButtonWithValuePresent( "Save" );
@@ -94,20 +94,41 @@ public abstract class AbstractScheduleTe
public void addEditSchedule( String name, String description, String second, String minute, String hour,
String dayMonth, String month, String dayWeek, String year, String maxTime,
- String period, boolean success )
+ String period, boolean buildQueue, boolean success )
{
- setFieldValue( "name", name );
- setFieldValue( "description", description );
- setFieldValue( "second", second );
- setFieldValue( "minute", minute );
- setFieldValue( "hour", hour );
- setFieldValue( "dayOfMonth", dayMonth );
- setFieldValue( "month", month );
- setFieldValue( "dayOfWeek", dayWeek );
- setFieldValue( "year", year );
- setFieldValue( "maxJobExecutionTime", maxTime );
- setFieldValue( "delay", period );
- submit();
+ if ( buildQueue )
+ {
+ setFieldValue( "name", name );
+ setFieldValue( "description", description );
+ setFieldValue( "second", second );
+ setFieldValue( "minute", minute );
+ setFieldValue( "hour", hour );
+ setFieldValue( "dayOfMonth", dayMonth );
+ setFieldValue( "month", month );
+ setFieldValue( "dayOfWeek", dayWeek );
+ setFieldValue( "year", year );
+ setFieldValue( "maxJobExecutionTime", maxTime );
+ setFieldValue( "delay", period );
+ getSelenium().addSelection("saveSchedule_availableBuildQueuesIds", "label=DEFAULT_BUILD_QUEUE");
+ getSelenium().click("//input[@value='->']");
+ submit();
+ }
+ else
+ {
+ setFieldValue( "name", name );
+ setFieldValue( "description", description );
+ setFieldValue( "second", second );
+ setFieldValue( "minute", minute );
+ setFieldValue( "hour", hour );
+ setFieldValue( "dayOfMonth", dayMonth );
+ setFieldValue( "month", month );
+ setFieldValue( "dayOfWeek", dayWeek );
+ setFieldValue( "year", year );
+ setFieldValue( "maxJobExecutionTime", maxTime );
+ setFieldValue( "delay", period );
+ submit();
+ }
+
if ( success )
{
assertSchedulePage();
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java Thu May 6 09:23:13 2010
@@ -19,21 +19,24 @@ package org.apache.continuum.web.test.pa
* under the License.
*/
+import com.thoughtworks.selenium.DefaultSelenium;
+import com.thoughtworks.selenium.Selenium;
+import org.apache.commons.io.IOUtils;
+import org.testng.Assert;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Properties;
import java.util.Map.Entry;
-
-import org.testng.Assert;
-
-import com.thoughtworks.selenium.DefaultSelenium;
-import com.thoughtworks.selenium.Selenium;
+import java.util.Properties;
/**
* Based on AbstractSeleniumTestCase of Emmanuel Venisse test.
- *
+ *
* @author José Morales MartÃnez
* @version $Id$
*/
@@ -41,41 +44,85 @@ public abstract class AbstractSeleniumTe
{
public static String baseUrl;
+ public static String browser;
+
public static String maxWaitTimeInMs;
- private static ThreadLocal<Selenium> selenium;
+ private static ThreadLocal<Selenium> selenium = new ThreadLocal<Selenium>();
+
+ private static Properties p;
- public static Properties p;
+ private final static String PROPERTIES_SEPARATOR = "=";
+
+ private static String maxProjectWaitTimeInMs;
/**
- * Initialize selenium an others properties. This method is called from BeforeSuite method of sub-class.
+ * Initialize properties.
*/
public void open()
throws Exception
{
+ InputStream input = this.getClass().getClassLoader().getResourceAsStream( "testng.properties" );
p = new Properties();
- p.load( this.getClass().getClassLoader().getResourceAsStream( "testng.properties" ) );
+ p.load( input );
+
+ maxWaitTimeInMs = getProperty( "MAX_WAIT_TIME_IN_MS" );
+ maxProjectWaitTimeInMs = getProperty( "MAX_PROJECT_WAIT_TIME_IN_MS" );
+ }
- baseUrl = p.getProperty( "BASE_URL" );
- maxWaitTimeInMs = p.getProperty( "MAX_WAIT_TIME_IN_MS" );
+ /**
+ * Initialize selenium
+ */
+ public void open( String baseUrl, String browser, String seleniumHost, int seleniumPort )
+ throws Exception
+ {
+ this.baseUrl = baseUrl;
- String seleniumHost = p.getProperty( "SELENIUM_HOST" );
- int seleniumPort = Integer.parseInt( ( p.getProperty( "SELENIUM_PORT" ) ) );
- String seleniumBrowser = p.getProperty( "SELENIUM_BROWSER" );
- final Selenium s = new DefaultSelenium( seleniumHost, seleniumPort, seleniumBrowser, baseUrl );
- selenium = new ThreadLocal<Selenium>()
+ this.browser = browser;
+
+ if ( getSelenium() == null )
{
- protected Selenium initialValue()
- {
- return s;
- }
- };
- getSelenium().start();
+ DefaultSelenium s = new DefaultSelenium( seleniumHost, seleniumPort, browser, baseUrl );
+ s.start();
+ s.setTimeout( maxWaitTimeInMs );
+ selenium.set( s );
+ }
+ }
+
+ public static Selenium getSelenium()
+ {
+ return selenium == null ? null : selenium.get();
+ }
+
+ protected String getProperty( String key )
+ {
+ return p.getProperty( key );
}
- protected static Selenium getSelenium()
+ // TODO: look into removing this, as the issue should be fixed by upgrading the resources plugin to v2.4+
+ protected String getEscapeProperty( String key )
{
- return selenium.get();
+ InputStream input = this.getClass().getClassLoader().getResourceAsStream( "testng.properties" );
+ String value = null;
+ List<String> lines;
+ try
+ {
+ lines = IOUtils.readLines( input );
+ }
+ catch ( IOException e )
+ {
+ lines = new ArrayList<String>();
+ }
+ for ( String l : lines )
+ {
+ if ( l != null && l.startsWith( key ) )
+ {
+ int indexSeparator = l.indexOf( PROPERTIES_SEPARATOR );
+ value = l.substring( indexSeparator + 1 ).trim();
+ break;
+ }
+ }
+ return value;
}
/**
@@ -84,7 +131,11 @@ public abstract class AbstractSeleniumTe
public void close()
throws Exception
{
- getSelenium().stop();
+ if ( getSelenium() != null )
+ {
+ getSelenium().stop();
+ selenium.set( null );
+ }
}
// *******************************************************
@@ -139,7 +190,7 @@ public abstract class AbstractSeleniumTe
public void assertLinkNotPresent( String text )
{
- Assert.assertFalse( isElementPresent( "link=" + text ), "The link '" + text + "' is present." );
+ Assert.assertFalse( isElementPresent( "link=" + text ), "The link '" + text + "' is present." );
}
public void assertImgWithAlt( String alt )
@@ -156,6 +207,11 @@ public abstract class AbstractSeleniumTe
assertElementPresent( locator );
}
+ public void assertImgWithAltNotPresent( String alt )
+ {
+ assertElementNotPresent( "//img[@alt='" + alt + "']" );
+ }
+
public void assertCellValueFromTable( String expected, String tableElement, int row, int column )
{
Assert.assertEquals( expected, getCellValueFromTable( tableElement, row, column ) );
@@ -202,6 +258,7 @@ public abstract class AbstractSeleniumTe
String[] optionsPresent = getSelenium().getSelectOptions( selectField );
List<String> expected = Arrays.asList( options );
List<String> present = Arrays.asList( optionsPresent );
+
Assert.assertTrue( present.containsAll( expected ), "Options expected are not included in present options" );
}
@@ -209,6 +266,7 @@ public abstract class AbstractSeleniumTe
{
assertElementPresent( fieldName );
String optionsPresent = getSelenium().getSelectedLabel( value );
+
Assert.assertEquals( optionsPresent, value );
}
@@ -304,7 +362,6 @@ public abstract class AbstractSeleniumTe
public void clickLinkWithLocator( String locator, boolean wait )
{
- assertElementPresent( locator );
getSelenium().click( locator );
if ( wait )
{
@@ -353,4 +410,58 @@ public abstract class AbstractSeleniumTe
{
Assert.assertFalse( getSelenium().isChecked( locator ) );
}
+
+ public void clickAndWait( String locator )
+ {
+ getSelenium().click( locator );
+ getSelenium().waitForPageToLoad( maxWaitTimeInMs );
+ }
+
+ public void waitForElementPresent( String locator )
+ throws Exception
+ {
+ waitForElementPresent( locator, true );
+ }
+
+ /*
+ * This will wait for the condition to be met.
+ * * shouldBePresent - if the locator is expected or not (true or false respectively)
+ */
+ public void waitForElementPresent( String locator, boolean shouldBePresent )
+ throws Exception
+ {
+ if ( browser.equals( "*iexplore" ) )
+ {
+ int currentIt = 0;
+ int maxIt = Integer.valueOf( getProperty( "WAIT_TRIES" ) );
+ String pageLoadTimeInMs = getProperty( "PAGE_LOAD_TIME_IN_MS" );
+
+ while ( isElementPresent( locator ) != shouldBePresent && currentIt < maxIt )
+ {
+ getSelenium().waitForPageToLoad( pageLoadTimeInMs );
+ currentIt++;
+ }
+ }
+ else
+ {
+ String condition = "selenium.isElementPresent(\"" + locator + "\") == " + shouldBePresent;
+ waitForCondition( condition );
+ }
+ }
+
+ public void selectForOption( String locator, String text )
+ {
+ getSelenium().addSelection( locator, "label=" + text );
+ }
+
+ public void unselectForOption( String locator, String text )
+ {
+ getSelenium().removeSelection( locator, "label=" + text );
+ }
+
+ public void waitForCondition( String condition )
+ throws Exception
+ {
+ getSelenium().waitForCondition( condition, maxProjectWaitTimeInMs );
+ }
}
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractSeleniumTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/conf/catalina.policy
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/conf/catalina.policy?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/conf/catalina.policy (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/conf/catalina.policy Thu May 6 09:23:13 2010
@@ -1,172 +1,172 @@
-// ============================================================================
-// catalina.corepolicy - Security Policy Permissions for Tomcat 5
-//
-// This file contains a default set of security policies to be enforced (by the
-// JVM) when Catalina is executed with the "-security" option. In addition
-// to the permissions granted here, the following additional permissions are
-// granted to the codebase specific to each web application:
-//
-// * Read access to the document root directory
-//
-// $Id: catalina.policy 393732 2006-04-13 06:32:25Z pero $
-// ============================================================================
-
-
-// ========== SYSTEM CODE PERMISSIONS =========================================
-
-
-// These permissions apply to javac
-grant codeBase "file:${java.home}/lib/-" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to all shared system extensions
-grant codeBase "file:${java.home}/jre/lib/ext/-" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
-grant codeBase "file:${java.home}/../lib/-" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to all shared system extensions when
-// ${java.home} points at $JAVA_HOME/jre
-grant codeBase "file:${java.home}/lib/ext/-" {
- permission java.security.AllPermission;
-};
-
-
-// ========== CATALINA CODE PERMISSIONS =======================================
-
-
-// These permissions apply to the launcher code
-grant codeBase "file:${catalina.home}/bin/commons-launcher.jar" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to the daemon code
-grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to the commons-logging API
-grant codeBase "file:${catalina.home}/bin/commons-logging-api.jar" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to the server startup code
-grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to the JMX server
-grant codeBase "file:${catalina.home}/bin/jmx.jar" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to JULI
-grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to the servlet API classes
-// and those that are shared across all class loaders
-// located in the "common" directory
-grant codeBase "file:${catalina.home}/common/-" {
- permission java.security.AllPermission;
-};
-
-// These permissions apply to the container's core code, plus any additional
-// libraries installed in the "server" directory
-grant codeBase "file:${catalina.home}/server/-" {
- permission java.security.AllPermission;
-};
-
-// The permissions granted to the balancer WEB-INF/classes and WEB-INF/lib directory
-grant codeBase "file:${catalina.home}/webapps/balancer/-" {
- permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.util.digester";
- permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.util.digester.*";
-};
-// ========== WEB APPLICATION PERMISSIONS =====================================
-
-
-// These permissions are granted by default to all web applications
-// In addition, a web application will be given a read FilePermission
-// and JndiPermission for all files and directories in its document root.
-grant {
- // Required for JNDI lookup of named JDBC DataSource's and
- // javamail named MimePart DataSource used to send mail
- permission java.util.PropertyPermission "java.home", "read";
- permission java.util.PropertyPermission "java.naming.*", "read";
- permission java.util.PropertyPermission "javax.sql.*", "read";
-
- // OS Specific properties to allow read access
- permission java.util.PropertyPermission "os.name", "read";
- permission java.util.PropertyPermission "os.version", "read";
- permission java.util.PropertyPermission "os.arch", "read";
- permission java.util.PropertyPermission "file.separator", "read";
- permission java.util.PropertyPermission "path.separator", "read";
- permission java.util.PropertyPermission "line.separator", "read";
-
- // JVM properties to allow read access
- permission java.util.PropertyPermission "java.version", "read";
- permission java.util.PropertyPermission "java.vendor", "read";
- permission java.util.PropertyPermission "java.vendor.url", "read";
- permission java.util.PropertyPermission "java.class.version", "read";
- permission java.util.PropertyPermission "java.specification.version", "read";
- permission java.util.PropertyPermission "java.specification.vendor", "read";
- permission java.util.PropertyPermission "java.specification.name", "read";
-
- permission java.util.PropertyPermission "java.vm.specification.version", "read";
- permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
- permission java.util.PropertyPermission "java.vm.specification.name", "read";
- permission java.util.PropertyPermission "java.vm.version", "read";
- permission java.util.PropertyPermission "java.vm.vendor", "read";
- permission java.util.PropertyPermission "java.vm.name", "read";
-
- // Required for OpenJMX
- permission java.lang.RuntimePermission "getAttribute";
-
- // Allow read of JAXP compliant XML parser debug
- permission java.util.PropertyPermission "jaxp.debug", "read";
-
- // Precompiled JSPs need access to this package.
- permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
- permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime.*";
-
-};
-
-
-// You can assign additional permissions to particular web applications by
-// adding additional "grant" entries here, based on the code base for that
-// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
-//
-// Different permissions can be granted to JSP pages, classes loaded from
-// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
-// directory, or even to individual jar files in the /WEB-INF/lib/ directory.
-//
-// For instance, assume that the standard "examples" application
-// included a JDBC driver that needed to establish a network connection to the
-// corresponding database and used the scrape taglib to get the weather from
-// the NOAA web server. You might create a "grant" entries like this:
-//
-// The permissions granted to the context root directory apply to JSP pages.
-// grant codeBase "file:${catalina.home}/webapps/examples/-" {
-// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
-// permission java.net.SocketPermission "*.noaa.gov:80", "connect";
-// };
-//
-// The permissions granted to the context WEB-INF/classes directory
-// grant codeBase "file:${catalina.home}/webapps/examples/WEB-INF/classes/-" {
-// };
-//
-// The permission granted to your JDBC driver
-// grant codeBase "jar:file:${catalina.home}/webapps/examples/WEB-INF/lib/driver.jar!/-" {
-// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
-// };
-// The permission granted to the scrape taglib
-// grant codeBase "jar:file:${catalina.home}/webapps/examples/WEB-INF/lib/scrape.jar!/-" {
-// permission java.net.SocketPermission "*.noaa.gov:80", "connect";
-// };
-
+// ============================================================================
+// catalina.corepolicy - Security Policy Permissions for Tomcat 5
+//
+// This file contains a default set of security policies to be enforced (by the
+// JVM) when Catalina is executed with the "-security" option. In addition
+// to the permissions granted here, the following additional permissions are
+// granted to the codebase specific to each web application:
+//
+// * Read access to the document root directory
+//
+// $Id$
+// ============================================================================
+
+
+// ========== SYSTEM CODE PERMISSIONS =========================================
+
+
+// These permissions apply to javac
+grant codeBase "file:${java.home}/lib/-" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to all shared system extensions
+grant codeBase "file:${java.home}/jre/lib/ext/-" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre
+grant codeBase "file:${java.home}/../lib/-" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to all shared system extensions when
+// ${java.home} points at $JAVA_HOME/jre
+grant codeBase "file:${java.home}/lib/ext/-" {
+ permission java.security.AllPermission;
+};
+
+
+// ========== CATALINA CODE PERMISSIONS =======================================
+
+
+// These permissions apply to the launcher code
+grant codeBase "file:${catalina.home}/bin/commons-launcher.jar" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to the daemon code
+grant codeBase "file:${catalina.home}/bin/commons-daemon.jar" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to the commons-logging API
+grant codeBase "file:${catalina.home}/bin/commons-logging-api.jar" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to the server startup code
+grant codeBase "file:${catalina.home}/bin/bootstrap.jar" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to the JMX server
+grant codeBase "file:${catalina.home}/bin/jmx.jar" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to JULI
+grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to the servlet API classes
+// and those that are shared across all class loaders
+// located in the "common" directory
+grant codeBase "file:${catalina.home}/common/-" {
+ permission java.security.AllPermission;
+};
+
+// These permissions apply to the container's core code, plus any additional
+// libraries installed in the "server" directory
+grant codeBase "file:${catalina.home}/server/-" {
+ permission java.security.AllPermission;
+};
+
+// The permissions granted to the balancer WEB-INF/classes and WEB-INF/lib directory
+grant codeBase "file:${catalina.home}/webapps/balancer/-" {
+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.util.digester";
+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.util.digester.*";
+};
+// ========== WEB APPLICATION PERMISSIONS =====================================
+
+
+// These permissions are granted by default to all web applications
+// In addition, a web application will be given a read FilePermission
+// and JndiPermission for all files and directories in its document root.
+grant {
+ // Required for JNDI lookup of named JDBC DataSource's and
+ // javamail named MimePart DataSource used to send mail
+ permission java.util.PropertyPermission "java.home", "read";
+ permission java.util.PropertyPermission "java.naming.*", "read";
+ permission java.util.PropertyPermission "javax.sql.*", "read";
+
+ // OS Specific properties to allow read access
+ permission java.util.PropertyPermission "os.name", "read";
+ permission java.util.PropertyPermission "os.version", "read";
+ permission java.util.PropertyPermission "os.arch", "read";
+ permission java.util.PropertyPermission "file.separator", "read";
+ permission java.util.PropertyPermission "path.separator", "read";
+ permission java.util.PropertyPermission "line.separator", "read";
+
+ // JVM properties to allow read access
+ permission java.util.PropertyPermission "java.version", "read";
+ permission java.util.PropertyPermission "java.vendor", "read";
+ permission java.util.PropertyPermission "java.vendor.url", "read";
+ permission java.util.PropertyPermission "java.class.version", "read";
+ permission java.util.PropertyPermission "java.specification.version", "read";
+ permission java.util.PropertyPermission "java.specification.vendor", "read";
+ permission java.util.PropertyPermission "java.specification.name", "read";
+
+ permission java.util.PropertyPermission "java.vm.specification.version", "read";
+ permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
+ permission java.util.PropertyPermission "java.vm.specification.name", "read";
+ permission java.util.PropertyPermission "java.vm.version", "read";
+ permission java.util.PropertyPermission "java.vm.vendor", "read";
+ permission java.util.PropertyPermission "java.vm.name", "read";
+
+ // Required for OpenJMX
+ permission java.lang.RuntimePermission "getAttribute";
+
+ // Allow read of JAXP compliant XML parser debug
+ permission java.util.PropertyPermission "jaxp.debug", "read";
+
+ // Precompiled JSPs need access to this package.
+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime";
+ permission java.lang.RuntimePermission "accessClassInPackage.org.apache.jasper.runtime.*";
+
+};
+
+
+// You can assign additional permissions to particular web applications by
+// adding additional "grant" entries here, based on the code base for that
+// application, /WEB-INF/classes/, or /WEB-INF/lib/ jar files.
+//
+// Different permissions can be granted to JSP pages, classes loaded from
+// the /WEB-INF/classes/ directory, all jar files in the /WEB-INF/lib/
+// directory, or even to individual jar files in the /WEB-INF/lib/ directory.
+//
+// For instance, assume that the standard "examples" application
+// included a JDBC driver that needed to establish a network connection to the
+// corresponding database and used the scrape taglib to get the weather from
+// the NOAA web server. You might create a "grant" entries like this:
+//
+// The permissions granted to the context root directory apply to JSP pages.
+// grant codeBase "file:${catalina.home}/webapps/examples/-" {
+// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
+// permission java.net.SocketPermission "*.noaa.gov:80", "connect";
+// };
+//
+// The permissions granted to the context WEB-INF/classes directory
+// grant codeBase "file:${catalina.home}/webapps/examples/WEB-INF/classes/-" {
+// };
+//
+// The permission granted to your JDBC driver
+// grant codeBase "jar:file:${catalina.home}/webapps/examples/WEB-INF/lib/driver.jar!/-" {
+// permission java.net.SocketPermission "dbhost.mycompany.com:5432", "connect";
+// };
+// The permission granted to the scrape taglib
+// grant codeBase "jar:file:${catalina.home}/webapps/examples/WEB-INF/lib/scrape.jar!/-" {
+// permission java.net.SocketPermission "*.noaa.gov:80", "connect";
+// };
+
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/conf/catalina.policy
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/conf/catalina.policy
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/context.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp-test/src/test/tomcat5x/context.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/pom.xml
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/pom.xml?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/pom.xml (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/pom.xml Thu May 6 09:23:13 2010
@@ -21,7 +21,7 @@ under the License.
<parent>
<artifactId>continuum</artifactId>
<groupId>org.apache.continuum</groupId>
- <version>1.4.0-SNAPSHOT</version>
+ <version>1.4.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>continuum-webapp</artifactId>
@@ -52,49 +52,12 @@ under the License.
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-clean-plugin</artifactId>
- <!-- This configuration is added to cleanup from war:inplace -->
+ <artifactId>maven-clean-plugin</artifactId>
<configuration>
<filesets>
<fileset>
<directory>${basedir}/data</directory>
- </fileset>
- <fileset>
- <directory>${basedir}/src/main/webapp</directory>
- <includes>
- <!-- TODO: META-INF shouldn't be required, seems to be an issue with the current war plugin -->
- <include>META-INF</include>
- <include>images/redback</include>
- <!-- Images from other wars -->
- <include>template/</include>
- <!-- validation.js -->
- <include>template/redback</include>
- <!-- Templates from other wars -->
- <include>WEB-INF/classes</include>
- <!-- Classes and Resources from other wars -->
- <include>WEB-INF/lib</include>
- <!-- Dependencies from other wars -->
- <include>WEB-INF/database</include>
- <!-- Database location configured in application.xml -->
- <include>WEB-INF/logs</include>
- <!-- Log file location specified in application.xml -->
- <include>redback</include>
- <!-- plexus-redback css and javascript -->
- <include>css/redback</include>
- <include>WEB-INF/jsp/redback</include>
- <!-- plexus-redback jsps -->
- <include>WEB-INF/template/redback</include>
- <!-- plexus-security xwork templates -->
- <include>WEB-INF/build-output-directory</include>
- <!-- Directory created by jetty:run -->
- <include>WEB-INF/working-directory</include>
- <!-- Directory created by jetty:run -->
- <include>WEB-INF/logs</include>
- <!-- Directory created by jetty:run -->
- <include>WEB-INF/temp</include>
- <!-- Directory created by jetty:run -->
- </includes>
- </fileset>
+ </fileset>
</filesets>
</configuration>
</plugin>
@@ -105,49 +68,9 @@ under the License.
<!-- Some versions of maven-war-plugin (snapshots) have this incorrectly defaulted to true.
Specifically setting this to false to avoid accidental jar file creation. -->
<archiveClasses>false</archiveClasses>
- <dependentWarExcludes>META-INF/**,WEB-INF/web.xml,WEB-INF/classes/xwork.xml,WEB-INF/lib/**
- </dependentWarExcludes>
- </configuration>
- <!-- TODO: would be good to make the jetty plugin aware of these and remove the below -->
- <executions>
- <execution>
- <phase>compile</phase>
- <goals>
- <!-- Needed to get the plexus-security war overlay to do its thing before jetty:run -->
- <goal>inplace</goal>
- </goals>
- </execution>
- </executions>
+ <dependentWarExcludes>META-INF/**,WEB-INF/web.xml,WEB-INF/classes/xwork.xml,WEB-INF/lib/**</dependentWarExcludes>
+ </configuration>
</plugin>
-
- <!--
- here an hack to prevent multiple struts core in classpath
- which prevent struts start
- and same struts.xml in the classpath too
- -->
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
- <execution>
- <id>cleanup-struts-jar-in-webapp</id>
- <phase>compile</phase>
- <goals>
- <goal>run</goal>
- </goals>
- <configuration>
- <tasks>
- <delete includeemptydirs="true">
- <fileset dir="${basedir}/src/main/webapp/WEB-INF/lib" includes="**/struts2*.jar" />
- </delete>
- <delete includeemptydirs="true">
- <fileset dir="${basedir}/src/main/webapp/WEB-INF/classes" includes="**/struts.*" />
- </delete>
- </tasks>
- </configuration>
- </execution>
- </executions>
- </plugin>
-
<plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-maven-plugin</artifactId>
@@ -179,17 +102,9 @@ under the License.
<execution>
<id>web summary model classes</id>
<configuration>
- <model>src/main/mdo/view-models.mdo</model>
- <version>1.0.0</version>
- </configuration>
- <goals>
- <goal>java</goal>
- </goals>
- </execution>
- <execution>
- <id>session model classes</id>
- <configuration>
- <model>src/main/mdo/session-models.mdo</model>
+ <models>
+ <model>src/main/mdo/view-models.mdo</model>
+ </models>
<version>1.0.0</version>
</configuration>
<goals>
@@ -199,7 +114,9 @@ under the License.
<execution>
<id>appearence model classes</id>
<configuration>
- <model>src/main/mdo/appearance-models.mdo</model>
+ <models>
+ <model>src/main/mdo/appearance-models.mdo</model>
+ </models>
<version>1.0.0</version>
</configuration>
<goals>
@@ -207,8 +124,11 @@ under the License.
<goal>xpp3-reader</goal>
<goal>xpp3-writer</goal>
</goals>
- </execution>
+ </execution>
</executions>
+ <configuration>
+ <useJava5>true</useJava5>
+ </configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
@@ -233,13 +153,65 @@ under the License.
-->
</configuration>
</plugin>
+
+ <!-- hack for jetty:run, continuum web config files are checked in /WEB-INF/ dir -->
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-web-config-files</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <phase>compile</phase>
+ <configuration>
+ <tasks>
+ <mkdir dir="${basedir}/target/continuum/WEB-INF/" />
+ <copy todir="${basedir}/target/continuum/WEB-INF/">
+ <fileset dir="${basedir}/target" includes="classes/" excludes="**/struts.xml" />
+ </copy>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>unpack-redback-war</id>
+ <goals>
+ <goal>unpack</goal>
+ </goals>
+ <phase>compile</phase>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.codehaus.redback</groupId>
+ <artifactId>redback-struts2-content</artifactId>
+ <version>${redback.version}</version>
+ <type>war</type>
+ <overWrite>false</overWrite>
+ <outputDirectory>${project.build.directory}/redback</outputDirectory>
+ <excludes>**/struts-security.xml</excludes>
+ </artifactItem>
+ </artifactItems>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<configuration>
+ <webAppConfig>
+ <contextPath>/</contextPath>
+ <baseResource implementation="org.mortbay.resource.ResourceCollection">
+ <resourcesAsCSV>src/main/webapp,target/continuum,target/redback</resourcesAsCSV>
+ </baseResource>
+ </webAppConfig>
<scanIntervalSeconds>10</scanIntervalSeconds>
- <contextPath>/</contextPath>
- <jettyEnvXml>${basedir}/src/jetty-env.xml</jettyEnvXml>
+ <jettyEnvXml>${basedir}/src/jetty-env.xml</jettyEnvXml>
<connectors>
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>9090</port>
@@ -259,7 +231,7 @@ under the License.
<name>derby.system.home</name>
<value>${project.build.directory}/appserver-base/logs</value>
</systemProperty>
- </systemProperties>
+ </systemProperties>
</configuration>
<dependencies>
<dependency>
@@ -391,10 +363,6 @@ under the License.
<artifactId>maven-app-configuration-web</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.maven.release</groupId>
- <artifactId>maven-release-manager</artifactId>
- </dependency>
- <dependency>
<groupId>org.apache.continuum</groupId>
<artifactId>continuum-builder</artifactId>
</dependency>
@@ -446,6 +414,10 @@ under the License.
<scope>runtime</scope>
</dependency>
<dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ </dependency>
+ <dependency>
<groupId>com.atlassian.xmlrpc</groupId>
<artifactId>atlassian-xmlrpc-binder-server-spring</artifactId>
<scope>runtime</scope>
@@ -489,7 +461,7 @@ under the License.
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-svn-commons</artifactId>
- </dependency>
+ </dependency>
<dependency>
<groupId>org.apache.maven.release</groupId>
<artifactId>maven-release-manager</artifactId>
@@ -594,6 +566,7 @@ under the License.
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
+ <scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/AbstractReleaseAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/AbstractReleaseAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/AbstractReleaseAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/AbstractReleaseAction.java Thu May 6 09:23:13 2010
@@ -24,6 +24,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.continuum.configuration.BuildAgentGroupConfiguration;
+import org.apache.continuum.configuration.BuildAgentConfiguration;
+import org.apache.continuum.release.distributed.DistributedReleaseUtil;
import org.apache.maven.continuum.installation.InstallationService;
import org.apache.maven.continuum.model.system.Installation;
import org.apache.maven.continuum.model.system.Profile;
@@ -33,7 +36,7 @@ import org.codehaus.plexus.util.StringUt
public class AbstractReleaseAction
extends ContinuumActionSupport
{
- protected Map<String, String> getEnvironments( Profile profile )
+ protected Map<String, String> getEnvironments( Profile profile, String defaultBuildagent )
{
if ( profile == null )
{
@@ -41,6 +44,35 @@ public class AbstractReleaseAction
}
Map<String, String> envVars = new HashMap<String, String>();
+
+ if ( defaultBuildagent != null && defaultBuildagent.length() > 0 )
+ {
+ // get buildagent to be used from the buildagent group for distributed builds setup
+ BuildAgentGroupConfiguration group = getContinuum().getConfiguration().getBuildAgentGroup( profile.getBuildAgentGroup() );
+
+ if ( group != null )
+ {
+ List<BuildAgentConfiguration> agents = group.getBuildAgents();
+ if ( agents != null )
+ {
+ if ( isDefaultBuildAgentEnabledInGroup( defaultBuildagent, agents ) )
+ {
+ envVars.put( DistributedReleaseUtil.KEY_BUILD_AGENT_URL, defaultBuildagent );
+ }
+ else
+ {
+ for ( BuildAgentConfiguration agent : agents )
+ {
+ if ( agent.isEnabled() == true )
+ {
+ envVars.put( DistributedReleaseUtil.KEY_BUILD_AGENT_URL, agent.getUrl() );
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
String javaHome = getJavaHomeValue( profile );
if ( !StringUtils.isEmpty( javaHome ) )
@@ -61,6 +93,25 @@ public class AbstractReleaseAction
}
return envVars;
}
+
+ private boolean isDefaultBuildAgentEnabledInGroup( String defaultBuildagent, List<BuildAgentConfiguration> agents )
+ {
+ boolean isInGroup = false;
+
+ for ( BuildAgentConfiguration agent : agents )
+ {
+ if ( agent.isEnabled() == true )
+ {
+ if ( defaultBuildagent.equals( agent.getUrl() ) )
+ {
+ isInGroup = true;
+ break;
+ }
+ }
+ }
+
+ return isInGroup;
+ }
private String getJavaHomeValue( Profile profile )
{
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/ReleaseResultAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/ReleaseResultAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/ReleaseResultAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/ReleaseResultAction.java Thu May 6 09:23:13 2010
@@ -61,6 +61,8 @@ public class ReleaseResultAction
private String projectName;
private String releaseGoal;
+
+ private String username;
public String list()
throws ContinuumException
@@ -142,6 +144,7 @@ public class ReleaseResultAction
releaseGoal = releaseResult.getReleaseGoal();
projectName = releaseResult.getProject().getName();
+ username = releaseResult.getUsername();
try
{
@@ -282,4 +285,14 @@ public class ReleaseResultAction
{
this.releaseGoal = releaseGoal;
}
+
+ public void setUsername( String username )
+ {
+ this.username = username;
+ }
+
+ public String getUsername()
+ {
+ return username;
+ }
}
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java Thu May 6 09:23:13 2010
@@ -22,6 +22,8 @@ package org.apache.continuum.web.action.
import org.apache.continuum.configuration.BuildAgentConfiguration;
import org.apache.continuum.configuration.BuildAgentGroupConfiguration;
import org.apache.continuum.builder.distributed.manager.DistributedBuildManager;
+import org.apache.continuum.web.util.AuditLog;
+import org.apache.continuum.web.util.AuditLogConstants;
import org.apache.maven.continuum.ContinuumException;
import org.apache.maven.continuum.configuration.ConfigurationService;
import org.apache.maven.continuum.model.system.Installation;
@@ -52,11 +54,6 @@ public class BuildAgentAction
{
private static final Logger logger = LoggerFactory.getLogger( BuildAgentAction.class );
- /**
- * @plexus.requirement
- */
- private DistributedBuildManager distributedBuildManager;
-
private List<BuildAgentConfiguration> buildAgents;
private BuildAgentConfiguration buildAgent;
@@ -139,7 +136,7 @@ public class BuildAgentAction
try
{
- installations = distributedBuildManager.getAvailableInstallations( buildAgent.getUrl() );
+ installations = getContinuum().getDistributedBuildManager().getAvailableInstallations( buildAgent.getUrl() );
}
catch ( ContinuumException e )
{
@@ -170,14 +167,21 @@ public class BuildAgentAction
agent.setEnabled( buildAgent.isEnabled() );
configuration.updateBuildAgent( agent );
+ configuration.store();
found = true;
}
}
}
+ AuditLog event = new AuditLog( "Build Agent URL=" + buildAgent.getUrl(), AuditLogConstants.MODIFY_BUILD_AGENT );
+ event.setCategory( AuditLogConstants.BUILD_AGENT );
+ event.setCurrentUser( getPrincipal() );
+
if ( !found )
{
configuration.addBuildAgent( buildAgent );
+ configuration.store();
+ event.setAction( AuditLogConstants.ADD_BUILD_AGENT );
}
else
{
@@ -188,7 +192,8 @@ public class BuildAgentAction
}
}
- distributedBuildManager.reload();
+ getContinuum().getDistributedBuildManager().reload();
+ event.log();
return SUCCESS;
}
@@ -201,33 +206,45 @@ public class BuildAgentAction
return CONFIRM;
}
- if ( distributedBuildManager.isBuildAgentBusy( buildAgent.getUrl() ) )
+ if ( getContinuum().getDistributedBuildManager().isBuildAgentBusy( buildAgent.getUrl() ) )
{
message = getText( "buildAgent.error.delete.busy" );
return ERROR;
}
- else
- {
- distributedBuildManager.removeAgentFromTaskQueueExecutor( buildAgent.getUrl() );
- }
ConfigurationService configuration = getContinuum().getConfiguration();
- for ( BuildAgentGroupConfiguration buildAgentGroup : configuration.getBuildAgentGroups() )
- {
- if ( configuration.containsBuildAgentUrl( buildAgent.getUrl(), buildAgentGroup ) )
+ if ( configuration.getBuildAgentGroups() != null )
+ {
+ for ( BuildAgentGroupConfiguration buildAgentGroup : configuration.getBuildAgentGroups() )
{
- message = getText( "buildAgent.error.remove.in.use" );
- return ERROR;
+ if ( configuration.containsBuildAgentUrl( buildAgent.getUrl(), buildAgentGroup ) )
+ {
+ message = getText( "buildAgent.error.remove.in.use" );
+ return ERROR;
+ }
}
}
- for ( BuildAgentConfiguration agent : configuration.getBuildAgents() )
+ if ( configuration.getBuildAgents() != null )
{
- if ( buildAgent.getUrl().equals( agent.getUrl() ) )
+ for ( BuildAgentConfiguration agent : configuration.getBuildAgents() )
{
- configuration.removeBuildAgent( agent );
- return SUCCESS;
+ if ( buildAgent.getUrl().equals( agent.getUrl() ) )
+ {
+ getContinuum().getDistributedBuildManager().removeDistributedBuildQueueOfAgent( buildAgent.getUrl() );
+ configuration.removeBuildAgent( agent );
+ configuration.store();
+
+ AuditLog event = new AuditLog( "Build Agent URL=" + agent.getUrl(), AuditLogConstants.REMOVE_BUILD_AGENT );
+ event.setCategory( AuditLogConstants.BUILD_AGENT );
+ event.setCurrentUser( getPrincipal() );
+ event.log();
+
+ getContinuum().getDistributedBuildManager().reload();
+
+ return SUCCESS;
+ }
}
}
@@ -260,6 +277,12 @@ public class BuildAgentAction
if ( buildAgentGroup.getName().equals( group.getName() ) )
{
configuration.removeBuildAgentGroup( group );
+
+ AuditLog event = new AuditLog( "Build Agent Group=" + group.getName(), AuditLogConstants.REMOVE_BUILD_AGENT_GROUP );
+ event.setCategory( AuditLogConstants.BUILD_AGENT );
+ event.setCurrentUser( getPrincipal() );
+ event.log();
+
return SUCCESS;
}
}
@@ -304,10 +327,15 @@ public class BuildAgentAction
}
}
+ AuditLog event = new AuditLog( "Build Agent Group=" + buildAgentGroup.getName(), AuditLogConstants.MODIFY_BUILD_AGENT_GROUP );
+ event.setCategory( AuditLogConstants.BUILD_AGENT );
+ event.setCurrentUser( getPrincipal() );
+
if ( !found )
{
buildAgentGroup.setBuildAgents( selectedbuildAgents );
configuration.addBuildAgentGroup( buildAgentGroup );
+ event.setAction( AuditLogConstants.ADD_BUILD_AGENT_GROUP );
}
else
// found
@@ -324,7 +352,8 @@ public class BuildAgentAction
}
}
- distributedBuildManager.reload();
+ getContinuum().getDistributedBuildManager().reload();
+ event.log();
return SUCCESS;
}
Propchange: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu May 6 09:23:13 2010
@@ -1,2 +1,2 @@
-/continuum/branches/continuum-1.3.x/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java:766106,766120-766121,766641,766645,766669,766977,767397,767792,767796,768222
+/continuum/branches/continuum-1.3.x/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java:760767-900271,915354,915760,915848-915864,916073-916074
/continuum/trunk/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/BuildAgentAction.java:713270-724659,724671-733412
Modified: continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/LocalRepositoryAction.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/LocalRepositoryAction.java?rev=941625&r1=941624&r2=941625&view=diff
==============================================================================
--- continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/LocalRepositoryAction.java (original)
+++ continuum/branches/continuum-flat-multi-module/continuum-webapp/src/main/java/org/apache/continuum/web/action/admin/LocalRepositoryAction.java Thu May 6 09:23:13 2010
@@ -30,6 +30,8 @@ import org.apache.continuum.purge.Contin
import org.apache.continuum.purge.PurgeConfigurationService;
import org.apache.continuum.repository.RepositoryService;
import org.apache.continuum.taskqueue.manager.TaskQueueManager;
+import org.apache.continuum.web.util.AuditLog;
+import org.apache.continuum.web.util.AuditLogConstants;
import org.apache.maven.continuum.model.project.ProjectGroup;
import org.apache.maven.continuum.security.ContinuumRoleConstants;
import org.apache.maven.continuum.web.action.ContinuumConfirmAction;
@@ -68,9 +70,7 @@ public class LocalRepositoryAction
private List<String> layouts;
private Map<String, Boolean> defaultPurgeMap;
-
- private String message;
-
+
/**
* @plexus.requirement
*/
@@ -112,13 +112,6 @@ public class LocalRepositoryAction
public String list()
throws Exception
{
- String errorMessage = ServletActionContext.getRequest().getParameter( "errorMessage" );
-
- if ( errorMessage != null )
- {
- addActionError( getText( errorMessage ) );
- }
-
repositories = repositoryService.getAllLocalRepositories();
defaultPurgeMap = new HashMap<String, Boolean>();
@@ -150,12 +143,12 @@ public class LocalRepositoryAction
{
if ( repository.getId() != repo.getId() )
{
- if ( repository.getName().equals( repo.getName() ) )
+ if ( repository.getName().trim().equals( repo.getName() ) )
{
addActionError( getText( "repository.error.name.unique" ) );
}
- if ( repository.getLocation().equals( repo.getLocation() ) )
+ if ( repository.getLocation().trim().equals( repo.getLocation() ) )
{
addActionError( getText( "repository.error.location.unique" ) );
}
@@ -177,6 +170,10 @@ public class LocalRepositoryAction
return INPUT;
}
+ // trim repository name and location before saving
+ repository.setName( repository.getName().trim() );
+ repository.setLocation( repository.getLocation().trim() );
+
if ( repository.getId() == 0 )
{
repository = repositoryService.addLocalRepository( repository );
@@ -209,29 +206,31 @@ public class LocalRepositoryAction
throws Exception
{
TaskQueueManager taskQueueManager = getContinuum().getTaskQueueManager();
+
+ repository = repositoryService.getLocalRepository( repository.getId() );
+
if ( taskQueueManager.isRepositoryInUse( repository.getId() ) )
{
- message = "repository.error.remove.in.use";
- return ERROR;
+ addActionError( getText( "repository.error.remove.in.use", "Unable to remove local repository because it is in use" ) );
}
-
- repository = repositoryService.getLocalRepository( repository.getId() );
-
+
if ( repository.getName().equals( "DEFAULT" ) )
{
- message = "repository.error.remove.default";
- return ERROR;
- }
-
- if ( confirmed )
- {
- repositoryService.removeLocalRepository( repository.getId() );
+ addActionError( getText( "repository.error.remove.default", "Unable to remove default local repository" ) );
}
- else
+
+ if ( !hasActionErrors() )
{
- return CONFIRM;
+ if ( confirmed )
+ {
+ repositoryService.removeLocalRepository( repository.getId() );
+ }
+ else
+ {
+ return CONFIRM;
+ }
}
-
+
return SUCCESS;
}
@@ -244,18 +243,24 @@ public class LocalRepositoryAction
// check if repository is in use
if ( taskQueueManager.isRepositoryInUse( repository.getId() ) )
{
- message = "repository.error.purge.in.use";
- return ERROR;
+ addActionError( getText( "repository.error.purge.in.use", "Unable to purge repository because it is in use" ) );
}
-
- // get default purge configuration for repository
- RepositoryPurgeConfiguration purgeConfig = purgeConfigService.getDefaultPurgeConfigurationForRepository( repository.getId() );
-
- if ( purgeConfig != null )
+
+ if ( !hasActionErrors() )
{
- purgeManager.purgeRepository( purgeConfig );
- }
+ // get default purge configuration for repository
+ RepositoryPurgeConfiguration purgeConfig = purgeConfigService.getDefaultPurgeConfigurationForRepository( repository.getId() );
+ if ( purgeConfig != null )
+ {
+ purgeManager.purgeRepository( purgeConfig );
+
+ AuditLog event = new AuditLog( "Repository id=" + repository.getId(), AuditLogConstants.PURGE_LOCAL_REPOSITORY );
+ event.setCategory( AuditLogConstants.LOCAL_REPOSITORY );
+ event.setCurrentUser( getPrincipal() );
+ event.log();
+ }
+ }
return SUCCESS;
}
@@ -323,17 +328,7 @@ public class LocalRepositoryAction
{
this.defaultPurgeMap = defaultPurgeMap;
}
-
- public String getMessage()
- {
- return this.message;
- }
-
- public void setMessage( String message )
- {
- this.message = message;
- }
-
+
private void createDefaultPurgeConfiguration()
throws Exception
{