start adding layout for selenium test for webapp-js

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1225381 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2011-12-28 23:15:19 +00:00
parent b0448012bd
commit 9938b56847
98 changed files with 5466 additions and 26 deletions

View File

@ -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

View File

@ -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>

View File

@ -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");

View File

@ -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

View File

@ -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>

View File

@ -0,0 +1,8 @@
<configuration>
<localRepository></localRepository>
<webapp>
<ui>
<appletFindEnabled>false</appletFindEnabled>
</ui>
</webapp>
</configuration>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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" );
}
}

View File

@ -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();
}
}

View File

@ -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 + "'" );
}
}

View File

@ -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;
}
}

View File

@ -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" );
}
}

View File

@ -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 );
}
}

View File

@ -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" );
}
}

View File

@ -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" );
}
}

View File

@ -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";
}
}

View File

@ -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" );
}
}

View File

@ -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" );
}
}

View File

@ -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 );
}
}

View File

@ -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>

View File

@ -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>
-->

View File

@ -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>
-->

View File

@ -0,0 +1,7 @@
grant {
permission java.security.AllPermission;
};
grant codeBase "file:${catalina.home}/lib/tomcat-juli.jar" {
permission java.lang.RuntimePermission "setContextClassLoader";
};

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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>

View File

@ -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>

11
pom.xml
View File

@ -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>