git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1225381 13f79535-47bb-0310-9956-ffa450edef68tags/archiva-1.4-M3
@@ -25,6 +25,11 @@ $(function() { | |||
loadAndParseFile("restServices/redbackServices/utilServices/getBundleResources", {cache:false, mode: 'map',encoding:'utf-8'}); | |||
// load browser locale | |||
var browserLang = $.i18n.browserLang(); | |||
var requestLang = $.urlParam('request_lang'); | |||
if (requestLang) { | |||
browserLang=requestLang; | |||
} | |||
$.log("use browserLang:"+browserLang); | |||
loadAndParseFile("restServices/redbackServices/utilServices/getBundleResources?locale="+browserLang, {cache:false, mode: 'map',encoding:'utf-8'}); | |||
// -- archiva | |||
// load default |
@@ -6,10 +6,10 @@ | |||
<h4 class="brand"><a href="index.html">Archiva</a></h4> | |||
<ul class="nav secondary-nav"> | |||
<li id="create-admin-link" style="display: none"> | |||
<a href="#" onclick="adminCreateBox();">${$.i18n.prop('create.admin.page.link')}</a> | |||
<a href="#" onclick="adminCreateBox();" id="create-admin-link-a">${$.i18n.prop('create.admin.page.link')}</a> | |||
</li> | |||
<li id="login-link" style="display: none"> | |||
<a href="#" onclick="loginBox();"> | |||
<a href="#" onclick="loginBox();" id="login-link-a"> | |||
<span class="label success">${login}</span> | |||
</a> | |||
</li> | |||
@@ -17,7 +17,7 @@ | |||
<a href="#" onclick="editUserDetailsBox();">${$.i18n.prop('edit.details')}</a> | |||
</li> | |||
<li id="logout-link" style="display: none"> | |||
<a href="#" onclick="logout();"> | |||
<a href="#" onclick="logout();" id="logout-link-a"> | |||
<span class="label important">${logout}</span> | |||
</a> | |||
</li> |
@@ -110,7 +110,14 @@ $(function() { | |||
var created = JSON.parse(result); | |||
if (created == true) { | |||
displaySuccessMessage("admin user created"); | |||
loginCall(currentAdminUser.username(), currentAdminUser.password(),function(){screenChange();checkCreateAdminLink();checkSecurityLinks();}); | |||
var onSuccessCall=function(){ | |||
$.log("onSuccessCall after admin creation"); | |||
reccordLoginCookie(currentAdminUser); | |||
screenChange(); | |||
checkCreateAdminLink(); | |||
checkSecurityLinks(); | |||
} | |||
loginCall(currentAdminUser.username(), currentAdminUser.password(),onSuccessCall); | |||
return this; | |||
} else { | |||
displayErrorMessage("admin user not created"); |
@@ -0,0 +1,34 @@ | |||
ReadMe | |||
---------- | |||
Run selenium tests in src/test/testng with Maven and TestNG | |||
- mvn clean install | |||
Run Selenium tests in src/test/testng against an existing Archiva instance | |||
- Start Archiva | |||
- Configure admin user for archiva (match values in src/test/resources/testng.properties ) | |||
- modify src/test/resources/testng.properties as needed | |||
- mvn clean install -Dcontainer-existing | |||
The Cargo installations are stored outside of target to avoid multiple downloads. | |||
To remove the Cargo installations and re-download them next run, use: | |||
- mvn -Pclean-cargo clean | |||
Internet Explorer and Safari users must disable their popup blockers. Using *iexplore as | |||
the browser requires running as an Administrator on Windows 7/Vista, or alternatively you | |||
can use *iexploreproxy. | |||
IMPORTANT: | |||
When writing Selenium tests for artifact upload, please avoid using the "test" syllable/word for | |||
the groupId or artifactId (ex. test.group:testAddArtifactValidValues:1.0) as this is used for the | |||
search tests. The tests explicitly assert the returned number of hits for searching an artifact with | |||
a groupId or artifactId containing the word "test", so if you upload or add a new artifact which has | |||
the term "test", the number of hits will be different and the search tests will fail. | |||
See org.apache.archiva.web.test.SearchTest.java or read the related thread discussion at | |||
http://old.nabble.com/Selenium-tests-failure-in-trunk-td27830786.html | |||
@@ -0,0 +1,614 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
~ 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. | |||
--> | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<parent> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-web</artifactId> | |||
<version>1.4-M3-SNAPSHOT</version> | |||
</parent> | |||
<artifactId>archiva-webapp-test-js</artifactId> | |||
<packaging>pom</packaging> | |||
<name>Archiva Web :: Javascript Application Tests</name> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.testng</groupId> | |||
<artifactId>testng</artifactId> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>commons-io</groupId> | |||
<artifactId>commons-io</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.codehaus.plexus</groupId> | |||
<artifactId>plexus-command-line</artifactId> | |||
<exclusions> | |||
<exclusion> | |||
<artifactId>plexus-container-default</artifactId> | |||
<groupId>org.codehaus.plexus</groupId> | |||
</exclusion> | |||
<exclusion> | |||
<artifactId>plexus-component-api</artifactId> | |||
<groupId>org.codehaus.plexus</groupId> | |||
</exclusion> | |||
</exclusions> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-webapp-js</artifactId> | |||
<type>war</type> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.codehaus.plexus</groupId> | |||
<artifactId>plexus-utils</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.codehaus.plexus</groupId> | |||
<artifactId>plexus-slf4j-logging</artifactId> | |||
<exclusions> | |||
<exclusion> | |||
<artifactId>plexus-component-api</artifactId> | |||
<groupId>org.codehaus.plexus</groupId> | |||
</exclusion> | |||
</exclusions> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.seleniumhq.selenium.client-drivers</groupId> | |||
<artifactId>selenium-java-client-driver</artifactId> | |||
<scope>test</scope> | |||
<exclusions> | |||
<exclusion> | |||
<groupId>commons-logging</groupId> | |||
<artifactId>commons-logging</artifactId> | |||
</exclusion> | |||
</exclusions> | |||
</dependency> | |||
<!-- Dependency for MavenConnectionTest --> | |||
<dependency> | |||
<groupId>jdom</groupId> | |||
<artifactId>jdom</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>jaxen</groupId> | |||
<artifactId>jaxen</artifactId> | |||
</dependency> | |||
<!-- Dependencies below are provided by the appserver --> | |||
<dependency> | |||
<groupId>org.apache.derby</groupId> | |||
<artifactId>derby</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>javax.mail</groupId> | |||
<artifactId>mail</artifactId> | |||
</dependency> | |||
<dependency> | |||
<groupId>javax.activation</groupId> | |||
<artifactId>activation</artifactId> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
<testSourceDirectory>src/test/testng</testSourceDirectory> | |||
<testResources> | |||
<testResource> | |||
<directory>src/test/resources</directory> | |||
<filtering>true</filtering> | |||
<includes> | |||
<include>**/*</include> | |||
</includes> | |||
</testResource> | |||
</testResources> | |||
<pluginManagement> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.codehaus.mojo</groupId> | |||
<artifactId>selenium-maven-plugin</artifactId> | |||
<version>${seleniumPluginVersion}</version> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.seleniumhq.selenium</groupId> | |||
<artifactId>selenium-server</artifactId> | |||
<version>${selenium-server.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.seleniumhq.selenium</groupId> | |||
<artifactId>selenium-remote-driver</artifactId> | |||
<version>${selenium-server.version}</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.seleniumhq.selenium</groupId> | |||
<artifactId>selenium-api</artifactId> | |||
<version>${selenium-server.version}</version> | |||
</dependency> | |||
</dependencies> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.rat</groupId> | |||
<artifactId>apache-rat-plugin</artifactId> | |||
<configuration> | |||
<excludes> | |||
<exclude>src/test/resources/appserver-base/**</exclude> | |||
<exclude>src/test/resources/repository/**</exclude> | |||
<exclude>src/test/resources/local-repo/**</exclude> | |||
<exclude>src/test/resources/projects/**</exclude> | |||
<exclude>src/test/resources/snapshots/**</exclude> | |||
<exclude>src/test/tomcat*/conf/catalina.policy</exclude> | |||
</excludes> | |||
</configuration> | |||
</plugin> | |||
</plugins> | |||
</pluginManagement> | |||
<plugins> | |||
<plugin> | |||
<artifactId>maven-resources-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<goals> | |||
<goal>testResources</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-compiler-plugin</artifactId> | |||
<configuration> | |||
<source>1.5</source> | |||
<target>1.5</target> | |||
<verbose>true</verbose> | |||
</configuration> | |||
<executions> | |||
<execution> | |||
<goals> | |||
<goal>testCompile</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-surefire-plugin</artifactId> | |||
<configuration> | |||
<redirectTestOutputToFile>false</redirectTestOutputToFile> | |||
<properties> | |||
<!-- | |||
Use this instead of suiteXmlFiles so that we can add the exclusion, as it is only accepted without suiteXmlFiles | |||
--> | |||
<property> | |||
<name>listener</name> | |||
<value>org.apache.archiva.web.test.listener.CaptureScreenShotsListener</value> | |||
</property> | |||
<property> | |||
<name>excludegroups</name> | |||
<!-- Exclude on all browsers but Firefox, as it is the only one that Selenium supports file uploads on --> | |||
<value>${excluded.groups}</value> | |||
</property> | |||
</properties> | |||
<runOrder>alphabetical</runOrder> | |||
</configuration> | |||
<executions> | |||
<execution> | |||
<id>integration-tests</id> | |||
<phase>integration-test</phase> | |||
<goals> | |||
<goal>test</goal> | |||
</goals> | |||
<configuration> | |||
<systemProperties> | |||
<property> | |||
<name>browser</name> | |||
<value>${selenium.browser}</value> | |||
</property> | |||
<property> | |||
<name>baseUrl</name> | |||
<value>${baseUrl}</value> | |||
</property> | |||
<property> | |||
<name>maxWaitTimeInMs</name> | |||
<value>${maxWaitTimeInMs}</value> | |||
</property> | |||
</systemProperties> | |||
</configuration> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
<profiles> | |||
<profile> | |||
<id>create-container</id> | |||
<activation> | |||
<property> | |||
<name>!container</name> | |||
</property> | |||
</activation> | |||
<build> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-dependency-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<id>unzip-archiva-webapp</id> | |||
<phase>generate-resources</phase> | |||
<goals> | |||
<goal>unpack</goal> | |||
</goals> | |||
<configuration> | |||
<artifactItems> | |||
<artifactItem> | |||
<groupId>${project.groupId}</groupId> | |||
<artifactId>archiva-webapp-js</artifactId> | |||
<version>${project.version}</version> | |||
<type>war</type> | |||
</artifactItem> | |||
</artifactItems> | |||
<outputDirectory>${project.build.directory}/${container.name}conf/webapps/archiva</outputDirectory> | |||
<overWriteSnapshots>true</overWriteSnapshots> | |||
</configuration> | |||
</execution> | |||
<execution> | |||
<id>prepare-provided-dependencies</id> | |||
<phase>generate-resources</phase> | |||
<goals> | |||
<goal>copy-dependencies</goal> | |||
</goals> | |||
<configuration> | |||
<!-- TODO: this sometimes copies everything, causing problems with the server start up --> | |||
<includeGroupIds>org.apache.derby,javax.mail,javax.activation</includeGroupIds> | |||
<overWriteReleases>false</overWriteReleases> | |||
<overWriteSnapshots>true</overWriteSnapshots> | |||
<excludeTransitive>false</excludeTransitive> | |||
<outputDirectory>${project.build.directory}/providedDependencies</outputDirectory> | |||
</configuration> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-antrun-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<phase>generate-resources</phase> | |||
<goals> | |||
<goal>run</goal> | |||
</goals> | |||
<configuration> | |||
<tasks> | |||
<copy todir="${project.build.directory}/appserver-base"> | |||
<fileset dir="src/test/resources/appserver-base"/> | |||
</copy> | |||
<copy todir="${project.build.directory}/repository"> | |||
<fileset dir="src/test/resources/repository"/> | |||
</copy> | |||
<copy todir="${project.build.directory}/index"> | |||
<fileset dir="src/test/resources/index"/> | |||
</copy> | |||
<copy todir="${project.build.directory}/snapshots"> | |||
<fileset dir="src/test/resources/snapshots"/> | |||
</copy> | |||
<copy todir="${project.build.directory}/projects"> | |||
<fileset dir="src/test/resources/projects"/> | |||
</copy> | |||
<copy todir="${project.build.directory}/local-repo"> | |||
<fileset dir="src/test/resources/local-repo"/> | |||
</copy> | |||
</tasks> | |||
</configuration> | |||
</execution> | |||
<execution> | |||
<id>copy-container-conf</id> | |||
<phase>package</phase> | |||
<configuration> | |||
<tasks> | |||
<copy todir="${project.build.directory}/${container.name}conf"> | |||
<fileset dir="src/test/${container.name}"/> | |||
</copy> | |||
<copy | |||
todir="${cargo.install.dir}/apache-tomcat-${tomcat.version}/apache-tomcat-${tomcat.version}/common/lib"> | |||
<fileset dir="${project.build.directory}/providedDependencies"> | |||
<include name="**/*.jar"/> | |||
</fileset> | |||
</copy> | |||
<!-- for tomcat 6 --> | |||
<copy | |||
todir="${cargo.install.dir}/apache-tomcat-${tomcat.version}/apache-tomcat-${tomcat.version}/lib"> | |||
<fileset dir="${project.build.directory}/providedDependencies"> | |||
<include name="**/*.jar"/> | |||
</fileset> | |||
</copy> | |||
</tasks> | |||
</configuration> | |||
<goals> | |||
<goal>run</goal> | |||
</goals> | |||
</execution> | |||
<execution> | |||
<id>check-archiva-loaded</id> | |||
<phase>integration-test</phase> | |||
<configuration> | |||
<tasks> | |||
<get src="http://localhost:${container.test.port}/archiva/" dest="${project.build.directory}/index.html"/> | |||
<delete file="${project.build.directory}/index.html"/> | |||
</tasks> | |||
</configuration> | |||
<goals> | |||
<goal>run</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.codehaus.cargo</groupId> | |||
<artifactId>cargo-maven2-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<id>start-container</id> | |||
<phase>pre-integration-test</phase> | |||
<goals> | |||
<goal>start</goal> | |||
</goals> | |||
</execution> | |||
<execution> | |||
<id>stop-container</id> | |||
<phase>post-integration-test</phase> | |||
<goals> | |||
<goal>stop</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
<configuration> | |||
<wait>${cargo.wait}</wait> | |||
<container> | |||
<containerId>${container.name}</containerId> | |||
<zipUrlInstaller> | |||
<url>${container.url}</url> | |||
<downloadDir>${user.home}/.cargo</downloadDir> | |||
</zipUrlInstaller> | |||
<log>${project.build.directory}/logs/${container.name}.log</log> | |||
<output>${project.build.directory}/logs/${container.name}.out</output> | |||
<timeout>${cargo.timeout}</timeout> | |||
<systemProperties> | |||
<appserver.base>${project.build.directory}/appserver-base</appserver.base> | |||
<appserver.home>${project.build.directory}/appserver-base</appserver.home> | |||
<derby.system.home>${project.build.directory}</derby.system.home> | |||
</systemProperties> | |||
</container> | |||
<configuration> | |||
<home>${project.build.directory}/${container.name}conf</home> | |||
<type>existing</type> | |||
<properties> | |||
<cargo.servlet.port>${container.test.port}</cargo.servlet.port> | |||
<cargo.jvmargs>${cargo.jvm.args}</cargo.jvmargs> | |||
</properties> | |||
</configuration> | |||
</configuration> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
</profile> | |||
<profile> | |||
<id>existing-container</id> | |||
<activation> | |||
<property> | |||
<name>!baseUrl</name> | |||
</property> | |||
</activation> | |||
<properties> | |||
<baseUrl>http://localhost:${container.test.port}/archiva/index.html</baseUrl> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>start-selenium</id> | |||
<activation> | |||
<property> | |||
<name>!seleniumHost</name> | |||
</property> | |||
</activation> | |||
<properties> | |||
<seleniumHost>localhost</seleniumHost> | |||
<seleniumPort>4444</seleniumPort> | |||
</properties> | |||
<build> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.codehaus.mojo</groupId> | |||
<artifactId>selenium-maven-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<phase>pre-integration-test</phase> | |||
<goals> | |||
<goal>start-server</goal> | |||
</goals> | |||
<configuration> | |||
<background>true</background> | |||
<port>${seleniumPort}</port> | |||
<logOutput>true</logOutput> | |||
</configuration> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
</profile> | |||
<profile> | |||
<id>tomcat6x</id> | |||
<activation> | |||
<property> | |||
<name>!container</name> | |||
</property> | |||
</activation> | |||
<properties> | |||
<container.name>tomcat6x</container.name> | |||
<tomcat.version>${tomcat6x.version}</tomcat.version> | |||
<container.url> | |||
${apache.mirror.url}/tomcat/tomcat-6/v${tomcat6x.version}/bin/apache-tomcat-${tomcat6x.version}.zip | |||
</container.url> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>firefox</id> | |||
<activation> | |||
<property> | |||
<name>!browser</name> | |||
</property> | |||
</activation> | |||
<properties> | |||
<selenium.browser>*firefox</selenium.browser> | |||
<excluded.groups/> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>chrome</id> | |||
<activation> | |||
<property> | |||
<name>browser</name> | |||
<value>chrome</value> | |||
</property> | |||
</activation> | |||
<properties> | |||
<selenium.browser>*googlechrome</selenium.browser> | |||
<excluded.groups>requiresUpload</excluded.groups> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>iexplore</id> | |||
<activation> | |||
<property> | |||
<name>browser</name> | |||
<value>iexplore</value> | |||
</property> | |||
</activation> | |||
<properties> | |||
<selenium.browser>*iexplore</selenium.browser> | |||
<excluded.groups>requiresUpload</excluded.groups> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>safari</id> | |||
<activation> | |||
<property> | |||
<name>browser</name> | |||
<value>safari</value> | |||
</property> | |||
</activation> | |||
<properties> | |||
<selenium.browser>*safari</selenium.browser> | |||
<excluded.groups>requiresUpload</excluded.groups> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>otherbrowser</id> | |||
<activation> | |||
<property> | |||
<name>browser</name> | |||
<value>other</value> | |||
</property> | |||
</activation> | |||
<properties> | |||
<selenium.browser>*custom ${browserPath}</selenium.browser> | |||
<excluded.groups>requiresUpload</excluded.groups> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>headless</id> | |||
<build> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.codehaus.mojo</groupId> | |||
<artifactId>selenium-maven-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<id>xvfb</id> | |||
<phase>validate</phase> | |||
<goals> | |||
<goal>xvfb</goal> | |||
</goals> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
</profile> | |||
<profile> | |||
<id>debug</id> | |||
<properties> | |||
<!-- TODO: review how appropriate the memory settings are - should work with less --> | |||
<cargo.jvm.args> | |||
-Xdebug -Xnoagent -Djava.compiler=NONE | |||
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${cargo.debug.port} | |||
-Xmx512m -XX:MaxPermSize=256m | |||
</cargo.jvm.args> | |||
<cargo.debug.port>8000</cargo.debug.port> | |||
<!-- wait an unusual amount of time (1hr) to allow debugging to occur --> | |||
<maxWaitTimeInMs>3600000</maxWaitTimeInMs> | |||
</properties> | |||
</profile> | |||
<profile> | |||
<id>ci-server</id> | |||
<build> | |||
<plugins> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-antrun-plugin</artifactId> | |||
<executions> | |||
<execution> | |||
<id>cleanup-files</id> | |||
<goals> | |||
<goal>run</goal> | |||
</goals> | |||
<configuration> | |||
<tasks> | |||
<delete file="${user.home}/.m2/archiva.xml" quiet="true"/> | |||
</tasks> | |||
</configuration> | |||
</execution> | |||
</executions> | |||
</plugin> | |||
</plugins> | |||
</build> | |||
</profile> | |||
</profiles> | |||
<pluginRepositories> | |||
<pluginRepository> | |||
<id>codehaus.snapshots</id> | |||
<url>https://nexus.codehaus.org/content/repositories/snapshots/</url> | |||
<releases> | |||
<enabled>false</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
</pluginRepository> | |||
</pluginRepositories> | |||
</project> |
@@ -0,0 +1,8 @@ | |||
<configuration> | |||
<localRepository></localRepository> | |||
<webapp> | |||
<ui> | |||
<appletFindEnabled>false</appletFindEnabled> | |||
</ui> | |||
</webapp> | |||
</configuration> |
@@ -0,0 +1,49 @@ | |||
<!-- | |||
~ 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. | |||
--> | |||
<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN" | |||
"http://jackrabbit.apache.org/dtd/repository-1.6.dtd"> | |||
<Repository> | |||
<FileSystem class="org.apache.jackrabbit.core.fs.mem.MemoryFileSystem"/> | |||
<!--<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> | |||
<param name="path" value="${rep.home}/repository"/> | |||
</FileSystem> --> | |||
<Security appName="Jackrabbit"> | |||
<SecurityManager class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager" workspaceName="security"/> | |||
<AccessManager class="org.apache.jackrabbit.core.security.simple.SimpleAccessManager"/> | |||
<LoginModule class="org.apache.jackrabbit.core.security.simple.SimpleLoginModule"/> | |||
</Security> | |||
<Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/> | |||
<Workspace name="${wsp.name}"> | |||
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> | |||
<param name="path" value="${wsp.home}"/> | |||
</FileSystem> | |||
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/> | |||
<SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex"> | |||
<param name="path" value="${wsp.home}/index"/> | |||
</SearchIndex> | |||
</Workspace> | |||
<Versioning rootPath="${rep.home}/version"> | |||
<FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> | |||
<param name="path" value="${rep.home}/version"/> | |||
</FileSystem> | |||
<PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/> | |||
</Versioning> | |||
</Repository> |
@@ -0,0 +1 @@ | |||
<configuration /> |
@@ -0,0 +1 @@ | |||
ea7dea9244b2a0975cfa117dc34fe18e |
@@ -0,0 +1 @@ | |||
1039566ff5361d07eccd1243c45929b96441c7d6 |
@@ -0,0 +1,54 @@ | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>test</groupId> | |||
<artifactId>test</artifactId> | |||
<packaging>jar</packaging> | |||
<version>1.0</version> | |||
<name>test</name> | |||
<url>http://maven.apache.org</url> | |||
<licenses> | |||
<license> | |||
<name>Test License</name> | |||
<url>http://www.test.org/test.html</url> | |||
</license> | |||
</licenses> | |||
<mailingLists> | |||
<mailingList> | |||
<name>test user list</name> | |||
<subscribe>http://test.net/lists/listinfo/test-user</subscribe> | |||
<unsubscribe>http://test.net/lists/listinfo/test-user</unsubscribe> | |||
<archive>http://www.test-archive.com/test-user%40lists.test.net/</archive> | |||
</mailingList> | |||
<mailingList> | |||
<name>test developer list</name> | |||
<subscribe>http://test.net/lists/listinfo/test-dev</subscribe> | |||
<unsubscribe>http://test.net/lists/listinfo/test-dev</unsubscribe> | |||
<archive>http://www.test-archive.com/test-dev%40lists.test.net/</archive> | |||
</mailingList> | |||
</mailingLists> | |||
<dependencies> | |||
<dependency> | |||
<groupId>test.group.id</groupId> | |||
<artifactId>testArtifactId</artifactId> | |||
<version>1.0</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>junit</groupId> | |||
<artifactId>junit</artifactId> | |||
<version>3.8.1</version> | |||
<scope>test</scope> | |||
</dependency> | |||
</dependencies> | |||
<distributionManagement> | |||
<repository> | |||
<id>test</id> | |||
<url>file://localhost/Users/brett/scm/archiva/archiva/archiva-modules/archiva-web/archiva-webapp-test/src/test/it-resources/appserver-base/data/repositories/internal</url> | |||
</repository> | |||
</distributionManagement> | |||
</project> | |||
@@ -0,0 +1 @@ | |||
f80c7c493716de649a99db00cd2ff34c |
@@ -0,0 +1 @@ | |||
4b95c6fa09d1e02efdb69129f53f025e33bc8958 |
@@ -0,0 +1,12 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<metadata> | |||
<groupId>test</groupId> | |||
<artifactId>test</artifactId> | |||
<version>1.0</version> | |||
<versioning> | |||
<versions> | |||
<version>1.0</version> | |||
</versions> | |||
<lastUpdated>20100114015837</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
dab1b8c2475fe839f387ceaef0d82b30 |
@@ -0,0 +1 @@ | |||
4e5b414d5419121ef75131cb52235a9abbf2095a |
@@ -0,0 +1,44 @@ | |||
<settings> | |||
<localRepository></localRepository> | |||
<servers> | |||
<server> | |||
<id>snapshots</id> | |||
<username>admin</username> | |||
<password>admin1</password> | |||
</server> | |||
</servers> | |||
<profiles> | |||
<profile> | |||
<id>repositories</id> | |||
<repositories> | |||
<repository> | |||
<id>snapshots</id> | |||
<name>snapshots-repository</name> | |||
<url>http://localhost:9696/archiva/repository/snapshots/</url> | |||
<releases> | |||
<enabled>false</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
</repository> | |||
</repositories> | |||
<pluginRepositories> | |||
<pluginRepository> | |||
<id>snapshots</id> | |||
<name>snapshots-repository</name> | |||
<url>http://localhost:9696/archiva/repository/snapshot/</url> | |||
<releases> | |||
<enabled>false</enabled> | |||
</releases> | |||
<snapshots> | |||
<enabled>true</enabled> | |||
</snapshots> | |||
</pluginRepository> | |||
</pluginRepositories> | |||
</profile> | |||
</profiles> | |||
<activeProfiles> | |||
<activeProfile>repositories</activeProfile> | |||
</activeProfiles> | |||
</settings> |
@@ -0,0 +1,41 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
~ 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. | |||
--> | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>bad-dependency</artifactId> | |||
<version>1.0</version> | |||
<packaging>jar</packaging> | |||
<name>Bad Dependency</name> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.apache.archiva.web.test</groupId> | |||
<artifactId>bad-dependency</artifactId> | |||
<version>1.0</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva.web.test</groupId> | |||
<artifactId>foo-bar</artifactId> | |||
<version>1.2-SNAPSHOT</version> | |||
</dependency> | |||
</dependencies> | |||
</project> |
@@ -0,0 +1,41 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
~ 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. | |||
--> | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>dependency-in-proxied</artifactId> | |||
<version>1.0</version> | |||
<packaging>jar</packaging> | |||
<name>Dependency In Proxied</name> | |||
<dependencies> | |||
<!--dependency> | |||
<groupId>org.apache.maven</groupId> | |||
<artifactId>maven-jxr</artifactId> | |||
<version>2.1</version> | |||
</dependency--> | |||
<dependency> | |||
<groupId>com.lowagie</groupId> | |||
<artifactId>itext</artifactId> | |||
<version>1.3</version> | |||
</dependency> | |||
</dependencies> | |||
</project> |
@@ -0,0 +1,7 @@ | |||
#Last Scan Information, managed by Archiva. DO NOT EDIT | |||
#Thu Apr 19 17:04:36 PHT 2007 | |||
scan.included.files=12 | |||
scan.skipped.files=0 | |||
scan.finished.timestamp=1176973476967 | |||
scan.consumed.files=20 | |||
scan.started.timestamp=1176973467414 |
@@ -0,0 +1 @@ | |||
0360f14347d5502114ba7afe4ea2e07f |
@@ -0,0 +1 @@ | |||
4a667b9923fb936409b96c8242bebc2f96f374f5 |
@@ -0,0 +1,25 @@ | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-a</artifactId> | |||
<packaging>jar</packaging> | |||
<version>1.0</version> | |||
<name>artifact-a</name> | |||
<url>http://maven.apache.org</url> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-b</artifactId> | |||
<version>2.0</version> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
<extensions> | |||
<extension> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-webdav</artifactId> | |||
</extension> | |||
</extensions> | |||
</build> | |||
</project> |
@@ -0,0 +1 @@ | |||
cdf69ffbcb888aacea6cfeaf479fefd1 |
@@ -0,0 +1 @@ | |||
f6a384b1ab62ed45ae7dee1a059815e94bbc7fa6 |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><metadata> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-a</artifactId> | |||
<version>1.0</version> | |||
<versioning> | |||
<versions> | |||
<version>1.0</version> | |||
</versions> | |||
<lastUpdated>20070417090928</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
bc87573a595a2c387b5baa4ad7d06743 |
@@ -0,0 +1 @@ | |||
e9ecaaa14a3c09b07206980c15749a631dbc986a |
@@ -0,0 +1 @@ | |||
16a308257949f23afa5d1f1dec41aa44 |
@@ -0,0 +1 @@ | |||
36a3a9cc35b8ca0d73998d7b39d290b489800a22 |
@@ -0,0 +1,25 @@ | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-b</artifactId> | |||
<packaging>jar</packaging> | |||
<version>2.0</version> | |||
<name>artifact-b</name> | |||
<url>http://maven.apache.org</url> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-c</artifactId> | |||
<version>3.0</version> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
<extensions> | |||
<extension> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-webdav</artifactId> | |||
</extension> | |||
</extensions> | |||
</build> | |||
</project> |
@@ -0,0 +1 @@ | |||
be5b8f8539a62b5935793ebeb87215fd |
@@ -0,0 +1 @@ | |||
012a658d4a4f70aa3e8dd4b2db67020817b7dfcc |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><metadata> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-b</artifactId> | |||
<version>2.0</version> | |||
<versioning> | |||
<versions> | |||
<version>2.0</version> | |||
</versions> | |||
<lastUpdated>20070417090908</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
bedfccc27fc7dc262d5c99a7aa8b83d8 |
@@ -0,0 +1 @@ | |||
4902ea6b16838ff26f9136460c4394b0ad7cc7f5 |
@@ -0,0 +1 @@ | |||
853a10a201f8a296e37e856615c5349c |
@@ -0,0 +1 @@ | |||
5155da8820ed77c43e983c1244d94a3b27bf08f7 |
@@ -0,0 +1,26 @@ | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-c</artifactId> | |||
<packaging>jar</packaging> | |||
<version>3.0</version> | |||
<name>artifact-c</name> | |||
<url>http://maven.apache.org</url> | |||
<dependencies> | |||
<dependency> | |||
<groupId>junit</groupId> | |||
<artifactId>junit</artifactId> | |||
<version>3.8.1</version> | |||
<scope>test</scope> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
<extensions> | |||
<extension> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-webdav</artifactId> | |||
</extension> | |||
</extensions> | |||
</build> | |||
</project> |
@@ -0,0 +1 @@ | |||
4df0417579b1492f37da14316adb85af |
@@ -0,0 +1 @@ | |||
c3b007acd9c17b80753b39a4121255965e7e2e65 |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><metadata> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-c</artifactId> | |||
<version>3.0</version> | |||
<versioning> | |||
<versions> | |||
<version>3.0</version> | |||
</versions> | |||
<lastUpdated>20070417090835</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
74d58d97e78d5e51cc02c489c5edba0d |
@@ -0,0 +1 @@ | |||
5c7571eb35248be0f65758783b036e8f7899c146 |
@@ -0,0 +1 @@ | |||
55f498a518e1151ce2e54daa674691de |
@@ -0,0 +1 @@ | |||
730551bde461564d3f8a7e0178ef9bc54a86d2dd |
@@ -0,0 +1,25 @@ | |||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-s</artifactId> | |||
<packaging>jar</packaging> | |||
<version>0.1</version> | |||
<name>artifact-s</name> | |||
<url>http://maven.apache.org</url> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-a</artifactId> | |||
<version>1.0</version> | |||
</dependency> | |||
</dependencies> | |||
<build> | |||
<extensions> | |||
<extension> | |||
<groupId>org.apache.maven.wagon</groupId> | |||
<artifactId>wagon-webdav</artifactId> | |||
</extension> | |||
</extensions> | |||
</build> | |||
</project> |
@@ -0,0 +1 @@ | |||
746ba2848229dbc1c9683ece0e7f02c8 |
@@ -0,0 +1 @@ | |||
0d068f63069a86d982075a1dca7fe74fd95a29df |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><metadata> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>artifact-s</artifactId> | |||
<version>0.1</version> | |||
<versioning> | |||
<versions> | |||
<version>0.1</version> | |||
</versions> | |||
<lastUpdated>20070417090721</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
baa0ad0afaba9cee66ec262b38f796b6 |
@@ -0,0 +1 @@ | |||
dea84d579f673d2d87c7bd47e4318cdf8e59e4d0 |
@@ -0,0 +1,7 @@ | |||
#Last Scan Information, managed by Archiva. DO NOT EDIT | |||
#Thu Apr 19 17:04:36 PHT 2007 | |||
scan.included.files=12 | |||
scan.skipped.files=0 | |||
scan.finished.timestamp=1176973476967 | |||
scan.consumed.files=20 | |||
scan.started.timestamp=1176973467414 |
@@ -0,0 +1 @@ | |||
306d556e6e5e4d604dc854d09ddcdefd |
@@ -0,0 +1 @@ | |||
afb6586f5eb4c63dd5735a0bed11c99c7fac6755 |
@@ -0,0 +1,9 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><project> | |||
<modelVersion>4.0.0</modelVersion> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>foo-bar</artifactId> | |||
<version>1.0-SNAPSHOT</version> | |||
<distributionManagement> | |||
<status>deployed</status> | |||
</distributionManagement> | |||
</project> |
@@ -0,0 +1 @@ | |||
8e896baea663a45d7bd2737f8e464481 |
@@ -0,0 +1 @@ | |||
e37897c617d78dedd978766a2db318d301e80105 |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><metadata> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>foo-bar</artifactId> | |||
<version>1.0-SNAPSHOT</version> | |||
<versioning> | |||
<snapshot> | |||
<buildNumber>1</buildNumber> | |||
</snapshot> | |||
<lastUpdated>20070425105840</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
add4f71a005137e9a296c5b192e900c2 |
@@ -0,0 +1 @@ | |||
b505e302169e04fc821bf571da7435b1e42ef8d7 |
@@ -0,0 +1,11 @@ | |||
<?xml version="1.0" encoding="UTF-8"?><metadata> | |||
<groupId>org.apache.maven.archiva.web.test</groupId> | |||
<artifactId>foo-bar</artifactId> | |||
<version>1.0-SNAPSHOT</version> | |||
<versioning> | |||
<versions> | |||
<version>1.0-SNAPSHOT</version> | |||
</versions> | |||
<lastUpdated>20070425105840</lastUpdated> | |||
</versioning> | |||
</metadata> |
@@ -0,0 +1 @@ | |||
f3b657fb48d2e82fee5fada169756938 |
@@ -0,0 +1 @@ | |||
f4629e609deb95cefdcdddc6dd8c2942d1c3e47f |
@@ -0,0 +1,143 @@ | |||
# | |||
# 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. | |||
# | |||
# properties for integration tests | |||
ADMIN_USERNAME=admin | |||
ADMIN_FULLNAME=Administrator | |||
ADMIN_EMAIL=admin@localhost.fr | |||
ADMIN_PASSWORD=admin1 | |||
SELENIUM_HOST=localhost | |||
SELENIUM_PORT=4444 | |||
SELENIUM_BROWSER=*firefox | |||
# Search, Artifact Management | |||
SEARCH_BAD_ARTIFACT=asdf | |||
# Existing Artifact | |||
ARTIFACT_GROUPID=test | |||
ARTIFACT_ARTIFACTID=test | |||
ARTIFACT_VERSION=1.0 | |||
ARTIFACT_PACKAGING=jar | |||
ARTIFACT_CLASSNAME=test.App | |||
# Artifact for testing add artifact with valid values | |||
VALIDARTIFACT_GROUPID=addArtifactValidValues | |||
VALIDARTIFACT_ARTIFACTID=addArtifactValidValues-artifact | |||
# Artifact for upload action in audit log report - MRM-1304 | |||
AUDITLOGARTIFACT_GROUPID=group.auditLogUpload | |||
AUDITLOGARTIFACT_ARTIFACTID=auditLogUpload-artifact | |||
AUDITLOG_EXPECTED_ARTIFACT=group/auditLogUpload/auditLogUpload-artifact/1.0/auditLogUpload-artifact-1.0.jar | |||
# Reports | |||
REPOSITORY_NAME=internal | |||
START_DATE=05/01/2009 | |||
END_DATE=05/30/2009 | |||
# User Management | |||
# For password and new password | |||
USERROLE_EMAIL=admin@localhost | |||
USERROLE_PASSWORD=password1 | |||
NEW_USERROLE_PASSWORD=password123 | |||
# Guest Role | |||
GUEST_USERNAME=guest_user | |||
GUEST_FULLNAME=Guest | |||
# Registered User Role | |||
REGISTERED_USERNAME=reg_user | |||
REGISTERED_FULLNAME=Registered User | |||
# System Administrator | |||
SYSAD_USERNAME=sys_admin | |||
SYSAD_FULLNAME=System Administrator | |||
# User Administrator | |||
USERADMIN_USERNAME=user_admin | |||
USERADMIN_FULLNAME=User Administrator | |||
# Global Repository Manager | |||
GLOBALREPOMANAGER_USERNAME=globalrepo_manager | |||
GLOBALREPOMANAGER_FULLNAME=Global Repository Manager | |||
# Global Repository Observer | |||
GLOBALREPOOBSERVER_USERNAME=globalrepo_observer | |||
GLOBALREPOOBSERVER_FULLNAME=Global Repository Observer | |||
# Repository Manager - internal | |||
REPOMANAGER_INTERNAL_USERNAME=repomanager_internal | |||
REPOMANAGER_INTERNAL_FULLNAME=Repository Manager - internal | |||
# Repository Manager - snapshots | |||
REPOMANAGER_SNAPSHOTS_USERNAME=repomanager_snapshots | |||
REPOMANAGER_SNAPSHOTS_FULLNAME=Repository Manager - snapshots | |||
# Repository Observer - internal | |||
REPOOBSERVER_INTERNAL_USERNAME=repoobserver_internal | |||
REPOOBSERVER_INTERNAL_FULLNAME=Repository Observer - internal | |||
# Repository Observer - snapshots | |||
REPOOBSERVER_SNAPSHOTS_USERNAME=repoobserver_snapshots | |||
REPOOBSERVER_SNAPSHOTS_FULLNAME=Repository Observer - snapshots | |||
# Add Artifact | |||
GROUPID=test | |||
ARTIFACTID=test | |||
VERSION=1.0 | |||
PACKAGING=jar | |||
ARTIFACTFILEPATH=test | |||
REPOSITORYID=internal | |||
GROUPID1=delete | |||
ARTIFACTID1=delete | |||
VERSION1=1.0 | |||
PACKAGING1=jar | |||
ARTIFACTFILEPATH1=test | |||
REPOSITORYID1=internal | |||
GROUPID_DOTNETARTIFACT=dotNetTypes | |||
ARTIFACTID_DOTNETARTIFACT=dotNetTypes | |||
PACKAGING_DOTNETARTIFACT=library | |||
SNAPSHOT_GROUPID=org.apache.archiva | |||
SNAPSHOT_ARTIFACTID=archiva-test | |||
SNAPSHOT_VERSION=1.0-SNAPSHOT | |||
SNAPSHOT_PACKAGING=jar | |||
SNAPSHOT_ARTIFACTFILEPATH=src/test/resources/snapshots/org/apache/maven/archiva/web/test/foo-bar/1.0-SNAPSHOT/foo-bar-1.0-SNAPSHOT.jar | |||
SNAPSHOT_REPOSITORYID=snapshots | |||
ADD_REMOVE_GROUPID=artifact.dummy | |||
ADD_REMOVE_ARTIFACTID=artifact-dummy | |||
# REPOSITORIES | |||
# Manage Repositories | |||
MANAGED_IDENTIFIER=testing1 | |||
MANAGED_NAME=Testing Managed Repository | |||
MANAGED_DIRECTORY= | |||
MANAGED_INDEX_DIRECTORY= | |||
MANAGED_TYPE= | |||
MANAGED_CRON= | |||
MANAGED_REPOPURGE_DAYSOLDERTHAN= | |||
MANAGED_REPOPURGE_RETENTIONCOUNT= | |||
# Network Proxies | |||
NETWORKPROXY_IDENTIFIER=networkproxytest | |||
NETWORKPROXY_PROTOCOL=http | |||
NETWORKPROXY_HOSTNAME= | |||
NETWORKPROXY_PORT=8080 | |||
NETWORKPROXY_USERNAME=admin | |||
NETWORKPROXY_PASSWORD=admin123 | |||
# Browse - MRM-1278 test | |||
SNAPSHOTS_REPOSITORY=snapshots | |||
RELEASES_REPOSITORY=releases | |||
@@ -0,0 +1,89 @@ | |||
package org.apache.archiva.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.archiva.web.test.parent.AbstractArchivaTest; | |||
import org.testng.annotations.AfterTest; | |||
import org.testng.annotations.BeforeSuite; | |||
import org.testng.annotations.BeforeTest; | |||
import org.testng.annotations.Optional; | |||
import org.testng.annotations.Parameters; | |||
import org.testng.annotations.Test; | |||
public class ArchivaAdminTest | |||
extends AbstractArchivaTest | |||
{ | |||
@Override | |||
@AfterTest | |||
public void close() | |||
throws Exception | |||
{ | |||
super.close(); | |||
} | |||
@Override | |||
@BeforeSuite | |||
public void open() | |||
throws Exception | |||
{ | |||
super.open(); | |||
} | |||
@BeforeTest | |||
@Parameters( { "baseUrl", "browser", "maxWaitTimeInMs", "seleniumHost", "seleniumPort" } ) | |||
public void initializeArchiva( String baseUrl, String browser, int maxWaitTimeInMs, | |||
@Optional( "localhost" ) String seleniumHost, @Optional( "4444" ) int seleniumPort ) | |||
throws Exception | |||
{ | |||
super.open( baseUrl, browser, seleniumHost, seleniumPort, Integer.toString( maxWaitTimeInMs ) ); | |||
getSelenium().open( baseUrl ); | |||
getSelenium().refresh(); | |||
// if not admin user created create one | |||
if ( isElementVisible( "create-admin-link" ) ) | |||
{ | |||
clickLinkWithLocator( "create-admin-link-a", false ); | |||
assertCreateAdmin(); | |||
String fullname = getProperty( "ADMIN_FULLNAME" ); | |||
String username = getProperty( "ADMIN_USERNAME" ); | |||
String mail = getProperty( "ADMIN_EMAIL" ); | |||
String password = getProperty( "ADMIN_PASSWORD" ); | |||
submitAdminData( fullname, mail, password ); | |||
assertUserLoggedIn( username ); | |||
clickLinkWithLocator( "logout-link-a" ); | |||
} | |||
else | |||
{ | |||
login( getAdminUsername(), getAdminPassword() ); | |||
} | |||
} | |||
@Test( groups = { "about" }, alwaysRun = true ) | |||
public void testHome() | |||
{ | |||
getSelenium().open( baseUrl ); | |||
assertPage( "Apache Archiva" ); | |||
} | |||
} |
@@ -0,0 +1,122 @@ | |||
package org.apache.archiva.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.archiva.web.test.parent.AbstractArchivaTest; | |||
import org.testng.annotations.AfterTest; | |||
import org.testng.annotations.BeforeTest; | |||
import org.testng.annotations.Test; | |||
/* | |||
* Bug in TestNG. TESTNG-285: @Test(sequential=true) works incorrectly for classes with inheritance | |||
* http://code.google.com/p/testng/source/browse/trunk/CHANGES.txt | |||
* Waiting 5.9 release. It's comming soon. | |||
*/ | |||
/** | |||
* Based on LoginTest of Emmanuel Venisse test. | |||
* | |||
* @author José Morales Martínez | |||
* @version $Id$ | |||
*/ | |||
@Test( groups = { "login" }, dependsOnGroups = {"about"}) | |||
public class LoginTest | |||
extends AbstractArchivaTest | |||
{ | |||
@Test(alwaysRun = true) | |||
public void testWithBadUsername() | |||
{ | |||
goToLoginPage(); | |||
setFieldValue( "user-login-form-username", "badUsername" ); | |||
waitPage(); | |||
assertElementPresent( "//ul[@class=\'errorMessage\']" ); | |||
//assertTextPresent( "You have entered an incorrect username and/or password" ); | |||
} | |||
@Test( dependsOnMethods = { "testWithBadUsername" }, alwaysRun = true ) | |||
public void testWithBadPassword() | |||
{ | |||
goToLoginPage(); | |||
setFieldValue( "loginForm_username", getProperty( "ADMIN_USERNAME" ) ); | |||
setFieldValue( "loginForm_password", "badPassword" ); | |||
getSelenium().click( "loginSubmit" ); | |||
//getSelenium().waitForPageToLoad( maxWaitTimeInMs ); | |||
waitPage(); | |||
//assertTextPresent( "You have entered an incorrect username and/or password" ); | |||
//<ul class="errorMessage"><li><span> | |||
assertElementPresent( "//ul[@class=\'errorMessage\']" ); | |||
} | |||
@Test( dependsOnMethods = { "testWithBadPassword" }, alwaysRun = true ) | |||
public void testWithEmptyUsername() | |||
{ | |||
goToLoginPage(); | |||
setFieldValue( "loginForm_password", "password" ); | |||
getSelenium().click( "loginSubmit" ); | |||
//getSelenium().waitForPageToLoad( maxWaitTimeInMs ); | |||
waitPage(); | |||
//assertTextPresent( "User Name is required" ); | |||
assertElementPresent( "//tr[@errorFor=\'loginForm_username\']"); | |||
} | |||
@Test( dependsOnMethods = { "testWithEmptyUsername" }, alwaysRun = true ) | |||
public void testWithEmptyPassword() | |||
{ | |||
goToLoginPage(); | |||
setFieldValue( "loginForm_username", getProperty( "ADMIN_USERNAME" ) ); | |||
getSelenium().click( "loginSubmit" ); | |||
//getSelenium().waitForPageToLoad( maxWaitTimeInMs ); | |||
waitPage(); | |||
//assertTextPresent( "You have entered an incorrect username and/or password" ); | |||
assertElementPresent( "//ul[@class=\'errorMessage\']" ); | |||
} | |||
@Test( groups = { "loginSuccess" }, dependsOnMethods = { "testWithEmptyPassword" }, alwaysRun = true ) | |||
public void testWithCorrectUsernamePassword() | |||
{ | |||
goToLoginPage(); | |||
setFieldValue( "loginForm_username", getProperty( "ADMIN_USERNAME" ) ); | |||
setFieldValue( "loginForm_password", getProperty( "ADMIN_PASSWORD" ) ); | |||
getSelenium().click( "loginSubmit" ); | |||
//getSelenium().waitForPageToLoad( maxWaitTimeInMs ); | |||
waitPage(); | |||
//assertTextPresent( "Logout" ); | |||
assertElementPresent( "logoutLink" ); | |||
//assertTextPresent( "Edit Details" ); | |||
assertElementPresent( "editUserLink" ); | |||
assertTextPresent( getProperty( "ADMIN_USERNAME" ) ); | |||
} | |||
@BeforeTest | |||
public void open() | |||
throws Exception | |||
{ | |||
super.open(); | |||
} | |||
@Override | |||
@AfterTest | |||
public void close() | |||
throws Exception | |||
{ | |||
super.close(); | |||
} | |||
} |
@@ -0,0 +1,242 @@ | |||
package org.apache.archiva.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. | |||
*/ | |||
/** | |||
* Utility class for creating xpath expressions | |||
*/ | |||
public class XPathExpressionUtil | |||
{ | |||
public static final String CONTAINS = "contains"; | |||
public static final String AND = " and "; | |||
public static final String CURRENT_NODE = "./"; | |||
public static final String PARENT_NODE = "../"; | |||
public static final String GRANDPARENT_NODE = "../../"; | |||
public static final String ELEMENT_ANY_LEVEL = "//"; | |||
public static final String TABLE_COLUMN = "td"; | |||
public static final String TABLE_ROW = "tr"; | |||
public static final String START_NODE_TEST = "["; | |||
public static final String END_NODE_TEST = "]"; | |||
public static final String ANCHOR = "a"; | |||
public static final String IMG = "img"; | |||
public static final String LIST = "ul"; | |||
public static final String LINE = "li"; | |||
public static String getList( String[] values ) | |||
{ | |||
String xpathExpression = ""; | |||
if ( values.length > 0 ) | |||
{ | |||
xpathExpression += ELEMENT_ANY_LEVEL; | |||
xpathExpression += LIST; | |||
xpathExpression += START_NODE_TEST; | |||
for ( int nIndex = 0; nIndex < values.length; nIndex++ ) | |||
{ | |||
xpathExpression += ( ( nIndex > 0 ) ? AND : "" ); | |||
xpathExpression += contains( LINE + position( nIndex + 1 ), values[nIndex] ); | |||
} | |||
xpathExpression += END_NODE_TEST; | |||
} | |||
return xpathExpression; | |||
} | |||
/** | |||
* expression for acquiring an element in one of the table columns | |||
* | |||
* @param element the node element | |||
* @param elementIndex column index of the element, used for skipping | |||
* @param columnValues the values to be matched in each column, element column is included | |||
* @return | |||
*/ | |||
public static String getColumnElement( String element, int elementIndex, String[] columnValues ) | |||
{ | |||
return getColumnElement( element, elementIndex, null, columnValues ); | |||
} | |||
/** | |||
* expression for acquiring an element in one of the table columns | |||
* | |||
* @param element the node element | |||
* @param elementIndex column index of the element, used for skipping | |||
* @param elementValue the matched element value | |||
* @param columnValues the values to be matched in each column, element column is included | |||
* @return | |||
*/ | |||
public static String getColumnElement( String element, int elementIndex, String elementValue, String[] columnValues ) | |||
{ | |||
return getColumnElement( element, elementIndex, elementValue, "TEXT", columnValues ); | |||
} | |||
/** | |||
* expression for acquiring an element in one of the table columns | |||
* | |||
* @param element the node element | |||
* @param elementIndex column index of the element, used for skipping | |||
* @param imageName the matched image name | |||
* @param columnValues the values to be matched in each column, element column is included | |||
* @return | |||
*/ | |||
public static String getImgColumnElement( String element, int elementIndex, String imageName, String[] columnValues ) | |||
{ | |||
return getColumnElement( element, elementIndex, imageName, IMG, columnValues ); | |||
} | |||
/** | |||
* expression for acquiring an element in one of the table columns | |||
* | |||
* @param element the node element | |||
* @param elementIndex column index of the element, used for skipping | |||
* @param imageName the matched image name | |||
* @param columnValues the values to be matched in each column, element column is included | |||
* @return | |||
*/ | |||
private static String getColumnElement( String element, int elementIndex, String elementValue, | |||
String elementValueType, String[] columnValues ) | |||
{ | |||
String xpathExpression = null; | |||
if ( ( columnValues != null ) && ( columnValues.length > 0 ) ) | |||
{ | |||
xpathExpression = ELEMENT_ANY_LEVEL + element; | |||
xpathExpression += START_NODE_TEST; | |||
if ( elementValue != null ) | |||
{ | |||
if ( "TEXT".equals( elementValueType ) ) | |||
{ | |||
xpathExpression += contains( elementValue ); | |||
xpathExpression += ( columnValues.length > 0 ) ? AND : ""; | |||
} | |||
} | |||
// we are two levels below the table row element ( tr/td/<element> ) | |||
xpathExpression += matchColumns( GRANDPARENT_NODE, columnValues, elementIndex ); | |||
xpathExpression += END_NODE_TEST; | |||
} | |||
if ( IMG.equals( elementValueType ) ) | |||
{ | |||
xpathExpression += "/img[contains(@src, '" + elementValue + "')]"; | |||
} | |||
return xpathExpression; | |||
} | |||
/** | |||
* expression for acquiring the table row that matches all column values with the same order as the list | |||
* | |||
* @param columnValues the matched list of columnValues | |||
* @return | |||
*/ | |||
public static String getTableRow( String[] columnValues ) | |||
{ | |||
String xpathExpression = null; | |||
if ( ( columnValues != null ) && ( columnValues.length > 0 ) ) | |||
{ | |||
xpathExpression = new String( ELEMENT_ANY_LEVEL + TABLE_ROW + START_NODE_TEST ); | |||
xpathExpression += matchColumns( columnValues ); | |||
xpathExpression += END_NODE_TEST; | |||
} | |||
return xpathExpression; | |||
} | |||
private static String matchColumns( String[] columnValues ) | |||
{ | |||
return matchColumns( columnValues, -1 ); | |||
} | |||
private static String matchColumns( String[] columnValues, int skipIndex ) | |||
{ | |||
return matchColumns( null, columnValues, skipIndex ); | |||
} | |||
private static String matchColumns( String parent, String[] columnValues, int skipIndex ) | |||
{ | |||
String xpathExpression = ""; | |||
for ( int nIndex = 0; nIndex < columnValues.length; nIndex++ ) | |||
{ | |||
if ( ( skipIndex != nIndex ) || ( skipIndex == -1 ) ) | |||
{ | |||
// prepend "and" if index > 0 | |||
xpathExpression += ( ( nIndex > 0 ) ? AND : "" ); | |||
xpathExpression += contains( parent, TABLE_COLUMN + position( nIndex + 1 ), columnValues[nIndex] ); | |||
} | |||
} | |||
return xpathExpression; | |||
} | |||
private static String position( int nIndex ) | |||
{ | |||
return new String( "[" + nIndex + "]" ); | |||
} | |||
private static String contains( String parent, String element, String matchedString ) | |||
{ | |||
String finalElement = ( parent != null ) ? parent : ""; | |||
finalElement += element; | |||
return contains( finalElement, matchedString ); | |||
} | |||
private static String contains( String matchedString ) | |||
{ | |||
return contains( ".", matchedString ); | |||
} | |||
private static String contains( String axis, String matchedString ) | |||
{ | |||
return new String( CONTAINS + "(" + axis + "," + "'" + matchedString + "')" ); | |||
} | |||
private static String equals( String parent, String element, String matchedString ) | |||
{ | |||
String finalElement = ( parent != null ) ? parent : ""; | |||
finalElement += element; | |||
return equals( finalElement, matchedString ); | |||
} | |||
private static String equals( String axis, String matchedString ) | |||
{ | |||
return new String( axis + "==" + "'" + matchedString + "'" ); | |||
} | |||
} |
@@ -0,0 +1,109 @@ | |||
package org.apache.archiva.web.test.listener; | |||
/* | |||
* 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 com.thoughtworks.selenium.Selenium; | |||
import org.apache.archiva.web.test.parent.AbstractSeleniumTest; | |||
import org.apache.commons.io.FileUtils; | |||
import org.testng.ITestResult; | |||
import org.testng.TestListenerAdapter; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.text.SimpleDateFormat; | |||
import java.util.Date; | |||
import java.util.regex.Pattern; | |||
public class CaptureScreenShotsListener | |||
extends TestListenerAdapter | |||
{ | |||
@Override | |||
public void onTestSkipped( ITestResult tr ) | |||
{ | |||
System.out.println( "Test " + tr.getName() + " -> Skipped" ); | |||
super.onTestSkipped( tr ); | |||
} | |||
@Override | |||
public void onTestFailure( ITestResult tr ) | |||
{ | |||
captureError( tr ); | |||
System.out.println( "Test " + tr.getName() + " -> Failed" ); | |||
super.onTestFailure( tr ); | |||
} | |||
@Override | |||
public void onTestSuccess( ITestResult tr ) | |||
{ | |||
System.out.println( "Test " + tr.getName() + " -> Success" ); | |||
super.onTestFailure( tr ); | |||
} | |||
private void captureError( ITestResult tr ) | |||
{ | |||
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd-HH_mm_ss" ); | |||
String time = sdf.format( new Date() ); | |||
File targetPath = new File( "target", "screenshots" ); | |||
StackTraceElement stackTrace[] = tr.getThrowable().getStackTrace(); | |||
String cName = tr.getTestClass().getName(); | |||
int index = getStackTraceIndexOfCallingClass( cName, stackTrace ); | |||
String methodName = stackTrace[index].getMethodName(); | |||
int lNumber = stackTrace[index].getLineNumber(); | |||
String lineNumber = Integer.toString( lNumber ); | |||
String className = cName.substring( cName.lastIndexOf( '.' ) + 1 ); | |||
targetPath.mkdirs(); | |||
Selenium selenium = AbstractSeleniumTest.getSelenium(); | |||
String fileBaseName = methodName + "_" + className + ".java_" + lineNumber + "-" + time; | |||
try | |||
{ | |||
selenium.windowMaximize(); | |||
File fileName = new File( targetPath, fileBaseName + ".png" ); | |||
selenium.captureEntirePageScreenshot( fileName.getAbsolutePath(), "background=#FFFFFF" ); | |||
} | |||
catch ( RuntimeException e ) | |||
{ | |||
System.out.println( "Error when take screenshot for test " + tr.getName() + ": " + e.getMessage() ); | |||
} | |||
try | |||
{ | |||
File fileName = new File( targetPath, fileBaseName + ".html" ); | |||
FileUtils.writeStringToFile( fileName, selenium.getHtmlSource() ); | |||
} | |||
catch ( IOException ioe ) | |||
{ | |||
System.out.println( ioe.getMessage() ); | |||
} | |||
} | |||
private int getStackTraceIndexOfCallingClass( String nameOfClass, StackTraceElement stackTrace[] ) | |||
{ | |||
boolean match = false; | |||
int i = 0; | |||
do | |||
{ | |||
String className = stackTrace[i].getClassName(); | |||
match = Pattern.matches( nameOfClass, className ); | |||
i++; | |||
} | |||
while ( match == false ); | |||
i--; | |||
return i; | |||
} | |||
} |
@@ -0,0 +1,726 @@ | |||
package org.apache.archiva.web.test.parent; | |||
import org.apache.archiva.web.test.XPathExpressionUtil; | |||
import org.testng.Assert; | |||
import java.io.File; | |||
import java.io.IOException; | |||
/* | |||
* 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 AbstractArchivaTest | |||
extends AbstractSeleniumTest | |||
{ | |||
protected String username; | |||
protected String fullname; | |||
protected static String getErrorMessageText() | |||
{ | |||
return getSelenium().getText( "//ul[@class='errorMessage']/li/span" ); | |||
} | |||
public String getUserEmail() | |||
{ | |||
String email = getProperty( "USERROLE_EMAIL" ); | |||
return email; | |||
} | |||
public String getUserRolePassword() | |||
{ | |||
String password = getProperty( "USERROLE_PASSWORD" ); | |||
return password; | |||
} | |||
public String getUserRoleNewPassword() | |||
{ | |||
String password_new = getProperty( "NEW_USERROLE_PASSWORD" ); | |||
return password_new; | |||
} | |||
public String getBasedir() | |||
{ | |||
String basedir = System.getProperty( "basedir" ); | |||
if ( basedir == null ) | |||
{ | |||
basedir = new File( "" ).getAbsolutePath(); | |||
} | |||
return basedir; | |||
} | |||
public String getAdminUsername() | |||
{ | |||
String adminUsername = getProperty( "ADMIN_USERNAME" ); | |||
return adminUsername; | |||
} | |||
public String getAdminPassword() | |||
{ | |||
String adminPassword = getProperty( "ADMIN_PASSWORD" ); | |||
return adminPassword; | |||
} | |||
public void assertCreateAdmin() | |||
{ | |||
assertElementPresent( "user-create" ); | |||
assertFieldValue( "admin", "username" ); | |||
assertElementPresent( "fullname" ); | |||
assertElementPresent( "password" ); | |||
assertElementPresent( "confirmPassword" ); | |||
assertElementPresent( "email" ); | |||
} | |||
public void submitAdminData( String fullname, String email, String password ) | |||
{ | |||
setFieldValue( "fullname", fullname ); | |||
setFieldValue( "email", email ); | |||
setFieldValue( "password", password ); | |||
setFieldValue( "confirmPassword", password ); | |||
clickButtonWithLocator( "user-create-form-register-button" ); | |||
//submit(); | |||
} | |||
// Go to Login Page | |||
public void goToLoginPage() | |||
{ | |||
getSelenium().open( baseUrl ); | |||
// are we already logged in ? | |||
if ( isElementVisible( "logout-link" ) ) //isElementPresent( "logoutLink" ) ) | |||
{ | |||
// so logout | |||
clickLinkWithLocator( "logout-link-a", false ); | |||
clickLinkWithLocator( "login-link-a" ); | |||
} | |||
else if ( isElementVisible( "login-link-a" ) ) | |||
{ | |||
clickLinkWithLocator( "login-link-a" ); | |||
} | |||
assertLoginModal(); | |||
} | |||
public void submitUserData( String username, String password, boolean rememberme, boolean success ) | |||
{ | |||
setFieldValue( "username", username ); | |||
setFieldValue( "password", password ); | |||
if ( rememberme ) | |||
{ | |||
checkField( "rememberMe" ); | |||
} | |||
submit(); | |||
if ( success ) | |||
{ | |||
assertUserLoggedIn( username ); | |||
} | |||
else | |||
{ | |||
assertLoginModal(); | |||
} | |||
} | |||
public void assertLoginModal() | |||
{ | |||
assertElementPresent( "user-login-form" ); | |||
Assert.assertTrue( isElementVisible( "register-link" ) ); | |||
assertElementPresent( "user-login-form-username" ); | |||
assertElementPresent( "user-login-form-password" ); | |||
assertButtonWithIdPresent( "modal-login-ok" ); | |||
} | |||
// User Management | |||
public void goToUserManagementPage() | |||
{ | |||
getSelenium().open( "/archiva/security/userlist.action" ); | |||
assertUserManagementPage(); | |||
} | |||
public void assertUserManagementPage() | |||
{ | |||
assertPage( "Apache Archiva \\ [Admin] User List" ); | |||
assertTextPresent( "[Admin] List of Users in Role: Any" ); | |||
assertTextPresent( "Navigation" ); | |||
assertImgWithAlt( "First" ); | |||
assertImgWithAlt( "Prev" ); | |||
assertImgWithAlt( "Next" ); | |||
assertImgWithAlt( "Last" ); | |||
assertTextPresent( "Display Rows" ); | |||
assertTextPresent( "Username" ); | |||
assertTextPresent( "Full Name" ); | |||
assertTextPresent( "Email" ); | |||
assertTextPresent( "Permanent" ); | |||
assertTextPresent( "Validated" ); | |||
assertTextPresent( "Locked" ); | |||
assertTextPresent( "Tasks" ); | |||
assertTextPresent( "Tools" ); | |||
assertTextPresent( "Tasks" ); | |||
assertTextPresent( "The following tools are available for administrators to manipulate the user list." ); | |||
assertButtonWithValuePresent( "Create New User" ); | |||
assertButtonWithValuePresent( "Show Users In Role" ); | |||
assertElementPresent( "roleName" ); | |||
assertTextPresent( "Reports" ); | |||
assertTextPresent( "Name" ); | |||
assertTextPresent( "Types" ); | |||
assertTextPresent( "User List" ); | |||
assertTextPresent( "Roles Matrix" ); | |||
} | |||
/* | |||
* //User Role public void goToUserRolesPage() { clickLinkWithText( "User Roles" ); assertUserRolesPage(); } | |||
*/ | |||
public void assertUserRolesPage() | |||
{ | |||
//assertPage( "Apache Archiva \\ [Admin] User Edit" ); | |||
//[Admin] Rôles de l'utilisateur | |||
assertTextPresent( "[Admin] User Roles", "[Admin] R\u00F4les de l'utilisateur" ); | |||
assertTextPresent( "Username", "Nom d'utilisateur" ); | |||
assertTextPresent( "Full Name", "Nom complet" ); | |||
String userRoles = | |||
"Guest,Registered User,System Administrator,User Administrator,Global Repository Observer,Global Repository Manager,Repository Observer,Repository Manager,internal"; | |||
String[] arrayRole = userRoles.split( "," ); | |||
for ( String userroles : arrayRole ) | |||
{ | |||
assertTextPresent( userroles ); | |||
} | |||
} | |||
public void assertDeleteUserPage( String username ) | |||
{ | |||
assertTextPresent( "[Admin] User Delete", "[Admin] Suppression de l'utilisateur", | |||
"L'utilisateur suivant va \u00EAtre supprim\u00E9:" ); | |||
assertTextPresent( "The following user will be deleted:" ); | |||
assertTextPresent( "Username: " + username, "Nom d'utilisateur:" + username ); | |||
assertButtonWithIdPresent( "userDeleteSubmit" ); | |||
} | |||
public void createUser( String userName, String fullName, String email, String password, boolean valid ) | |||
{ | |||
createUser( userName, fullName, email, password, password, valid ); | |||
} | |||
private void createUser( String userName, String fullName, String emailAd, String password, String confirmPassword, | |||
boolean valid ) | |||
{ | |||
// login( getAdminUsername() , getAdminPassword() ); | |||
getSelenium().open( "/archiva/security/userlist.action" ); | |||
clickButtonWithLocator( "userCreateButton", true ); | |||
//clickButtonWithValue( "Create New User" ); | |||
assertCreateUserPage(); | |||
setFieldValue( "user.username", userName ); | |||
setFieldValue( "user.fullName", fullName ); | |||
setFieldValue( "user.email", emailAd ); | |||
setFieldValue( "user.password", password ); | |||
setFieldValue( "user.confirmPassword", confirmPassword ); | |||
submit(); | |||
assertUserRolesPage(); | |||
//clickButtonWithValue( "Submit" ); | |||
clickButtonWithName( "submitRolesButton", true ); | |||
if ( valid ) | |||
{ | |||
String[] columnValues = { userName, fullName, emailAd }; | |||
assertElementPresent( XPathExpressionUtil.getTableRow( columnValues ) ); | |||
} | |||
else | |||
{ | |||
assertCreateUserPage(); | |||
} | |||
} | |||
public void deleteUser( String userName, String fullName, String emailAdd ) | |||
{ | |||
deleteUser( userName, fullName, emailAdd, false, false ); | |||
} | |||
public void deleteUser( String userName, String fullName, String emailAd, boolean validated, boolean locked ) | |||
{ | |||
String[] columnValues = { userName, fullName, emailAd }; | |||
// clickLinkWithText( "userlist" ); | |||
clickLinkWithXPath( "//table[@id='ec_table']/tbody[2]/tr[3]/td[7]/a/img" ); | |||
assertDeleteUserPage( userName ); | |||
submit(); | |||
assertElementNotPresent( XPathExpressionUtil.getTableRow( columnValues ) ); | |||
} | |||
public void login( String username, String password ) | |||
{ | |||
login( username, password, true, "Login Page" ); | |||
} | |||
public void login( String username, String password, boolean valid, String assertReturnPage ) | |||
{ | |||
if ( isElementVisible( "login-link-a" ) )//isElementPresent( "loginLink" ) ) | |||
{ | |||
goToLoginPage(); | |||
submitLoginPage( username, password, false, valid, assertReturnPage ); | |||
} | |||
if ( valid ) | |||
{ | |||
assertUserLoggedIn( username ); | |||
} | |||
} | |||
public void submitLoginPage( String username, String password ) | |||
{ | |||
submitLoginPage( username, password, false, true, "Login Page" ); | |||
} | |||
public void submitLoginPage( String username, String password, boolean validUsernamePassword ) | |||
{ | |||
submitLoginPage( username, password, false, validUsernamePassword, "Login Page" ); | |||
} | |||
public void submitLoginPage( String username, String password, boolean rememberMe, boolean validUsernamePassword, | |||
String assertReturnPage ) | |||
{ | |||
clickLinkWithLocator( "login-link-a", false ); | |||
setFieldValue( "user-login-form-username", username ); | |||
setFieldValue( "user-login-form-password", password ); | |||
/* | |||
if ( rememberMe ) | |||
{ | |||
checkField( "rememberMe" ); | |||
}*/ | |||
clickButtonWithLocator( "modal-login-ok" ); | |||
if ( validUsernamePassword ) | |||
{ | |||
assertUserLoggedIn( username ); | |||
} | |||
/* | |||
else | |||
{ | |||
if ( "Login Page".equals( assertReturnPage ) ) | |||
{ | |||
assertLoginPage(); | |||
} | |||
else | |||
{ | |||
assertPage( assertReturnPage ); | |||
} | |||
}*/ | |||
} | |||
protected void assertUserLoggedIn( String username ) | |||
{ | |||
Assert.assertFalse( isElementVisible( "login-link" ) ); | |||
Assert.assertTrue( isElementVisible( "logout-link" ) ); | |||
Assert.assertFalse( isElementVisible( "register-link" ) ); | |||
Assert.assertFalse( isElementVisible( "create-admin-link" ) ); | |||
} | |||
// User Roles | |||
public void assertUserRoleCheckBoxPresent( String value ) | |||
{ | |||
getSelenium().isElementPresent( | |||
"xpath=//input[@id='addRolesToUser_addNDSelectedRoles' and @name='addNDSelectedRoles' and @value='" + value | |||
+ "']" ); | |||
} | |||
public void assertResourceRolesCheckBoxPresent( String value ) | |||
{ | |||
getSelenium().isElementPresent( "xpath=//input[@name='addDSelectedRoles' and @value='" + value + "']" ); | |||
} | |||
public void checkUserRoleWithValue( String value ) | |||
{ | |||
assertUserRoleCheckBoxPresent( value ); | |||
getSelenium().click( | |||
"xpath=//input[@id='addRolesToUser_addNDSelectedRoles' and @name='addNDSelectedRoles' and @value='" + value | |||
+ "']" ); | |||
} | |||
public void checkResourceRoleWithValue( String value ) | |||
{ | |||
assertResourceRolesCheckBoxPresent( value ); | |||
getSelenium().click( "xpath=//input[@name='addDSelectedRoles' and @value='" + value + "']" ); | |||
} | |||
public void changePassword( String oldPassword, String newPassword ) | |||
{ | |||
assertPage( "Apache Archiva \\ Change Password" ); | |||
setFieldValue( "existingPassword", oldPassword ); | |||
setFieldValue( "newPassword", newPassword ); | |||
setFieldValue( "newPasswordConfirm", newPassword ); | |||
clickButtonWithValue( "Change Password" ); | |||
} | |||
public void assertCreateUserPage() | |||
{ | |||
//assertPage( "Apache Archiva \\ [Admin] User Create" ); | |||
//assertTextPresent( "[Admin] User Create" ); | |||
assertTextPresent( "Username*:", "Nom d'utilisateur*:" ); | |||
assertElementPresent( "user.username" ); | |||
assertTextPresent( "Full Name*:", "Nom complet*:" ); | |||
assertElementPresent( "user.fullName" ); | |||
assertTextPresent( "Email Address*:", "Adresse email*:" ); | |||
assertElementPresent( "user.email" ); | |||
assertTextPresent( "Password*:", "Mot de passe*:" ); | |||
assertElementPresent( "user.password" ); | |||
assertTextPresent( "Confirm Password*:", "Confirmer le mot de passe*" ); | |||
assertElementPresent( "user.confirmPassword" ); | |||
//assertButtonWithValuePresent( "Create User" ); | |||
assertButtonWithIdPresent( "userCreateSubmit" ); | |||
// assertElementNotPresent( "userCreateSubmit" ); | |||
} | |||
public void assertLeftNavMenuWithRole( String role ) | |||
{ | |||
if ( role.equals( "Guest" ) || role.equals( "Registered User" ) || role.equals( "Global Repository Observer" ) | |||
|| role.equals( "Repository Observer - internal" ) || role.equals( "Repository Observer - snapshots" ) ) | |||
{ | |||
assertTextPresent( "Search" ); | |||
assertLinkPresent( "Find Artifact" ); | |||
assertLinkPresent( "Browse" ); | |||
assertLinkNotPresent( "Repositories" ); | |||
} | |||
else if ( role.equals( "User Administrator" ) ) | |||
{ | |||
assertTextPresent( "Search" ); | |||
assertLinkPresent( "Find Artifact" ); | |||
assertLinkPresent( "Browse" ); | |||
assertLinkPresent( "User Management" ); | |||
assertLinkPresent( "User Roles" ); | |||
assertLinkNotPresent( "Repositories" ); | |||
} | |||
else if ( role.equals( "Global Repository Manager" ) || role.equals( "Repository Manager - internal" ) | |||
|| role.equals( "Repository Manager - snapshots" ) ) | |||
{ | |||
assertTextPresent( "Search" ); | |||
assertLinkPresent( "Find Artifact" ); | |||
assertLinkPresent( "Browse" ); | |||
assertLinkPresent( "Upload Artifact" ); | |||
assertLinkPresent( "Delete Artifact" ); | |||
assertLinkNotPresent( "Repositories" ); | |||
} | |||
else | |||
{ | |||
assertTextPresent( "Search" ); | |||
String navMenu = | |||
"Find Artifact,Browse,Reports,User Management,User Roles,Appearance,Upload Artifact,Delete Artifact,Repository Groups,Repositories,Proxy Connectors,Legacy Support,Network Proxies,Repository Scanning"; | |||
String[] arrayMenu = navMenu.split( "," ); | |||
for ( String navmenu : arrayMenu ) | |||
{ | |||
assertLinkPresent( navmenu ); | |||
} | |||
} | |||
} | |||
// Find Artifact | |||
public void goToFindArtifactPage() | |||
{ | |||
getSelenium().open( "/archiva/findArtifact.action" ); | |||
assertFindArtifactPage(); | |||
} | |||
public void assertFindArtifactPage() | |||
{ | |||
//assertPage( "Apache Archiva \\ Find Artifact" ); | |||
assertElementPresent( "searchBox" ); | |||
//assertTextPresent( "Find Artifact" ); | |||
//assertTextPresent( "Search for:" ); | |||
//assertTextPresent( "Checksum:" ); | |||
assertElementPresent( "quickSearchBox" ); | |||
assertElementPresent( "checksumSearch" ); | |||
//assertButtonWithValuePresent( "Search" ); | |||
assertElementPresent( "checksumSearch_0" ); | |||
} | |||
// Appearance | |||
public void goToAppearancePage() | |||
{ | |||
getSelenium().open( "/archiva/admin/configureAppearance.action" ); | |||
assertAppearancePage(); | |||
} | |||
public void assertAppearancePage() | |||
{ | |||
assertPage( "Apache Archiva \\ Configure Appearance" ); | |||
String appearance = | |||
"Appearance,Organization Details,The logo in the top right of the screen is controlled by the following settings.,Organization Information,Name,URL,Logo URL"; | |||
String[] arrayAppearance = appearance.split( "," ); | |||
for ( String appear : arrayAppearance ) | |||
{ | |||
assertTextPresent( appear ); | |||
} | |||
assertLinkPresent( "Edit" ); | |||
assertLinkPresent( "Change your appearance" ); | |||
} | |||
public void addEditAppearance( String name, String url, String logoUrl, boolean wait ) | |||
{ | |||
setFieldValue( "organisationName", name ); | |||
setFieldValue( "organisationUrl", url ); | |||
setFieldValue( "organisationLogo", logoUrl ); | |||
clickButtonWithValue( "Save", wait ); | |||
} | |||
public void goToHomePage() | |||
{ | |||
getSelenium().open( "" ); | |||
} | |||
// Upload Artifact | |||
public void goToAddArtifactPage() | |||
{ | |||
// must be logged as admin | |||
getSelenium().open( "/archiva/upload.action" ); | |||
assertAddArtifactPage(); | |||
} | |||
public void assertAddArtifactPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Upload Artifact" ); | |||
assertTextPresent( "Upload Artifact" ); | |||
String artifact = | |||
"Upload Artifact,Group Id*:,Artifact Id*:,Version*:,Packaging*:,Classifier:,Generate Maven 2 POM,Artifact File*:,POM File:,Repository Id:"; | |||
String[] arrayArtifact = artifact.split( "," ); | |||
for ( String arrayartifact : arrayArtifact ) | |||
{ | |||
assertTextPresent( arrayartifact ); | |||
} | |||
String artifactElements = | |||
"upload_groupId,upload_artifactId,upload_version,upload_packaging,upload_classifier,upload_generatePom,upload_artifact,upload_pom,upload_repositoryId,uploadSubmit"; | |||
String[] arrayArtifactElements = artifactElements.split( "," ); | |||
for ( String artifactelements : arrayArtifactElements ) | |||
{ | |||
assertElementPresent( artifactelements ); | |||
} | |||
} | |||
public void addArtifact( String groupId, String artifactId, String version, String packaging, | |||
String artifactFilePath, String repositoryId, boolean wait ) | |||
{ | |||
addArtifact( groupId, artifactId, version, packaging, true, artifactFilePath, repositoryId, wait ); | |||
} | |||
public void addArtifact( String groupId, String artifactId, String version, String packaging, boolean generatePom, | |||
String artifactFilePath, String repositoryId, boolean wait ) | |||
{ | |||
login( getProperty( "ADMIN_USERNAME" ), getProperty( "ADMIN_PASSWORD" ) ); | |||
goToAddArtifactPage(); | |||
setFieldValue( "groupId", groupId ); | |||
setFieldValue( "artifactId", artifactId ); | |||
setFieldValue( "version", version ); | |||
setFieldValue( "packaging", packaging ); | |||
if ( generatePom ) | |||
{ | |||
checkField( "generatePom" ); | |||
} | |||
String path; | |||
if ( artifactFilePath != null && artifactFilePath.trim().length() > 0 ) | |||
{ | |||
File f = new File( artifactFilePath ); | |||
try | |||
{ | |||
path = f.getCanonicalPath(); | |||
} | |||
catch ( IOException e ) | |||
{ | |||
path = f.getAbsolutePath(); | |||
} | |||
} | |||
else | |||
{ | |||
path = artifactFilePath; | |||
} | |||
setFieldValue( "artifact", path ); | |||
selectValue( "upload_repositoryId", repositoryId ); | |||
//clickButtonWithValue( "Submit" ); | |||
clickButtonWithLocator( "uploadSubmit", wait ); | |||
} | |||
public void goToRepositoriesPage() | |||
{ | |||
if ( !getTitle().equals( "Apache Archiva \\ Administration - Repositories" ) ) | |||
{ | |||
getSelenium().open( "/archiva/admin/repositories.action" ); | |||
} | |||
assertRepositoriesPage(); | |||
} | |||
public void assertRepositoriesPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Repositories" ); | |||
assertTextPresent( "Administration - Repositories" ); | |||
assertTextPresent( "Managed Repositories" ); | |||
assertTextPresent( "Remote Repositories" ); | |||
} | |||
public void addManagedRepository( String identifier, String name, String directory, String indexDirectory, | |||
String type, String cron, String daysOlder, String retentionCount, boolean wait ) | |||
{ | |||
// goToRepositoriesPage(); | |||
// clickLinkWithText( "Add" ); | |||
setFieldValue( "repository.id", identifier ); | |||
setFieldValue( "repository.name", name ); | |||
setFieldValue( "repository.location", directory ); | |||
setFieldValue( "repository.indexDirectory", indexDirectory ); | |||
selectValue( "repository.layout", type ); | |||
setFieldValue( "repository.cronExpression", cron ); | |||
setFieldValue( "repository.daysOlder", daysOlder ); | |||
setFieldValue( "repository.retentionCount", retentionCount ); | |||
// TODO | |||
clickButtonWithValue( "Add Repository", wait ); | |||
} | |||
// artifact management | |||
public void assertDeleteArtifactPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Delete Artifact" ); | |||
assertTextPresent( "Delete Artifact" ); | |||
assertTextPresent( "Group Id*:" ); | |||
assertTextPresent( "Artifact Id*:" ); | |||
assertTextPresent( "Version*:" ); | |||
assertTextPresent( "Repository Id:" ); | |||
assertElementPresent( "groupId" ); | |||
assertElementPresent( "artifactId" ); | |||
assertElementPresent( "version" ); | |||
assertElementPresent( "repositoryId" ); | |||
assertButtonWithValuePresent( "Submit" ); | |||
} | |||
// network proxies | |||
public void goToNetworkProxiesPage() | |||
{ | |||
clickLinkWithText( "Network Proxies" ); | |||
assertNetworkProxiesPage(); | |||
} | |||
public void assertNetworkProxiesPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Network Proxies" ); | |||
assertTextPresent( "Administration - Network Proxies" ); | |||
assertTextPresent( "Network Proxies" ); | |||
assertLinkPresent( "Add Network Proxy" ); | |||
} | |||
public void addNetworkProxy( String identifier, String protocol, String hostname, String port, String username, | |||
String password ) | |||
{ | |||
//goToNetworkProxiesPage(); | |||
clickLinkWithText( "Add Network Proxy" ); | |||
assertAddNetworkProxy(); | |||
setFieldValue( "proxy.id", identifier ); | |||
setFieldValue( "proxy.protocol", protocol ); | |||
setFieldValue( "proxy.host", hostname ); | |||
setFieldValue( "proxy.port", port ); | |||
setFieldValue( "proxy.username", username ); | |||
setFieldValue( "proxy.password", password ); | |||
clickButtonWithValue( "Save Network Proxy" ); | |||
} | |||
public void assertAddNetworkProxy() | |||
{ | |||
assertPage( "Apache Archiva \\ Admin: Add Network Proxy" ); | |||
assertTextPresent( "Admin: Add Network Proxy" ); | |||
assertTextPresent( "Add network proxy:" ); | |||
assertTextPresent( "Identifier*:" ); | |||
assertTextPresent( "Protocol*:" ); | |||
assertTextPresent( "Hostname*:" ); | |||
assertTextPresent( "Port*:" ); | |||
assertTextPresent( "Username:" ); | |||
assertTextPresent( "Password:" ); | |||
assertButtonWithValuePresent( "Save Network Proxy" ); | |||
} | |||
// Legacy Support | |||
public void goToLegacySupportPage() | |||
{ | |||
getSelenium().open( "/archiva/admin/legacyArtifactPath.action" ); | |||
assertLegacySupportPage(); | |||
} | |||
public void assertLegacySupportPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Legacy Support" ); | |||
assertTextPresent( "Administration - Legacy Artifact Path Resolution" ); | |||
assertTextPresent( "Path Mappings" ); | |||
assertLinkPresent( "Add" ); | |||
} | |||
public void addLegacyArtifactPath( String path, String groupId, String artifactId, String version, | |||
String classifier, String type, boolean wait ) | |||
{ | |||
assertAddLegacyArtifactPathPage(); | |||
setFieldValue( "legacyArtifactPath.path", path ); | |||
setFieldValue( "groupId", groupId ); | |||
setFieldValue( "artifactId", artifactId ); | |||
setFieldValue( "version", version ); | |||
setFieldValue( "classifier", classifier ); | |||
setFieldValue( "type", type ); | |||
clickButtonWithValue( "Add Legacy Artifact Path", wait ); | |||
} | |||
public void assertAddLegacyArtifactPathPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Admin: Add Legacy Artifact Path" ); | |||
assertTextPresent( "Admin: Add Legacy Artifact Path" ); | |||
assertTextPresent( | |||
"Enter the legacy path to map to a particular artifact reference, then adjust the fields as necessary." ); | |||
String element = | |||
"addLegacyArtifactPath_legacyArtifactPath_path,addLegacyArtifactPath_groupId,addLegacyArtifactPath_artifactId,addLegacyArtifactPath_version,addLegacyArtifactPath_classifier,addLegacyArtifactPath_type"; | |||
String[] arrayElement = element.split( "," ); | |||
for ( String arrayelement : arrayElement ) | |||
{ | |||
assertElementPresent( arrayelement ); | |||
} | |||
assertButtonWithValuePresent( "Add Legacy Artifact Path" ); | |||
} | |||
// add managed repository and its staging repository | |||
public void addStagingRepository( String identifier, String name, String directory, String indexDirectory, | |||
String type, String cron, String daysOlder, String retentionCount ) | |||
{ | |||
setFieldValue( "repository.id", identifier ); | |||
setFieldValue( "repository.name", name ); | |||
setFieldValue( "repository.location", directory ); | |||
setFieldValue( "repository.indexDirectory", indexDirectory ); | |||
selectValue( "repository.layout", type ); | |||
setFieldValue( "repository.cronExpression", cron ); | |||
setFieldValue( "repository.daysOlder", daysOlder ); | |||
setFieldValue( "repository.retentionCount", retentionCount ); | |||
checkField( "stageNeeded" ); | |||
clickButtonWithValue( "Add Repository" ); | |||
} | |||
protected void logout() | |||
{ | |||
clickLinkWithText( "Logout" ); | |||
assertTextNotPresent( "Current User:" ); | |||
assertLinkNotPresent( "Edit Details" ); | |||
assertLinkNotPresent( "Logout" ); | |||
assertLinkPresent( "Login" ); | |||
} | |||
} |
@@ -0,0 +1,82 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 AbstractArtifactManagementTest | |||
extends AbstractArchivaTest | |||
{ | |||
public String getGroupId() | |||
{ | |||
String groupId = getProperty( "GROUPID" ); | |||
return groupId; | |||
} | |||
public String getArtifactId() | |||
{ | |||
String artifactId = getProperty( "ARTIFACTID" ); | |||
return artifactId; | |||
} | |||
public String getVersion() | |||
{ | |||
String version = getProperty( "VERSION" ); | |||
return version; | |||
} | |||
public String getPackaging() | |||
{ | |||
String packaging = getProperty( "PACKAGING" ); | |||
return packaging; | |||
} | |||
public String getArtifactFilePath() | |||
{ | |||
return "src/test/resources/snapshots/org/apache/maven/archiva/web/test/foo-bar/1.0-SNAPSHOT/foo-bar-1.0-SNAPSHOT.jar"; | |||
} | |||
public String getRepositoryId() | |||
{ | |||
String repositoryId = getProperty( "REPOSITORYID" ); | |||
return repositoryId; | |||
} | |||
public void goToDeleteArtifactPage() | |||
{ | |||
login( getProperty( "ADMIN_USERNAME" ), getProperty( "ADMIN_PASSWORD" ) ); | |||
getSelenium().open( "/archiva/deleteArtifact.action" ); | |||
assertDeleteArtifactPage(); | |||
} | |||
public void deleteArtifact( String groupId, String artifactId, String version, String repositoryId ) | |||
{ | |||
deleteArtifact( groupId, artifactId, version, repositoryId, false ); | |||
} | |||
public void deleteArtifact( String groupId, String artifactId, String version, String repositoryId, boolean wait ) | |||
{ | |||
goToDeleteArtifactPage(); | |||
setFieldValue( "groupId", groupId ); | |||
setFieldValue( "artifactId", artifactId ); | |||
setFieldValue( "version", version ); | |||
selectValue( "repositoryId", repositoryId ); | |||
clickButtonWithValue( "Submit", wait ); | |||
} | |||
} |
@@ -0,0 +1,80 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 AbstractArtifactReportsTest | |||
extends AbstractArchivaTest | |||
{ | |||
// Reports | |||
public void goToReportsPage() | |||
{ | |||
getSelenium().open( "/archiva/report/pickReport.action" ); | |||
assertReportsPage(); | |||
} | |||
public void assertReportsPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Reports" ); | |||
assertTextPresent( "Reports" ); | |||
assertTextPresent( "Repository Statistics" ); | |||
assertTextPresent( "Repositories To Be Compared" ); | |||
assertElementPresent( "availableRepositories" ); | |||
assertButtonWithValuePresent( "v" ); | |||
assertButtonWithValuePresent( "^" ); | |||
assertButtonWithValuePresent( "<-" ); | |||
assertButtonWithValuePresent( "->" ); | |||
assertButtonWithValuePresent( "<<--" ); | |||
assertButtonWithValuePresent( "-->>" ); | |||
assertButtonWithValuePresent( "<*>" ); | |||
assertElementPresent( "selectedRepositories" ); | |||
assertButtonWithValuePresent( "v" ); | |||
assertButtonWithValuePresent( "^" ); | |||
assertTextPresent( "Row Count" ); | |||
assertElementPresent( "rowCount" ); | |||
assertTextPresent( "Start Date" ); | |||
assertElementPresent( "startDate" ); | |||
assertTextPresent( "End Date" ); | |||
assertElementPresent( "endDate" ); | |||
assertButtonWithValuePresent( "View Statistics" ); | |||
assertTextPresent( "Repository Health" ); | |||
assertTextPresent( "Row Count" ); | |||
assertElementPresent( "rowCount" ); | |||
assertTextPresent( "Group ID" ); | |||
assertElementPresent( "groupId" ); | |||
assertTextPresent( "Repository ID" ); | |||
assertElementPresent( "repositoryId" ); | |||
assertButtonWithValuePresent( "Show Report" ); | |||
} | |||
public void compareRepositories( String labelSelected, String startDate, String endDate ) | |||
{ | |||
goToReportsPage(); | |||
getSelenium().removeSelection( "generateStatisticsReport_availableRepositories", labelSelected ); | |||
clickButtonWithValue( "->", false ); | |||
getSelenium().type( "startDate", startDate ); | |||
// clickLinkWithLocator( "1" , false ); | |||
// getSelenium().click( "endDate" ); | |||
getSelenium().type( "endDate", endDate ); | |||
// clickLinkWithLocator( "30" , false ); | |||
clickButtonWithValue( "View Statistics" ); | |||
} | |||
} |
@@ -0,0 +1,40 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 AbstractBrowseTest | |||
extends AbstractArchivaTest | |||
{ | |||
// Browse | |||
public void goToBrowsePage() | |||
{ | |||
getSelenium().open( "/archiva/browse" ); | |||
assertBrowsePage(); | |||
} | |||
public void assertBrowsePage() | |||
{ | |||
assertPage( "Apache Archiva \\ Browse Repository" ); | |||
assertTextPresent( "Browse Repository" ); | |||
assertTextPresent( "Groups" ); | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 java.io.File; | |||
public class AbstractMergingRepositoriesTest | |||
extends AbstractArchivaTest | |||
{ | |||
public void goToAuditLogReports() | |||
{ | |||
getSelenium().open( "/archiva/report/queryAuditLogReport.action" ); | |||
} | |||
public String getRepositoryDir() | |||
{ | |||
File f = new File( "" ); | |||
String artifactFilePath = f.getAbsolutePath(); | |||
return artifactFilePath + "/target/"; | |||
} | |||
public void editManagedRepository() | |||
{ | |||
goToRepositoriesPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div/div[5]/div[1]/a[1]/img" ); | |||
assertPage( "Apache Archiva \\ Admin: Edit Managed Repository" ); | |||
checkField( "repository.blockRedeployments" ); | |||
clickButtonWithValue( "Update Repository" ); | |||
} | |||
public String getGroupId() | |||
{ | |||
return getProperty( "VALIDARTIFACT_GROUPID" ); | |||
} | |||
public String getArtifactId() | |||
{ | |||
return getProperty( "VALIDARTIFACT_ARTIFACTID" ); | |||
} | |||
public String getVersion() | |||
{ | |||
return getProperty( "VERSION" ); | |||
} | |||
public String getPackaging() | |||
{ | |||
return getProperty( "PACKAGING" ); | |||
} | |||
public String getValidArtifactFilePath() | |||
{ | |||
return "src/test/resources/snapshots/org/apache/maven/archiva/web/test/foo-bar/1.0-SNAPSHOT/foo-bar-1.0-SNAPSHOT.jar"; | |||
} | |||
} |
@@ -0,0 +1,358 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 java.io.File; | |||
import org.testng.Assert; | |||
public abstract class AbstractRepositoryTest | |||
extends AbstractArchivaTest | |||
{ | |||
// Repository Groups | |||
public void goToRepositoryGroupsPage() | |||
{ | |||
if ( !getTitle().equals( "Apache Archiva \\ Administration - Repository Groups" ) ) | |||
{ | |||
getSelenium().open( "/archiva/admin/repositoryGroups.action" ); | |||
} | |||
assertRepositoryGroupsPage(); | |||
} | |||
public void assertRepositoryGroupsPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Repository Groups" ); | |||
assertTextPresent( "Administration - Repository Groups" ); | |||
assertTextPresent( "Identifier*:" ); | |||
assertElementPresent( "repositoryGroup.id" ); | |||
assertButtonWithValuePresent( "Add Group" ); | |||
assertTextPresent( "Repository Groups" ); | |||
} | |||
public void assertAddedRepositoryLink( String repositoryGroupName ) | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Repository Groups" ); | |||
String repositoryGroupUrlValue = "repository/" + repositoryGroupName + "/"; | |||
String baseUrlValue = "archiva"; | |||
String repositoryGroupLink = baseUrl.replaceFirst( baseUrlValue, repositoryGroupUrlValue ); | |||
assertTextPresent( repositoryGroupLink ); | |||
} | |||
public void assertAddedRepositoryToRepositoryGroups( String repositoryName ) | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Repository Groups" ); | |||
assertTextPresent( repositoryName ); | |||
assertTextPresent( "Archiva Managed Internal Repository" ); | |||
assertAddedRepositoryLink( repositoryName ); | |||
} | |||
public void assertDeleteRepositoryGroupPage( String repositoryName ) | |||
{ | |||
assertPage( "Apache Archiva \\ Admin: Delete Repository Group" ); | |||
assertTextPresent( "WARNING: This operation can not be undone." ); | |||
assertTextPresent( "Are you sure you want to delete the following repository group?" ); | |||
assertTextPresent( "ID:" ); | |||
assertTextPresent( repositoryName ); | |||
assertButtonWithValuePresent( "Confirm" ); | |||
assertButtonWithValuePresent( "Cancel" ); | |||
} | |||
public void addRepositoryGroup( String repoGroupName, boolean wait ) | |||
{ | |||
goToRepositoryGroupsPage(); | |||
setFieldValue( "repositoryGroup.id", repoGroupName ); | |||
clickButtonWithValue( "Add Group", wait ); | |||
} | |||
public void addRepositoryToRepositoryGroup( String repositoryGroupName, String repositoryName ) | |||
{ | |||
goToRepositoryGroupsPage(); | |||
String s = getSelenium().getBodyText(); | |||
if ( s.contains( "No Repository Groups Defined." ) ) | |||
{ | |||
setFieldValue( "repositoryGroup.id", repositoryGroupName ); | |||
clickButtonWithValue( "Add Group" ); | |||
// assertAddedRepositoryLink( repositoryGroupName ); | |||
selectValue( "addRepositoryToGroup_repoId", repositoryName ); | |||
clickButtonWithValue( "Add Repository" ); | |||
assertAddedRepositoryToRepositoryGroups( repositoryName ); | |||
} | |||
else | |||
{ | |||
// assertAddedRepositoryLink( repositoryGroupName ); | |||
selectValue( "addRepositoryToGroup_repoId", repositoryName ); | |||
clickButtonWithValue( "Add Repository" ); | |||
} | |||
} | |||
public void deleteRepositoryInRepositoryGroups() | |||
{ | |||
goToRepositoryGroupsPage(); | |||
getSelenium().click( "xpath=//div[@id='contentArea']/div[2]/div/div[3]/div[1]/a/img" ); | |||
waitPage(); | |||
} | |||
public void deleteRepositoryGroup( String repositoryName ) | |||
{ | |||
getSelenium().click( "xpath=//div[@id='contentArea']/div[2]/div/div[1]/div/a/img" ); | |||
waitPage(); | |||
assertDeleteRepositoryGroupPage( repositoryName ); | |||
clickButtonWithValue( "Confirm" ); | |||
} | |||
// ///////////////////////////// | |||
// proxy connectors | |||
// ///////////////////////////// | |||
public void goToProxyConnectorsPage() | |||
{ | |||
clickLinkWithText( "Proxy Connectors" ); | |||
assertProxyConnectorsPage(); | |||
} | |||
public void assertProxyConnectorsPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Proxy Connectors" ); | |||
assertTextPresent( "Administration - Proxy Connectors" ); | |||
assertTextPresent( "Repository Proxy Connectors" ); | |||
assertTextPresent( "internal" ); | |||
assertTextPresent( "Archiva Managed Internal Repository" ); | |||
assertTextPresent( "Proxy Connector" ); | |||
assertTextPresent( "Central Repository" ); | |||
} | |||
public void assertAddProxyConnectorPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Admin: Add Proxy Connector" ); | |||
assertTextPresent( "Admin: Add Proxy Connector" ); | |||
String proxy = | |||
"Network Proxy*:,Managed Repository*:,Remote Repository*:,Policies:,Return error when:,On remote error:,Releases:,Snapshots:,Checksum:,Cache failures:,Properties:,No properties have been set.,Black List:,No black list patterns have been set.,White List:,No white list patterns have been set."; | |||
String[] arrayProxy = proxy.split( "," ); | |||
for ( String arrayproxy : arrayProxy ) | |||
assertTextPresent( arrayproxy ); | |||
/* | |||
* String proxyElements = | |||
* "addProxyConnector_connector_proxyId,addProxyConnector_connector_sourceRepoId,addProxyConnector_connector_targetRepoId,policy_propagate-errors-on-update,policy_propagate-errors,policy_releases,policy_snapshots,policy_checksum,policy_cache-failures,propertiesEntry,propertiesValue,blackListEntry,whiteListEntry" | |||
* ; String[] arrayProxyElements = proxyElements.split( "," ); for ( String arrayproxyelements : | |||
* arrayProxyElements ) assertTextPresent( arrayproxyelements ); | |||
*/ | |||
assertButtonWithValuePresent( "Add Property" ); | |||
assertButtonWithValuePresent( "Add Pattern" ); | |||
assertButtonWithValuePresent( "Add Proxy Connector" ); | |||
} | |||
// this only fills in the values of required fields in adding Proxy Connectors | |||
public void addProxyConnector( String networkProxy, String managedRepo, String remoteRepo ) | |||
{ | |||
goToProxyConnectorsPage(); | |||
clickLinkWithText( "Add" ); | |||
assertAddProxyConnectorPage(); | |||
selectValue( "connector.proxyId", networkProxy ); | |||
selectValue( "connector.sourceRepoId", managedRepo ); | |||
selectValue( "connector.targetRepoId", remoteRepo ); | |||
clickButtonWithValue( "Add Proxy Connector" ); | |||
} | |||
public void deleteProxyConnector() | |||
{ | |||
goToProxyConnectorsPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div[2]/div[1]/div[2]/div[1]/a[3]/img" ); | |||
assertPage( "Apache Archiva \\ Admin: Delete Proxy Connectors" ); | |||
clickButtonWithValue( "Delete" ); | |||
assertPage( "Apache Archiva \\ Administration - Proxy Connectors" ); | |||
} | |||
// ///////////////////////////// | |||
// network proxies | |||
// ///////////////////////////// | |||
public void editNetworkProxies( String fieldName, String value ) | |||
{ | |||
// goToNetworkProxiesPage(); | |||
clickLinkWithText( "Edit Network Proxy" ); | |||
setFieldValue( fieldName, value ); | |||
clickButtonWithValue( "Save Network Proxy" ); | |||
} | |||
public void deleteNetworkProxy() | |||
{ | |||
// goToNetworkProxiesPage(); | |||
clickLinkWithText( "Delete Network Proxy" ); | |||
assertPage( "Apache Archiva \\ Admin: Delete Network Proxy" ); | |||
assertTextPresent( "WARNING: This operation can not be undone." ); | |||
clickButtonWithValue( "Delete" ); | |||
} | |||
// remote repositories | |||
public void assertAddRemoteRepository() | |||
{ | |||
assertPage( "Apache Archiva \\ Admin: Add Remote Repository" ); | |||
String remote = "Identifier*:,Name*:,URL*:,Username:,Password:,Timeout in seconds:,Type:"; | |||
String[] arrayRemote = remote.split( "," ); | |||
for ( String arrayremote : arrayRemote ) | |||
assertTextPresent( arrayremote ); | |||
String remoteElements = | |||
"addRemoteRepository_repository_id,addRemoteRepository_repository_name,addRemoteRepository_repository_url,addRemoteRepository_repository_userName,addRemoteRepository_repository_password,addRemoteRepository_repository_timeout,addRemoteRepository_repository_layout"; | |||
String[] arrayRemoteElements = remoteElements.split( "," ); | |||
for ( String arrayremotelement : arrayRemoteElements ) | |||
assertElementPresent( arrayremotelement ); | |||
} | |||
public void assertDeleteRemoteRepositoryPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Admin: Delete Remote Repository" ); | |||
assertTextPresent( "Admin: Delete Remote Repository" ); | |||
assertTextPresent( "WARNING: This operation can not be undone." ); | |||
assertTextPresent( "Are you sure you want to delete the following remote repository?" ); | |||
assertButtonWithValuePresent( "Confirm" ); | |||
assertButtonWithValuePresent( "Cancel" ); | |||
} | |||
public void addRemoteRepository( String identifier, String name, String url, String username, String password, | |||
String timeout, String type, boolean wait ) | |||
{ | |||
assertAddRemoteRepository(); | |||
setFieldValue( "addRemoteRepository_repository_id", identifier ); | |||
setFieldValue( "addRemoteRepository_repository_name", name ); | |||
setFieldValue( "addRemoteRepository_repository_url", url ); | |||
setFieldValue( "addRemoteRepository_repository_userName", username ); | |||
setFieldValue( "addRemoteRepository_repository_password", password ); | |||
setFieldValue( "addRemoteRepository_repository_timeout", timeout ); | |||
selectValue( "addRemoteRepository_repository_layout", type ); | |||
clickButtonWithValue( "Add Repository", wait ); | |||
} | |||
public void deleteRemoteRepository() | |||
{ | |||
goToRepositoriesPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div/div[8]/div[1]/a[2]" ); | |||
assertDeleteRemoteRepositoryPage(); | |||
clickButtonWithValue( "Confirm" ); | |||
} | |||
public void editRemoteRepository( String fieldName, String value ) | |||
{ | |||
goToRepositoriesPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div/div[8]/div[1]/a[1]" ); | |||
setFieldValue( fieldName, value ); | |||
clickButtonWithValue( "Update Repository" ); | |||
} | |||
public void editManagedRepository( String fieldName, String value ) | |||
{ | |||
goToRepositoriesPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div/div[5]/div[1]/a[1]/img" ); | |||
assertPage( "Apache Archiva \\ Admin: Edit Managed Repository" ); | |||
setFieldValue( fieldName, value ); | |||
// TODO | |||
clickButtonWithValue( "Update Repository" ); | |||
} | |||
public void editManagedRepository(String name, String directory, String indexDirectory, String type, String cron, String daysOlder, String retentionCount) | |||
{ | |||
goToRepositoriesPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div/div[5]/div[1]/a[1]/img" ); | |||
assertPage( "Apache Archiva \\ Admin: Edit Managed Repository" ); | |||
setFieldValue( "repository.name" , name ); | |||
setFieldValue( "repository.location" , directory ); | |||
setFieldValue( "repository.indexDirectory" , indexDirectory ); | |||
selectValue( "repository.layout", type ); | |||
setFieldValue( "repository.cronExpression" , cron ); | |||
setFieldValue( "repository.daysOlder" , daysOlder ); | |||
setFieldValue( "repository.retentionCount" , retentionCount ); | |||
clickButtonWithValue( "Update Repository" ); | |||
} | |||
public void deleteManagedRepository() | |||
{ | |||
clickLinkWithXPath( "//div[@id='contentArea']/div/div[5]/div[1]/a[2]" ); | |||
assertPage( "Apache Archiva \\ Admin: Delete Managed Repository" ); | |||
clickButtonWithValue( "Delete Configuration Only" ); | |||
} | |||
public String getRepositoryDir() | |||
{ | |||
File f = new File( "" ); | |||
String artifactFilePath = f.getAbsolutePath(); | |||
return artifactFilePath + "/target/"; | |||
} | |||
// /////////////////////////////////////////// | |||
// Repository Scanning | |||
// /////////////////////////////////////////// | |||
public void goToRepositoryScanningPage() | |||
{ | |||
getSelenium().open( "/archiva/admin/repositoryScanning.action" ); | |||
assertRepositoryScanningPage(); | |||
} | |||
public void assertRepositoryScanningPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Repository Scanning" ); | |||
assertTextPresent( "Administration - Repository Scanning" ); | |||
assertTextPresent( "Repository Scanning - File Types" ); | |||
String artifactsTypes = | |||
"**/*.pom,**/*.jar,**/*.ear,**/*.war,**/*.car,**/*.sar,**/*.mar,**/*.rar,**/*.dtd,**/*.tld,**/*.tar.gz,**/*.tar.bz2,**/*.zip"; | |||
String[] arrayArtifactTypes = artifactsTypes.split( "," ); | |||
for ( int i = 0; i < arrayArtifactTypes.length; i++ ) | |||
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[1]/table." + i + ".0" ), | |||
arrayArtifactTypes[i] ); | |||
String autoremove = "**/*.bak,**/*~,**/*-"; | |||
String[] arrayAutoremove = autoremove.split( "," ); | |||
for ( int i = 0; i < arrayAutoremove.length; i++ ) | |||
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[2]/table." + i + ".0" ), | |||
arrayAutoremove[i] ); | |||
String ignored = "**/.htaccess,**/KEYS,**/*.rb,**/*.sh,**/.svn/**,**/.DAV/**"; | |||
String[] arrayIgnored = ignored.split( "," ); | |||
for ( int i = 0; i < arrayIgnored.length; i++ ) | |||
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[3]/table." + i + ".0" ), | |||
arrayIgnored[i] ); | |||
String indexableContent = | |||
"**/*.txt,**/*.TXT,**/*.block,**/*.config,**/*.pom,**/*.xml,**/*.xsd,**/*.dtd,**/*.tld"; | |||
String[] arrayIndexableContent = indexableContent.split( "," ); | |||
for ( int i = 0; i < arrayIndexableContent.length; i++ ) | |||
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[4]/table." + i + ".0" ), | |||
arrayIndexableContent[i] ); | |||
} | |||
// /////////////////////////////////////////// | |||
// Database | |||
// /////////////////////////////////////////// | |||
public void goToDatabasePage() | |||
{ | |||
clickLinkWithText( "Database" ); | |||
assertDatabasePage(); | |||
} | |||
public void assertDatabasePage() | |||
{ | |||
assertPage( "Apache Archiva \\ Administration - Database" ); | |||
assertTextPresent( "Administration - Database" ); | |||
assertTextPresent( "Database - Unprocessed Artifacts Scanning" ); | |||
assertTextPresent( "Cron:" ); | |||
assertElementPresent( "database_cron" ); | |||
assertButtonWithValuePresent( "Update Cron" ); | |||
assertButtonWithValuePresent( "Update Database Now" ); | |||
assertTextPresent( "Database - Unprocessed Artifacts Scanning" ); | |||
assertTextPresent( "Database - Artifact Cleanup Scanning" ); | |||
} | |||
} |
@@ -0,0 +1,117 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 AbstractSearchTest | |||
extends AbstractArchivaTest | |||
{ | |||
// Search | |||
public void goToSearchPage() | |||
{ | |||
goToHomePage(); | |||
if (!isElementPresent( "quickSearchBox" ) ) | |||
{ | |||
getSelenium().open( "/index.action"); | |||
//getSelenium().waitForPageToLoad( maxWaitTimeInMs ); | |||
waitPage(); | |||
assertElementPresent( "quickSearchSubmit" ); | |||
} | |||
} | |||
public void assertSearchPage() | |||
{ | |||
assertPage( "Apache Archiva \\ Quick Search" ); | |||
assertTextPresent( "Search for" ); | |||
assertElementPresent( "quickSearchSubmit" ); | |||
assertButtonWithValuePresent( "Search" ); | |||
// assertLinkPresent( "Advanced Search" ); | |||
assertTextPresent( "Enter your search terms. A variety of data will be searched for your keywords." ); | |||
// assertButtonWithDivIdPresent( "searchHint" ); | |||
} | |||
public void searchForArtifact( String artifactId ) | |||
{ | |||
goToSearchPage(); | |||
setFieldValue( "quickSearchValue", artifactId ); | |||
clickButtonWithLocator( "quickSearchSubmit" ); | |||
} | |||
public void searchForArtifactAdvancedSearch( String groupId, String artifactId, String version, String repositoryId, | |||
String className, String rowCount ) | |||
{ | |||
goToSearchPage(); | |||
clickLinkWithXPath( "//div[@id='contentArea']/div[1]/a[1]/strong", false ); | |||
assertElementPresent( "filteredSearch_searchField" ); | |||
assertElementPresent( "filteredSearch_repositoryId" ); | |||
if ( groupId != null ) | |||
{ | |||
selectValue( "filteredSearch_searchField", "Group ID" ); | |||
clickLinkWithLocator( "//a[@id='filteredSearch_']/img", false ); | |||
assertElementPresent( "groupId" ); | |||
setFieldValue( "groupId", groupId ); | |||
} | |||
if ( artifactId != null ) | |||
{ | |||
selectValue( "filteredSearch_searchField", "Artifact ID" ); | |||
clickLinkWithLocator( "//a[@id='filteredSearch_']/img", false ); | |||
assertElementPresent( "artifactId" ); | |||
setFieldValue( "artifactId", artifactId ); | |||
} | |||
if ( version != null ) | |||
{ | |||
selectValue( "filteredSearch_searchField", "Version" ); | |||
clickLinkWithLocator( "//a[@id='filteredSearch_']/img", false ); | |||
assertElementPresent( "version" ); | |||
setFieldValue( "version", version ); | |||
} | |||
if ( className != null ) | |||
{ | |||
selectValue( "filteredSearch_searchField", "Class/Package Name" ); | |||
clickLinkWithLocator( "//a[@id='filteredSearch_']/img", false ); | |||
assertElementPresent( "className" ); | |||
setFieldValue( "className", className ); | |||
} | |||
if ( rowCount != null ) | |||
{ | |||
selectValue( "filteredSearch_searchField", "Row Count" ); | |||
clickLinkWithLocator( "//a[@id='filteredSearch_']/img", false ); | |||
assertElementPresent( "rowCount" ); | |||
setFieldValue( "rowCount", rowCount ); | |||
} | |||
if ( repositoryId != null ) | |||
{ | |||
selectValue( "filteredSearch_repositoryId", repositoryId ); | |||
} | |||
clickSubmitWithLocator( "filteredSearch_0" ); | |||
} | |||
} |
@@ -0,0 +1,488 @@ | |||
package org.apache.archiva.web.test.parent; | |||
/* | |||
* 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 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.Map.Entry; | |||
import java.util.Properties; | |||
/** | |||
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a> | |||
* @version $Id: AbstractSeleniumTestCase.java 761154 2009-04-02 03:31:19Z wsmoak $ | |||
*/ | |||
public abstract class AbstractSeleniumTest | |||
{ | |||
public static String baseUrl; | |||
public static String maxWaitTimeInMs; | |||
private static ThreadLocal<Selenium> selenium = new ThreadLocal<Selenium>(); | |||
public static Properties p; | |||
private final static String PROPERTIES_SEPARATOR = "="; | |||
public void open() | |||
throws Exception | |||
{ | |||
p = new Properties(); | |||
p.load( this.getClass().getClassLoader().getResourceAsStream( "testng.properties" ) ); | |||
} | |||
/** | |||
* Initialize selenium | |||
*/ | |||
public void open( String baseUrl, String browser, String seleniumHost, int seleniumPort, String maxWaitTimeInMs ) | |||
throws Exception | |||
{ | |||
try | |||
{ | |||
AbstractSeleniumTest.baseUrl = baseUrl; | |||
AbstractSeleniumTest.maxWaitTimeInMs = maxWaitTimeInMs; | |||
if ( getSelenium() == null ) | |||
{ | |||
DefaultSelenium s = new DefaultSelenium( seleniumHost, seleniumPort, browser, baseUrl ); | |||
s.start(); | |||
s.setTimeout( maxWaitTimeInMs ); | |||
selenium.set( s ); | |||
} | |||
} | |||
catch ( Exception e ) | |||
{ | |||
// yes | |||
System.out.print( e.getMessage() ); | |||
e.printStackTrace(); | |||
} | |||
} | |||
public static Selenium getSelenium() | |||
{ | |||
return selenium == null ? null : selenium.get(); | |||
} | |||
protected String getProperty( String key ) | |||
{ | |||
return p.getProperty( key ); | |||
} | |||
protected String getEscapeProperty( String key ) | |||
{ | |||
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; | |||
} | |||
/** | |||
* Close selenium session. Called from AfterSuite method of sub-class | |||
*/ | |||
public void close() | |||
throws Exception | |||
{ | |||
if ( getSelenium() != null ) | |||
{ | |||
getSelenium().stop(); | |||
selenium.set( null ); | |||
} | |||
} | |||
// ******************************************************* | |||
// Auxiliar methods. This method help us and simplify test. | |||
// ******************************************************* | |||
public void assertFieldValue( String fieldValue, String fieldName ) | |||
{ | |||
assertElementPresent( fieldName ); | |||
Assert.assertEquals( fieldValue, getSelenium().getValue( fieldName ) ); | |||
} | |||
public void assertPage( String title ) | |||
{ | |||
Assert.assertEquals( getTitle(), title ); | |||
} | |||
public String getTitle() | |||
{ | |||
// Collapse spaces | |||
return getSelenium().getTitle().replaceAll( "[ \n\r]+", " " ); | |||
} | |||
public String getHtmlContent() | |||
{ | |||
return getSelenium().getHtmlSource(); | |||
} | |||
public String getText( String locator ) | |||
{ | |||
return getSelenium().getText( locator ); | |||
} | |||
public void assertTextPresent( String text ) | |||
{ | |||
Assert.assertTrue( getSelenium().isTextPresent( text ), "'" + text + "' isn't present." ); | |||
} | |||
/** | |||
* one of text args must be in the page so use en and fr text (olamy use en locale :-) ) | |||
* | |||
* @param texts | |||
*/ | |||
public void assertTextPresent( String... texts ) | |||
{ | |||
boolean present = false; | |||
StringBuilder sb = new StringBuilder(); | |||
for ( String text : texts ) | |||
{ | |||
present = present || getSelenium().isTextPresent( text ); | |||
sb.append( " " + text + " " ); | |||
} | |||
Assert.assertTrue( present, "'one of the following test " + sb.toString() + "' isn't present." ); | |||
} | |||
public void assertTextNotPresent( String text ) | |||
{ | |||
Assert.assertFalse( getSelenium().isTextPresent( text ), "'" + text + "' is present." ); | |||
} | |||
public void assertElementPresent( String elementLocator ) | |||
{ | |||
Assert.assertTrue( isElementPresent( elementLocator ), "'" + elementLocator + "' isn't present." ); | |||
} | |||
public void assertElementNotPresent( String elementLocator ) | |||
{ | |||
Assert.assertFalse( isElementPresent( elementLocator ), "'" + elementLocator + "' is present." ); | |||
} | |||
public void assertLinkPresent( String text ) | |||
{ | |||
Assert.assertTrue( isElementPresent( "link=" + text ), "The link '" + text + "' isn't present." ); | |||
} | |||
public void assertLinkNotPresent( String text ) | |||
{ | |||
Assert.assertFalse( isElementPresent( "link=" + text ), "The link('" + text + "' is present." ); | |||
} | |||
public void assertImgWithAlt( String alt ) | |||
{ | |||
assertElementPresent( "/¯img[@alt='" + alt + "']" ); | |||
} | |||
public void assertImgWithAltAtRowCol( boolean isALink, String alt, int row, int column ) | |||
{ | |||
String locator = "//tr[" + row + "]/td[" + column + "]/"; | |||
locator += isALink ? "a/" : ""; | |||
locator += "img[@alt='" + alt + "']"; | |||
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 ) ); | |||
} | |||
public boolean isTextPresent( String text ) | |||
{ | |||
return getSelenium().isTextPresent( text ); | |||
} | |||
public boolean isLinkPresent( String text ) | |||
{ | |||
return isElementPresent( "link=" + text ); | |||
} | |||
public boolean isElementPresent( String locator ) | |||
{ | |||
return getSelenium().isElementPresent( locator ); | |||
} | |||
public boolean isElementVisible( String locator ) | |||
{ | |||
return getSelenium().isVisible( locator ); | |||
} | |||
public void waitPage() | |||
{ | |||
// TODO define a smaller maxWaitTimeJsInMs for wait javascript response for browser side validation | |||
//getSelenium().w .wait( Long.parseLong( maxWaitTimeInMs ) ); | |||
//getSelenium().waitForPageToLoad( maxWaitTimeInMs ); | |||
// http://jira.openqa.org/browse/SRC-302 | |||
// those hack looks to break some tests :-( | |||
// getSelenium().waitForCondition( "selenium.isElementPresent('document.body');", maxWaitTimeInMs ); | |||
//getSelenium().waitForCondition( "selenium.isElementPresent('footer');", maxWaitTimeInMs ); | |||
//getSelenium().waitForCondition( "selenium.browserbot.getCurrentWindow().document.getElementById('footer')", | |||
// maxWaitTimeInMs ); | |||
// so the only hack is to not use a too small wait time | |||
try | |||
{ | |||
Thread.sleep( Long.parseLong( maxWaitTimeInMs ) ); | |||
} | |||
catch ( InterruptedException e ) | |||
{ | |||
throw new RuntimeException( "issue on Thread.sleep : " + e.getMessage(), e ); | |||
} | |||
} | |||
public String getFieldValue( String fieldName ) | |||
{ | |||
return getSelenium().getValue( fieldName ); | |||
} | |||
public String getCellValueFromTable( String tableElement, int row, int column ) | |||
{ | |||
return getSelenium().getTable( tableElement + "." + row + "." + column ); | |||
} | |||
public void selectValue( String locator, String value ) | |||
{ | |||
getSelenium().select( locator, "label=" + value ); | |||
} | |||
public void assertOptionPresent( String selectField, String[] options ) | |||
{ | |||
assertElementPresent( selectField ); | |||
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" ); | |||
} | |||
public void assertSelectedValue( String value, String fieldName ) | |||
{ | |||
assertElementPresent( fieldName ); | |||
String optionsPresent = getSelenium().getSelectedLabel( value ); | |||
Assert.assertEquals( optionsPresent, value ); | |||
} | |||
public void submit() | |||
{ | |||
clickLinkWithXPath( "//input[@type='submit']" ); | |||
} | |||
public void assertButtonWithValuePresent( String text ) | |||
{ | |||
Assert.assertTrue( isButtonWithValuePresent( text ), "'" + text + "' button isn't present" ); | |||
} | |||
public void assertButtonWithIdPresent( String id ) | |||
{ | |||
Assert.assertTrue( isButtonWithIdPresent( id ), "'Button with id =" + id + "' isn't present" ); | |||
} | |||
public void assertButtonWithValueNotPresent( String text ) | |||
{ | |||
Assert.assertFalse( isButtonWithValuePresent( text ), "'" + text + "' button is present" ); | |||
} | |||
public boolean isButtonWithValuePresent( String text ) | |||
{ | |||
return isElementPresent( "//button[@value='" + text + "']" ) || isElementPresent( | |||
"//input[@value='" + text + "']" ); | |||
} | |||
public boolean isButtonWithIdPresent( String text ) | |||
{ | |||
return isElementPresent( "//button[@id='" + text + "']" ) || isElementPresent( "//input[@id='" + text + "']" ); | |||
} | |||
public void clickButtonWithName( String text, boolean wait ) | |||
{ | |||
clickLinkWithXPath( "//input[@name='" + text + "']", wait ); | |||
} | |||
public void clickButtonWithValue( String text ) | |||
{ | |||
clickButtonWithValue( text, true ); | |||
} | |||
public void clickButtonWithValue( String text, boolean wait ) | |||
{ | |||
assertButtonWithValuePresent( text ); | |||
if ( isElementPresent( "//button[@value='" + text + "']" ) ) | |||
{ | |||
clickLinkWithXPath( "//button[@value='" + text + "']", wait ); | |||
} | |||
else | |||
{ | |||
clickLinkWithXPath( "//input[@value='" + text + "']", wait ); | |||
} | |||
} | |||
public void clickSubmitWithLocator( String locator ) | |||
{ | |||
clickLinkWithLocator( locator ); | |||
} | |||
public void clickSubmitWithLocator( String locator, boolean wait ) | |||
{ | |||
clickLinkWithLocator( locator, wait ); | |||
} | |||
public void clickImgWithAlt( String alt ) | |||
{ | |||
clickLinkWithLocator( "//img[@alt='" + alt + "']" ); | |||
} | |||
public void clickLinkWithText( String text ) | |||
{ | |||
clickLinkWithText( text, true ); | |||
} | |||
public void clickLinkWithText( String text, boolean wait ) | |||
{ | |||
clickLinkWithLocator( "link=" + text, wait ); | |||
} | |||
public void clickLinkWithXPath( String xpath ) | |||
{ | |||
clickLinkWithXPath( xpath, true ); | |||
} | |||
public void clickLinkWithXPath( String xpath, boolean wait ) | |||
{ | |||
clickLinkWithLocator( "xpath=" + xpath, wait ); | |||
} | |||
public void clickLinkWithLocator( String locator ) | |||
{ | |||
clickLinkWithLocator( locator, true ); | |||
} | |||
public void clickLinkWithLocator( String locator, boolean wait ) | |||
{ | |||
assertElementPresent( locator ); | |||
getSelenium().click( locator ); | |||
if ( wait ) | |||
{ | |||
waitPage(); | |||
} | |||
} | |||
public void clickButtonWithLocator( String locator ) | |||
{ | |||
clickButtonWithLocator( locator, true ); | |||
} | |||
public void clickButtonWithLocator( String locator, boolean wait ) | |||
{ | |||
assertElementPresent( locator ); | |||
getSelenium().click( locator ); | |||
if ( wait ) | |||
{ | |||
waitPage(); | |||
} | |||
} | |||
public void setFieldValues( Map<String, String> fieldMap ) | |||
{ | |||
Map.Entry<String, String> entry; | |||
for ( Iterator<Entry<String, String>> entries = fieldMap.entrySet().iterator(); entries.hasNext(); ) | |||
{ | |||
entry = entries.next(); | |||
getSelenium().type( entry.getKey(), entry.getValue() ); | |||
} | |||
} | |||
public void setFieldValue( String fieldName, String value ) | |||
{ | |||
getSelenium().type( fieldName, value ); | |||
} | |||
public void checkField( String locator ) | |||
{ | |||
getSelenium().check( locator ); | |||
} | |||
public void uncheckField( String locator ) | |||
{ | |||
getSelenium().uncheck( locator ); | |||
} | |||
public boolean isChecked( String locator ) | |||
{ | |||
return getSelenium().isChecked( locator ); | |||
} | |||
public void assertIsChecked( String locator ) | |||
{ | |||
Assert.assertTrue( getSelenium().isChecked( locator ) ); | |||
} | |||
public void assertIsNotChecked( String locator ) | |||
{ | |||
Assert.assertFalse( getSelenium().isChecked( locator ) ); | |||
} | |||
public void assertXpathCount( String locator, int expectedCount ) | |||
{ | |||
int count = getSelenium().getXpathCount( locator ).intValue(); | |||
Assert.assertEquals( count, expectedCount ); | |||
} | |||
public void assertElementValue( String locator, String expectedValue ) | |||
{ | |||
Assert.assertEquals( getSelenium().getValue( locator ), expectedValue ); | |||
} | |||
} |
@@ -0,0 +1,30 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
~ 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. | |||
--> | |||
<Context path="/archiva" | |||
docBase="${catalina.base}/webapps/archiva"> | |||
<Resource name="jdbc/users" auth="Container" type="javax.sql.DataSource" | |||
username="sa" | |||
password="" | |||
driverClassName="org.apache.derby.jdbc.EmbeddedDriver" | |||
url="jdbc:derby:target/database/users;create=true" | |||
/> | |||
</Context> |
@@ -0,0 +1,34 @@ | |||
<!-- | |||
~ 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. | |||
--> | |||
<!-- | |||
Context configuration file for the Tomcat Host Manager Web App | |||
$Id$ | |||
--> | |||
<Context docBase="${catalina.home}/webapps/host-manager"/> | |||
<!-- | |||
privileged="true" antiResourceLocking="false" antiJARLocking="false"> | |||
</Context> | |||
--> |
@@ -0,0 +1,38 @@ | |||
<!-- | |||
~ 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. | |||
--> | |||
<!-- | |||
Context configuration file for the Tomcat Manager Web App | |||
$Id$ | |||
--> | |||
<Context docBase="${catalina.home}/webapps/manager"/> | |||
<!-- | |||
privileged="true" antiResourceLocking="false" antiJARLocking="false"> | |||
<ResourceLink name="users" global="UserDatabase" | |||
type="org.apache.catalina.UserDatabase"/> | |||
</Context> | |||
--> |
@@ -0,0 +1,7 @@ | |||
grant { | |||
permission java.security.AllPermission; | |||
}; | |||
grant codeBase "file:${catalina.home}/lib/tomcat-juli.jar" { | |||
permission java.lang.RuntimePermission "setContextClassLoader"; | |||
}; |
@@ -0,0 +1,81 @@ | |||
# 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. | |||
# | |||
# List of comma-separated packages that start with or equal this string | |||
# will cause a security exception to be thrown when | |||
# passed to checkPackageAccess unless the | |||
# corresponding RuntimePermission ("accessClassInPackage."+package) has | |||
# been granted. | |||
package.access=sun.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper.,sun.beans. | |||
# | |||
# List of comma-separated packages that start with or equal this string | |||
# will cause a security exception to be thrown when | |||
# passed to checkPackageDefinition unless the | |||
# corresponding RuntimePermission ("defineClassInPackage."+package) has | |||
# been granted. | |||
# | |||
# by default, no packages are restricted for definition, and none of | |||
# the class loaders supplied with the JDK call checkPackageDefinition. | |||
# | |||
package.definition=sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.tomcat.,org.apache.jasper. | |||
# | |||
# | |||
# List of comma-separated paths defining the contents of the "common" | |||
# classloader. Prefixes should be used to define what is the repository type. | |||
# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. | |||
# If left as blank,the JVM system loader will be used as Catalina's "common" | |||
# loader. | |||
# Examples: | |||
# "foo": Add this folder as a class repository | |||
# "foo/*.jar": Add all the JARs of the specified folder as class | |||
# repositories | |||
# "foo/bar.jar": Add bar.jar as a class repository | |||
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar | |||
# | |||
# List of comma-separated paths defining the contents of the "server" | |||
# classloader. Prefixes should be used to define what is the repository type. | |||
# Path may be relative to the CATALINA_HOME or CATALINA_BASE path or absolute. | |||
# If left as blank, the "common" loader will be used as Catalina's "server" | |||
# loader. | |||
# Examples: | |||
# "foo": Add this folder as a class repository | |||
# "foo/*.jar": Add all the JARs of the specified folder as class | |||
# repositories | |||
# "foo/bar.jar": Add bar.jar as a class repository | |||
server.loader= | |||
# | |||
# List of comma-separated paths defining the contents of the "shared" | |||
# classloader. Prefixes should be used to define what is the repository type. | |||
# Path may be relative to the CATALINA_BASE path or absolute. If left as blank, | |||
# the "common" loader will be used as Catalina's "shared" loader. | |||
# Examples: | |||
# "foo": Add this folder as a class repository | |||
# "foo/*.jar": Add all the JARs of the specified folder as class | |||
# repositories | |||
# "foo/bar.jar": Add bar.jar as a class repository | |||
# Please note that for single jars, e.g. bar.jar, you need the URL form | |||
# starting with file:. | |||
shared.loader= | |||
# | |||
# String cache configuration. | |||
tomcat.util.buf.StringCache.byte.enabled=true | |||
#tomcat.util.buf.StringCache.char.enabled=true | |||
#tomcat.util.buf.StringCache.trainThreshold=500000 | |||
#tomcat.util.buf.StringCache.cacheSize=5000 |
@@ -0,0 +1,35 @@ | |||
<?xml version='1.0' encoding='utf-8'?> | |||
<!-- | |||
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. | |||
--> | |||
<!-- The contents of this file will be loaded for each web application --> | |||
<Context> | |||
<!-- Default set of monitored resources --> | |||
<WatchedResource>WEB-INF/web.xml</WatchedResource> | |||
<!-- Uncomment this to disable session persistence across Tomcat restarts --> | |||
<!-- | |||
<Manager pathname="" /> | |||
--> | |||
<!-- Uncomment this to enable Comet connection tacking (provides events | |||
on session expiration as well as webapp lifecycle) --> | |||
<!-- | |||
<Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /> | |||
--> | |||
</Context> |
@@ -0,0 +1,46 @@ | |||
# 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. | |||
handlers = java.util.logging.ConsoleHandler | |||
############################################################ | |||
# Handler specific properties. | |||
# Describes specific configuration info for Handlers. | |||
############################################################ | |||
java.util.logging.ConsoleHandler.level = FINE | |||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter | |||
############################################################ | |||
# Facility specific properties. | |||
# Provides extra control for each logger. | |||
############################################################ | |||
org.apache.catalina.level = @catalina.logging.level@ | |||
org.apache.catalina.startup.HostConfig.level = INFO | |||
org.apache.catalina.session.ManagerBase.level = INFO | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = java.util.logging.ConsoleHandler | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].level = INFO | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager].handlers = java.util.logging.ConsoleHandler | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].level = INFO | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/admin].handlers = java.util.logging.ConsoleHandler | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].level = INFO | |||
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager].handlers = java.util.logging.ConsoleHandler |
@@ -0,0 +1,68 @@ | |||
<?xml version='1.0' encoding='utf-8'?> | |||
<!-- | |||
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. | |||
--> | |||
<!-- Note: A "Server" is not itself a "Container", so you may not | |||
define subcomponents such as "Valves" at this level. | |||
Documentation at /docs/config/server.html | |||
--> | |||
<Server port="9695" shutdown="SHUTDOWN"> | |||
<!--APR library loader. Documentation at /docs/apr.html --> | |||
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> | |||
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> | |||
<Listener className="org.apache.catalina.core.JasperListener" /> | |||
<!-- Prevent memory leaks due to use of particular java/javax APIs--> | |||
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> | |||
<!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> | |||
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> | |||
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> | |||
<!-- Global JNDI resources | |||
Documentation at /docs/jndi-resources-howto.html | |||
--> | |||
<GlobalNamingResources> | |||
<!-- Editable user database that can also be used by | |||
UserDatabaseRealm to authenticate users | |||
--> | |||
<Resource name="UserDatabase" auth="Container" | |||
type="org.apache.catalina.UserDatabase" | |||
description="User database that can be updated and saved" | |||
factory="org.apache.catalina.users.MemoryUserDatabaseFactory" | |||
pathname="conf/tomcat-users.xml" /> | |||
</GlobalNamingResources> | |||
<Service name="Catalina"> | |||
<Connector port="9696" protocol="HTTP/1.1" | |||
connectionTimeout="20000" | |||
redirectPort="8443" /> | |||
<Engine name="Catalina" defaultHost="localhost"> | |||
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" | |||
resourceName="UserDatabase"/> | |||
<Valve className="org.apache.catalina.valves.AccessLogValve" | |||
resolveHosts="false" pattern="%t-m:%m-url:%U-%q-%Dms"/> | |||
<Host name="localhost" appBase="webapps" | |||
unpackWARs="true" autoDeploy="true" | |||
xmlValidation="false" xmlNamespaceAware="false"> | |||
</Host> | |||
</Engine> | |||
</Service> | |||
</Server> |
@@ -0,0 +1,36 @@ | |||
<?xml version='1.0' encoding='utf-8'?> | |||
<!-- | |||
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. | |||
--> | |||
<tomcat-users> | |||
<!-- | |||
NOTE: By default, no user is included in the "manager-gui" role required | |||
to operate the "/manager/html" web application. If you wish to use this app, | |||
you must define such a user - the username and password are arbitrary. | |||
--> | |||
<!-- | |||
NOTE: The sample user and role entries below are wrapped in a comment | |||
and thus are ignored when reading this file. Do not forget to remove | |||
<!.. ..> that surrounds them. | |||
--> | |||
<!-- | |||
<role rolename="tomcat"/> | |||
<role rolename="role1"/> | |||
<user username="tomcat" password="tomcat" roles="tomcat"/> | |||
<user username="both" password="tomcat" roles="tomcat,role1"/> | |||
<user username="role1" password="tomcat" roles="role1"/> | |||
--> | |||
</tomcat-users> |
@@ -29,39 +29,20 @@ | |||
<packaging>pom</packaging> | |||
<name>Archiva Web :: Application Tests</name> | |||
<properties> | |||
<container.test.port>9696</container.test.port> | |||
<tomcat5x.version>5.5.34</tomcat5x.version> | |||
<tomcat6x.version>6.0.33</tomcat6x.version> | |||
<cargo.wait>false</cargo.wait> | |||
<cargo.timeout>600000</cargo.timeout> | |||
<cargo.install.dir>${project.build.directory}/cargo/installs</cargo.install.dir> | |||
<maxWaitTimeInMs>10000</maxWaitTimeInMs> | |||
<!-- TODO: review how appropriate the memory settings are - should work with less --> | |||
<cargo.jvm.args>-Xmx512m -XX:MaxPermSize=256m</cargo.jvm.args> | |||
<seleniumPluginVersion>2.1</seleniumPluginVersion> | |||
<selenium-server.version>2.12.0</selenium-server.version> | |||
<apache.mirror.url>http://archive.apache.org/dist</apache.mirror.url> | |||
<apache.archive.url>http://archive.apache.org/dist</apache.archive.url> | |||
</properties> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.testng</groupId> | |||
<artifactId>testng</artifactId> | |||
<version>6.2.1</version> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>commons-io</groupId> | |||
<artifactId>commons-io</artifactId> | |||
<version>1.4</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.codehaus.plexus</groupId> | |||
<artifactId>plexus-command-line</artifactId> | |||
<version>1.0-alpha-2</version> | |||
<exclusions> | |||
<exclusion> | |||
<artifactId>plexus-container-default</artifactId> | |||
@@ -95,7 +76,6 @@ | |||
<dependency> | |||
<groupId>org.seleniumhq.selenium.client-drivers</groupId> | |||
<artifactId>selenium-java-client-driver</artifactId> | |||
<version>1.0.2</version> | |||
<scope>test</scope> | |||
<exclusions> | |||
<exclusion> | |||
@@ -388,7 +368,6 @@ | |||
<plugin> | |||
<groupId>org.codehaus.cargo</groupId> | |||
<artifactId>cargo-maven2-plugin</artifactId> | |||
<version>1.1.1</version> | |||
<executions> | |||
<execution> | |||
<id>start-container</id> | |||
@@ -419,6 +398,7 @@ | |||
<systemProperties> | |||
<appserver.base>${project.build.directory}/appserver-base</appserver.base> | |||
<appserver.home>${project.build.directory}/appserver-base</appserver.home> | |||
<derby.system.home>${project.build.directory}</derby.system.home> | |||
</systemProperties> | |||
</container> | |||
<configuration> |
@@ -26,6 +26,22 @@ | |||
<name>Archiva Web</name> | |||
<packaging>pom</packaging> | |||
<properties> | |||
<container.test.port>9696</container.test.port> | |||
<tomcat5x.version>5.5.34</tomcat5x.version> | |||
<tomcat6x.version>6.0.35</tomcat6x.version> | |||
<cargo.wait>false</cargo.wait> | |||
<cargo.timeout>600000</cargo.timeout> | |||
<cargo.install.dir>${project.build.directory}/cargo/installs</cargo.install.dir> | |||
<maxWaitTimeInMs>10000</maxWaitTimeInMs> | |||
<!-- TODO: review how appropriate the memory settings are - should work with less --> | |||
<cargo.jvm.args>-Xmx512m -XX:MaxPermSize=256m</cargo.jvm.args> | |||
<seleniumPluginVersion>2.2-SNAPSHOT</seleniumPluginVersion> | |||
<selenium-server.version>2.15.0</selenium-server.version> | |||
<apache.mirror.url>http://archive.apache.org/dist</apache.mirror.url> | |||
<apache.archive.url>http://archive.apache.org/dist</apache.archive.url> | |||
</properties> | |||
<modules> | |||
<module>archiva-applet</module> | |||
<module>archiva-security</module> | |||
@@ -36,6 +52,44 @@ | |||
<module>archiva-webapp</module> | |||
</modules> | |||
<dependencyManagement> | |||
<dependencies> | |||
<dependency> | |||
<groupId>org.testng</groupId> | |||
<artifactId>testng</artifactId> | |||
<version>6.2.1</version> | |||
<scope>test</scope> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.codehaus.plexus</groupId> | |||
<artifactId>plexus-command-line</artifactId> | |||
<version>1.0-alpha-2</version> | |||
<exclusions> | |||
<exclusion> | |||
<artifactId>plexus-container-default</artifactId> | |||
<groupId>org.codehaus.plexus</groupId> | |||
</exclusion> | |||
<exclusion> | |||
<artifactId>plexus-component-api</artifactId> | |||
<groupId>org.codehaus.plexus</groupId> | |||
</exclusion> | |||
</exclusions> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.seleniumhq.selenium.client-drivers</groupId> | |||
<artifactId>selenium-java-client-driver</artifactId> | |||
<version>1.0.2</version> | |||
<scope>test</scope> | |||
<exclusions> | |||
<exclusion> | |||
<groupId>commons-logging</groupId> | |||
<artifactId>commons-logging</artifactId> | |||
</exclusion> | |||
</exclusions> | |||
</dependency> | |||
</dependencies> | |||
</dependencyManagement> | |||
<build> | |||
<pluginManagement> | |||
<plugins> | |||
@@ -66,5 +120,12 @@ | |||
<module>archiva-webapp-js</module> | |||
</modules> | |||
</profile> | |||
<profile> | |||
<id>it-js</id> | |||
<modules> | |||
<module>archiva-webapp-js</module> | |||
<module>archiva-webapp-test-js</module> | |||
</modules> | |||
</profile> | |||
</profiles> | |||
</project> | |||
</project> |
@@ -393,6 +393,12 @@ | |||
<version>${project.version}</version> | |||
<type>war</type> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-webapp-js</artifactId> | |||
<version>${project.version}</version> | |||
<type>war</type> | |||
</dependency> | |||
<dependency> | |||
<groupId>org.apache.archiva</groupId> | |||
<artifactId>archiva-xml-tools</artifactId> | |||
@@ -1516,6 +1522,11 @@ | |||
</dependency> | |||
</dependencies> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.codehaus.cargo</groupId> | |||
<artifactId>cargo-maven2-plugin</artifactId> | |||
<version>1.1.4</version> | |||
</plugin> | |||
<plugin> | |||
<groupId>org.apache.maven.plugins</groupId> | |||
<artifactId>maven-antrun-plugin</artifactId> |