Index: continuum-webapp-test/src/test/testng/config/testng.xml =================================================================== --- continuum-webapp-test/src/test/testng/config/testng.xml (revision 785944) +++ continuum-webapp-test/src/test/testng/config/testng.xml (working copy) @@ -55,6 +55,7 @@ + Index: continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/BuildAgentsTest.java =================================================================== --- continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/BuildAgentsTest.java (revision 0) +++ continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/BuildAgentsTest.java (revision 0) @@ -0,0 +1,153 @@ +package org.apache.continuum.web.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +//import org.apache.continuum.web.test.parent.AbstractBuildQueueTest; +import org.testng.annotations.Test; +import org.apache.continuum.web.test.parent.AbstractBuildAgentsTest; + + +@Test( groups = { "agent" }, dependsOnMethods = { "testDeleteBuildDefinitionTemplate" } ) + public class BuildAgentsTest + extends AbstractBuildAgentsTest + { + + public void testAddBuildAgent() + { + String BUILD_AGENT_NAME = getProperty( "BUILD_AGENT_NAME" ); + String BUILD_AGENT_DESCRIPTION = getProperty( "BUILD_AGENT_DESCRIPTION" ); + String BUILD_AGENT_NAME2 = getProperty( "BUILD_AGENT_NAME2" ); + String BUILD_AGENT_DESCRIPTION2 = getProperty( "BUILD_AGENT_DESCRIPTION2" ); + String BUILD_AGENT_NAME3 = getProperty( "BUILD_AGENT_NAME3" ); + String BUILD_AGENT_DESCRIPTION3 = getProperty( "BUILD_AGENT_DESCRIPTION3" ); + + enableDistributedBuilds(); + goToAddBuildAgent(); + addBuildAgent( BUILD_AGENT_NAME, BUILD_AGENT_DESCRIPTION, true ) ; + goToAddBuildAgent(); + addBuildAgent( BUILD_AGENT_NAME2, BUILD_AGENT_DESCRIPTION2, true ) ; + goToAddBuildAgent(); + addBuildAgent( BUILD_AGENT_NAME3, BUILD_AGENT_DESCRIPTION3, true ) ; + } + + @Test( dependsOnMethods = { "testEditBuildAgent" } ) + public void testAddAnExistingBuildAgent() + { + String BUILD_AGENT_NAME = getProperty( "BUILD_AGENT_NAME" ); + String BUILD_AGENT_DESCRIPTION = getProperty( "BUILD_AGENT_DESCRIPTION" ); + + goToAddBuildAgent(); + addBuildAgent( BUILD_AGENT_NAME, BUILD_AGENT_DESCRIPTION, false ) ; + assertTextPresent( "Build agent already exists" ); + } + + @Test( dependsOnMethods = { "testAddBuildAgent" } ) + public void testEditBuildAgent() + + { + String BUILD_AGENT_NAME = getProperty( "BUILD_AGENT_NAME" ); + String BUILD_AGENT_DESCRIPTION = getProperty( "BUILD_AGENT_DESCRIPTION" ); + String new_agentDescription = "new_agentDescription"; + + goToEditBuildAgent( BUILD_AGENT_NAME, BUILD_AGENT_DESCRIPTION); + addEditBuildAgent( BUILD_AGENT_NAME, new_agentDescription ); + goToEditBuildAgent( BUILD_AGENT_NAME, new_agentDescription); + addEditBuildAgent( BUILD_AGENT_NAME, BUILD_AGENT_DESCRIPTION ); + + } + + @Test( dependsOnMethods = { "testAddAnExistingBuildAgent" } ) + public void testDeleteBuildAgent() + + { + goToBuildAgentPage(); + String BUILD_AGENT_NAME3 = getProperty( "BUILD_AGENT_NAME3" ); + removeBuildAgent( BUILD_AGENT_NAME3 ); + assertTextNotPresent( BUILD_AGENT_NAME3 ); + } + + @Test( dependsOnMethods = { "testDeleteBuildAgent" } ) + public void testAddEmptyBuildAgent() + { + String BUILD_AGENT_DESCRIPTION = getProperty( "BUILD_AGENT_DESCRIPTION" ); + + goToAddBuildAgent(); + addBuildAgent( "", BUILD_AGENT_DESCRIPTION, false ) ; + assertTextPresent( "Build agent url is required." ); + } + +//TESTS FOR BUILD AGENT GROUPS + + @Test( dependsOnMethods = { "testAddBuildAgent" } ) + public void testAddBuildAgentGroup() + throws Exception + { + String BUILD_AGENT_GROUPNAME = getProperty( "BUILD_AGENT_GROUPNAME" ); + + goToAddBuildAgentGroup(); + addEditBuildAgentGroup( BUILD_AGENT_GROUPNAME, new String[] { "Agent_url_name", "Second_Agent" }, new String[] {}, true ); + + } + + @Test( dependsOnMethods = { "testAddBuildAgentGroup" } ) + public void testEditBuildAgentGroup() + throws Exception + { + String BUILD_AGENT_GROUPNAME = getProperty( "BUILD_AGENT_GROUPNAME" ); + String newName = "new_agentgroupname"; + goToEditBuildAgentGroup( BUILD_AGENT_GROUPNAME, new String[] { "Agent_url_name", "Second_Agent" } ); + addEditBuildAgentGroup( newName, new String[] {}, + new String[] { "Second_Agent" }, true ); + goToEditBuildAgentGroup( newName, new String[] { "Agent_url_name" } ); + addEditBuildAgentGroup( BUILD_AGENT_GROUPNAME, new String[] { "Second_Agent" }, + new String[] {}, true ); + } + + @Test( dependsOnMethods = { "testEditBuildAgentGroup" } ) + public void testAddAnExistingBuildAgentGroup() + throws Exception + { + String BUILD_AGENT_GROUPNAME = getProperty( "BUILD_AGENT_GROUPNAME" ); + + goToAddBuildAgentGroup(); + addEditBuildAgentGroup( BUILD_AGENT_GROUPNAME, new String[] { "Agent_url_name", "Second_Agent" }, new String[] {}, false ); + assertTextPresent( "Build agent group already exists." ); + + } + + @Test( dependsOnMethods = { "testAddAnExistingBuildAgentGroup" } ) + public void testAddEmptyBuildAgentGroupName() + throws Exception + { + + goToAddBuildAgentGroup(); + addEditBuildAgentGroup( "", new String[] {}, new String[] {}, false ); + assertTextPresent( "Build agent group name required." ); + } + + @Test( dependsOnMethods = { "testAddEmptyBuildAgentGroupName" } ) + public void testDeleteBuildAgentGroup() + { + String BUILD_AGENT_GROUPNAME = getProperty( "BUILD_AGENT_GROUPNAME" ); + removeBuildAgentGroup( BUILD_AGENT_GROUPNAME ); + } + + +} Index: continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractBuildAgentsTest.java =================================================================== --- continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractBuildAgentsTest.java (revision 0) +++ continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/parent/AbstractBuildAgentsTest.java (revision 0) @@ -0,0 +1,219 @@ +package org.apache.continuum.web.test.parent; + +//import org.testng.Assert; +import org.apache.continuum.web.test.ConfigurationTest; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +public abstract class AbstractBuildAgentsTest + extends AbstractContinuumTest +{ + 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 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" ); + + } + + public void goToAddBuildAgent() + { + goToBuildAgentPage(); + assertBuildAgentPage(); + clickAndWait("editBuildAgent_0"); //add button + assertAddEditBuildAgentPage(); + } + + public void assertAddEditBuildAgentPage() + { + assertPage( "Continuum - Add/Edit Build Agent" ); + assertTextPresent( "Add/Edit Build Agent" ); + assertTextPresent( "Build Agent URL*:" ); + assertTextPresent( "Description:" ); + assertTextPresent( "Enabled" ); + assertElementPresent( "saveBuildAgent_buildAgent_url" ); + assertElementPresent( "saveBuildAgent_buildAgent_description"); + assertButtonWithValuePresent( "Save" ); + assertButtonWithValuePresent( "Cancel" ); + } + + public void removeBuildAgent( String agentName ) + { + clickLinkWithXPath( "(//a[contains(@href,'deleteBuildAgent.action') and contains(@href, '" + agentName + "')])//img" ); + assertPage("Continuum - Delete Build Agent"); + assertTextPresent( "Delete Build Agent" ); + assertTextPresent( "Are you sure you want to delete build agent " + agentName + " ?" ); + assertButtonWithValuePresent( "Delete" ); + assertButtonWithValuePresent( "Cancel" ); + clickButtonWithValue( "Delete" ); + assertBuildAgentPage(); + } + + public void addBuildAgent( String agentURL, String description, boolean success ) + { + setFieldValue( "saveBuildAgent_buildAgent_url", agentURL ); + setFieldValue("saveBuildAgent_buildAgent_description", description ); + checkField("saveBuildAgent_buildAgent_enabled"); + submit(); + if ( success ) + { + assertBuildAgentPage(); + assertElementPresent( "link=" + agentURL ); + + } + else + { + assertAddEditBuildAgentPage(); + } + + } + + public void goToEditBuildAgent( String name, String description ) + { + goToBuildAgentPage(); + clickImgWithAlt( "Edit" ); + assertAddEditBuildAgentPage(); + assertFieldValue( name, "saveBuildAgent_buildAgent_url" ); + assertFieldValue( description, "saveBuildAgent_buildAgent_description" ); + + } + + public void addEditBuildAgent( String agentName, String newDesc ) + { + assertFieldValue( agentName, "saveBuildAgent_buildAgent_url" ); + setFieldValue( "saveBuildAgent_buildAgent_description", newDesc ); + submit(); + assertBuildAgentPage(); + assertTextPresent( newDesc ); + + } + + + public void goToAddBuildAgentGroup() + { + goToBuildAgentPage(); + clickAndWait("editBuildAgentGroup_0"); //add button + String[] options = + new String[] { "--- Available Build Agents ---", "Agent_url_name", "Second_Agent" }; + assertAddEditBuildAgentGroupPage( options, null ); + } + + + public void addEditBuildAgentGroup( String name, String[] addBuildAgents, String[] removeBuildAgents, + boolean success ) throws Exception + { + setFieldValue( "saveBuildAgentGroup_buildAgentGroup_name", name ); + if ( addBuildAgents != null && addBuildAgents.length > 0 ) + { + for ( String ba : addBuildAgents ) + { + selectValue( "buildAgentIds", ba ); + clickButtonWithValue( "->", false ); + } + } + if ( removeBuildAgents != null && removeBuildAgents.length > 0 ) + { + for ( String ba : removeBuildAgents ) + { + selectValue( "selectedBuildAgentIds", ba ); + clickButtonWithValue( "<-", false ); + } + } + submit(); + if ( success ) + { + assertBuildAgentPage(); + } + else + { + assertAddEditBuildAgentGroupPage( null, null ); + } + + + } + + public void assertAddEditBuildAgentGroupPage( String[] availableBuildAgents, String[] usedBuildAgents ) + { + assertPage( "Continuum - Add/Edit Build Agent Group" ); + assertTextPresent( "Add/Edit Build Agent Group" ); + assertTextPresent( "Name*:" ); + assertTextPresent( "Configure the used Build Agents:" ); + assertElementPresent( "buildAgentGroup.name" ); + if ( availableBuildAgents != null && availableBuildAgents.length > 0 ) + { + assertOptionPresent( "buildAgentIds", availableBuildAgents ); + } + if ( usedBuildAgents != null && usedBuildAgents.length > 0 ) + { + assertOptionPresent( "selectedBuildAgentIds", usedBuildAgents ); + } + + assertButtonWithValuePresent( "Save" ); + assertButtonWithValuePresent( "Cancel" ); + } + + public void goToEditBuildAgentGroup( String name, String[] buildAgents ) + { + goToBuildAgentPage(); + String xPath = "//preceding::td[text()='" + name + "']//following::img[@alt='Edit']"; + clickLinkWithXPath( xPath ); + assertAddEditBuildAgentGroupPage( null, buildAgents ); + assertFieldValue( name, "buildAgentGroup.name" ); + } + + + public void removeBuildAgentGroup( String name ) + { + goToBuildAgentPage(); + clickLinkWithXPath( "(//a[contains(@href,'deleteBuildAgentGroup.action') and contains(@href, '" + name + "')])//img" ); + assertPage("Continuum - Delete Build Agent Group"); + assertTextPresent( "Delete Build Agent" ); + assertTextPresent( "Are you sure you want to delete build agent group " + name + " ?" ); + assertButtonWithValuePresent( "Delete" ); + assertButtonWithValuePresent( "Cancel" ); + clickButtonWithValue( "Delete" ); + assertBuildAgentPage(); + } + + +} Index: continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/QueueTest.java =================================================================== --- continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/QueueTest.java (revision 785944) +++ continuum-webapp-test/src/test/testng/org/apache/continuum/web/test/QueueTest.java (working copy) @@ -21,7 +21,9 @@ import org.apache.continuum.web.test.parent.AbstractBuildQueueTest; import org.testng.annotations.Test; +import org.apache.continuum.web.test.ScheduleTest; + /** * @author José Morales Martínez * @version $Id$ @@ -32,15 +34,61 @@ public class QueueTest extends AbstractBuildQueueTest { - + public void testAddBuildQueue() { setMaxBuildQueue( 2 ); String BUILD_QUEUE_NAME = getProperty( "BUILD_QUEUE_NAME" ); addBuildQueue( BUILD_QUEUE_NAME, true ); } - - @Test( dependsOnMethods = { "testAddBuildQueue" } ) + + @Test( dependsOnMethods = { "testAddBuildQueue" } ) //"testDeleteBuildQueue" } ) + public void testQueuePageWithoutBuild() + { + clickAndWait( "link=Queues" ); + assertPage( "Continuum - Build Queue" ); + assertTextPresent( "Nothing is building" ); + assertTextNotPresent( "Project Name* Build Definition" ); + assertTextPresent( "Current Build" ); + assertTextPresent( "Build Queue" ); + assertTextPresent( "Current Checkout" ); + assertTextPresent( "Checkout Queue " ); + assertTextPresent( "Current Prepare Build" ); + assertTextPresent( "Prepare Build Queue" ); + + } + + @Test( dependsOnMethods = { "testAddBuildQueue", "testAddSchedule" } ) + public void testAddBuildQueueToSchedule() + { + ScheduleTest sched = new ScheduleTest(); + + String SCHEDULE_NAME = getProperty( "SCHEDULE_NAME" ); + String SCHEDULE_DESCRIPTION = getProperty( "SCHEDULE_DESCRIPTION" ); + String SCHEDULE_EXPR_SECOND = getProperty( "SCHEDULE_EXPR_SECOND" ); + String SCHEDULE_EXPR_MINUTE = getProperty( "SCHEDULE_EXPR_MINUTE" ); + String SCHEDULE_EXPR_HOUR = getProperty( "SCHEDULE_EXPR_HOUR" ); + String SCHEDULE_EXPR_DAY_MONTH = getProperty( "SCHEDULE_EXPR_DAY_MONTH" ); + String SCHEDULE_EXPR_MONTH = getProperty( "SCHEDULE_EXPR_MONTH" ); + String SCHEDULE_EXPR_DAY_WEEK = getProperty( "SCHEDULE_EXPR_DAY_WEEK" ); + String SCHEDULE_EXPR_YEAR = getProperty( "SCHEDULE_EXPR_YEAR" ); + String SCHEDULE_MAX_TIME = getProperty( "SCHEDULE_MAX_TIME" ); + String SCHEDULE_PERIOD = getProperty( "SCHEDULE_PERIOD" ); + + String BUILD_QUEUE_NAME = getProperty( "BUILD_QUEUE_NAME" ); + + + sched.goToEditSchedule( SCHEDULE_NAME, SCHEDULE_DESCRIPTION, SCHEDULE_EXPR_SECOND, SCHEDULE_EXPR_MINUTE, + SCHEDULE_EXPR_HOUR, SCHEDULE_EXPR_DAY_MONTH, SCHEDULE_EXPR_MONTH, SCHEDULE_EXPR_DAY_WEEK, + SCHEDULE_EXPR_YEAR, SCHEDULE_MAX_TIME, SCHEDULE_PERIOD ); + getSelenium().removeSelection("saveSchedule_availableBuildQueues", "label=DEFAULT_BUILD_QUEUE"); + getSelenium().addSelection("saveSchedule_availableBuildQueues", "label="+BUILD_QUEUE_NAME); + getSelenium().click("//input[@value='->']"); + submit(); + + } + + @Test( dependsOnMethods = { "testAddBuildQueue" } ) public void testAddNotAllowedBuildQueue() { setMaxBuildQueue( 1 ); @@ -57,8 +105,8 @@ addBuildQueue( BUILD_QUEUE_NAME, false ); assertTextPresent( "Build queue name already exists." ); } - - //@Test( dependsOnMethods = { "testAddAlreadyExistBuildQueue" } ) + + @Test( dependsOnMethods = { "testAddAlreadyExistBuildQueue" } ) public void testAddEmptyBuildQueue() { setMaxBuildQueue( 3 ); @@ -66,7 +114,7 @@ assertTextPresent( "You must define a name" ); } - @Test( dependsOnMethods = { "testAddBuildQueue", "testAddAlreadyExistBuildQueue" } ) + @Test( dependsOnMethods = { "testAddBuildQueueToSchedule" } ) public void testDeleteBuildQueue() { goToBuildQueuePage(); @@ -74,18 +122,18 @@ removeBuildQueue( BUILD_QUEUE_NAME ); assertTextNotPresent( BUILD_QUEUE_NAME ); } - - + + @Test( dependsOnMethods = { "testAddMavenTwoProject" } ) public void testQueuePageWithProjectCurrentlyBuilding() throws Exception - { + { //build a project String M2_PROJ_GRP_NAME = getProperty( "M2_PROJ_GRP_NAME" ); String M2_PROJ_GRP_ID = getProperty( "M2_PROJ_GRP_ID" ); String M2_PROJ_GRP_DESCRIPTION = getProperty( "M2_PROJ_GRP_DESCRIPTION" ); buildProjectForQueuePageTest( M2_PROJ_GRP_NAME, M2_PROJ_GRP_ID, M2_PROJ_GRP_DESCRIPTION, M2_PROJ_GRP_NAME ); - + //check queue page while building clickAndWait( "link=Queues" ); assertPage( "Continuum - Build Queue" ); @@ -103,21 +151,5 @@ waitForElementPresent( "//img[@alt='Success']" ); Thread.sleep( 10000 ); } - - //@Test( dependsOnMethods = { "testDeleteBuildQueue" } ) - public void testQueuePageWithoutBuild() - { - clickAndWait( "link=Queues" ); - assertPage( "Continuum - Build Queue" ); - assertTextPresent( "Nothing is building" ); - assertTextNotPresent( "Project Name* Build Definition" ); - assertTextPresent( "Current Build" ); - assertTextPresent( "Build Queue" ); - assertTextPresent( "Current Checkout" ); - assertTextPresent( "Checkout Queue " ); - assertTextPresent( "Current Prepare Build" ); - assertTextPresent( "Prepare Build Queue" ); - - } - -} + + } Index: continuum-webapp-test/src/test/resources/testng.properties =================================================================== --- continuum-webapp-test/src/test/resources/testng.properties (revision 785944) +++ continuum-webapp-test/src/test/resources/testng.properties (working copy) @@ -234,3 +234,14 @@ # Project User PROJECTUSER_DEFAULTPROJECTGROUP_USERNAME=projectuser PROJECTUSER_DEFAULTPROJECTGROUP_FULLNAME=Project User - Default Project Group + +######################## +# buildAgents group +######################## +BUILD_AGENT_NAME =Agent_url_name +BUILD_AGENT_DESCRIPTION =Agent_description +BUILD_AGENT_NAME2 =Second_Agent +BUILD_AGENT_DESCRIPTION2 =Agent_description2 +BUILD_AGENT_NAME3 =Third_Agent +BUILD_AGENT_DESCRIPTION3 =Agent_description3 +BUILD_AGENT_GROUPNAME =agent_groupname