move webapp test with old ui to retired.

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1395874 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2012-10-09 07:13:09 +00:00
parent 535a635cc6
commit 4051ba2db6
119 changed files with 0 additions and 10190 deletions

View File

@ -1,34 +0,0 @@
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

@ -1,600 +0,0 @@
<?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</artifactId>
<packaging>pom</packaging>
<name>Archiva Web :: 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.apache.archiva</groupId>
<artifactId>archiva-webapp</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>
<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</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>
<java.io.tmpdir>${project.build.directory}</java.io.tmpdir>
</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/</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>tomcat5x</id>
<activation>
<property>
<name>tomcat5</name>
</property>
</activation>
<properties>
<container.name>tomcat5x</container.name>
<tomcat.version>${tomcat5x.version}</tomcat.version>
<container.url>
${apache.mirror.url}/tomcat/tomcat-5/v${tomcat5x.version}/bin/apache-tomcat-${tomcat5x.version}.zip
</container.url>
</properties>
</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>
</project>

View File

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

View File

@ -1,49 +0,0 @@
<!--
~ 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

@ -1,54 +0,0 @@
<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

@ -1,12 +0,0 @@
<?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

@ -1,44 +0,0 @@
<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

@ -1,41 +0,0 @@
<?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

@ -1,41 +0,0 @@
<?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

@ -1,7 +0,0 @@
#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

@ -1,25 +0,0 @@
<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

@ -1,11 +0,0 @@
<?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

@ -1,25 +0,0 @@
<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

@ -1,11 +0,0 @@
<?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

@ -1,26 +0,0 @@
<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

@ -1,11 +0,0 @@
<?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

@ -1,25 +0,0 @@
<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

@ -1,11 +0,0 @@
<?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

@ -1,7 +0,0 @@
#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

@ -1,9 +0,0 @@
<?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

@ -1,11 +0,0 @@
<?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

@ -1,11 +0,0 @@
<?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

@ -1,143 +0,0 @@
#
# 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
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

@ -1,102 +0,0 @@
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.Assert;
import org.testng.annotations.Test;
@Test( groups = { "appearance" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true )
public class AppearanceTest
extends AbstractArchivaTest
{
public void testAddAppearanceEmptyValues()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "", "", "", false );
assertTextPresent( "You must enter a name" );
}
@Test( dependsOnMethods = { "testAddAppearanceEmptyValues" } )
public void testAddAppearanceInvalidValues()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "<>~+[ ]'\"", "/home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"",
"/home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"", false );
assertTextPresent(
"Organisation name must only contain alphanumeric characters, white-spaces(' '), equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "You must enter a URL" );
assertTextPresent( "You must enter a URL for your logo" );
}
@Test( dependsOnMethods = { "testAddAppearanceInvalidValues" } )
public void testAddAppearanceInvalidOrganisationName()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "<>~+[ ]'\"", "http://www.apache.org/", "http://www.apache.org/images/asf_logo_wide.gifs",
false );
assertTextPresent(
"Organisation name must only contain alphanumeric characters, white-spaces(' '), equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
}
public void testAddAppearanceInvalidOrganisationUrl()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "The Apache Software Foundation", "/home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"",
"http://www.apache.org/images/asf_logo_wide.gifs", false );
assertTextPresent( "You must enter a URL." );
}
@Test
public void testAddAppearanceInvalidOrganisationLogo()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "The Apache Software Foundation", "http://www.apache.org/",
"/home/user/abcXYZ0129._/\\~:?!&=-<> ~+[ ]'\"", false );
assertTextPresent( "You must enter a URL for your logo." );
}
@Test
public void testAddAppearanceValidValues()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "The Apache Software Foundation", "http://www.apache.org/",
"http://www.apache.org/images/asf_logo_wide.gifs", true );
assertTextPresent( "The Apache Software Foundation" );
}
@Test( dependsOnMethods = { "testAddAppearanceValidValues" } )
public void testEditAppearance()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "Apache Software Foundation", "http://www.apache.org/",
"http://www.apache.org/images/asf_logo_wide.gifs", true );
assertTextPresent( "Apache Software Foundation" );
}
}

View File

@ -1,85 +0,0 @@
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 );
// if not admin user created create one
if ( isElementPresent( "adminCreateForm" ) )
{
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( "logoutLink" );
}
else
{
login( getAdminUsername(), getAdminPassword() );
}
// take care about repositories : internal
}
@Test( groups = { "about" }, alwaysRun = true )
public void testHome()
{
getSelenium().open( baseUrl );
assertPage( "Apache Archiva \\ Quick Search" );
}
}

View File

@ -1,206 +0,0 @@
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.AbstractArtifactManagementTest;
import org.testng.annotations.Test;
@Test( groups = { "artifactmanagement" }, dependsOnGroups = { "about" } )
public class ArtifactManagementTest
extends AbstractArtifactManagementTest
{
@Test( alwaysRun = true, dependsOnGroups = "about" )
public void testAddArtifactNullValues()
{
goToAddArtifactPage();
clickButtonWithValue( "Submit", false );
//assertTextPresent( "Please add a file to upload." );
assertTextPresent( "You must enter a version." );
assertTextPresent( "You must enter a groupId." );
assertTextPresent( "You must enter an artifactId." );
assertTextPresent( "You must enter a version" );
assertTextPresent( "You must enter a packaging" );
}
@Test( dependsOnMethods = { "testAddArtifactNullValues" }, alwaysRun = true )
public void testAddArtifactNoGroupId()
{
addArtifact( " ", getArtifactId(), getVersion(), getPackaging(), getArtifactFilePath(), getRepositoryId(),
false );
assertTextPresent( "You must enter a groupId." );
}
@Test( dependsOnMethods = { "testAddArtifactNoGroupId" }, alwaysRun = true )
public void testAddArtifactNoArtifactId()
{
addArtifact( getGroupId(), " ", getVersion(), getPackaging(), getArtifactFilePath(), getRepositoryId(), false );
assertTextPresent( "You must enter an artifactId." );
}
@Test( dependsOnMethods = { "testAddArtifactNoGroupId" }, alwaysRun = true )
public void testAddArtifactNoVersion()
{
addArtifact( getGroupId(), getArtifactId(), " ", getPackaging(), getArtifactFilePath(), getRepositoryId(),
false );
assertTextPresent( "You must enter a version." );
}
@Test( dependsOnMethods = { "testAddArtifactNoGroupId" }, alwaysRun = true )
public void testAddArtifactInvalidVersion()
{
addArtifact( getGroupId(), getArtifactId(), "asdf", getPackaging(), getArtifactFilePath(), getRepositoryId(),
true );
assertTextPresent( "Invalid version." );
}
@Test( dependsOnMethods = { "testAddArtifactNoGroupId" }, alwaysRun = true )
public void testAddArtifactNoPackaging()
{
addArtifact( getGroupId(), getArtifactId(), getVersion(), " ", getArtifactFilePath(), getRepositoryId(),
false );
assertTextPresent( "You must enter a packaging." );
}
@Test( dependsOnMethods = { "testAddArtifactNoGroupId" }, alwaysRun = true )
public void testAddArtifactNoFilePath()
{
addArtifact( getGroupId(), getArtifactId(), getVersion(), getPackaging(), " ", getRepositoryId(), true );
assertTextPresent( "Please add a file to upload." );
}
@Test( groups = "requiresUpload" )
public void testAddArtifactValidValues()
{
String groupId = getProperty( "VALIDARTIFACT_GROUPID" );
String artifactId = getProperty( "VALIDARTIFACT_ARTIFACTID" );
addArtifact( groupId, artifactId, getVersion(), getPackaging(), getArtifactFilePath(), getRepositoryId(),
true );
assertTextPresent( "Artifact '" + groupId + ":" + artifactId + ":" + getVersion()
+ "' was successfully deployed to repository 'internal'" );
}
@Test( groups = "requiresUpload" )
public void testDotNetTypes()
{
String groupId = getProperty( "GROUPID_DOTNETARTIFACT" );
String artifactId = getProperty( "ARTIFACTID_DOTNETARTIFACT" );
String packaging = getProperty( "PACKAGING_DOTNETARTIFACT" );
addArtifact( groupId, artifactId, getVersion(), packaging, getArtifactFilePath(), getRepositoryId(), true );
assertTextPresent( "Artifact '" + groupId + ":" + artifactId + ":" + getVersion()
+ "' was successfully deployed to repository 'internal'" );
getSelenium().open( baseUrl + "/browse/" + groupId + "/" + artifactId + "/" + getVersion() );
waitPage();
assertTextPresent( "<type>library</type>" );
String basePath =
"/archiva/repository/internal/" + groupId + "/" + artifactId + "/" + getVersion() + "/" + artifactId + "-"
+ getVersion();
assertLinkPresent( ".NET Library" );
assertElementPresent( "//a[@href='" + basePath + ".dll']" );
assertElementPresent( "//a[@href='" + basePath + ".pom']" );
}
// MRM-747
@Test( groups = "requiresUpload" )
public void testAddArtifactBlockRedeployments()
{
addArtifact( getGroupId(), getArtifactId(), getVersion(), getPackaging(), getArtifactFilePath(),
getRepositoryId(), true );
assertTextPresent( "Overwriting released artifacts in repository '" + getRepositoryId() + "' is not allowed." );
}
@Test( groups = "requiresUpload" )
public void testDeleteArtifact()
{
// prep
String groupId = getProperty( "GROUPID1" );
String artifactId = getProperty( "ARTIFACTID1" );
String version = getProperty( "VERSION1" );
String packaging = getProperty( "PACKAGING1" );
String repositoryId = getProperty( "REPOSITORYID1" );
// TODO: do this differently as it only works in Firefox's chrome mode
addArtifact( groupId, artifactId, version, packaging, getArtifactFilePath(), repositoryId, true );
assertTextPresent( "Artifact 'delete:delete:1.0' was successfully deployed to repository 'internal'" );
deleteArtifact( "delete", "delete", "1.0", "internal", true );
assertTextPresent( "Artifact 'delete:delete:1.0' was successfully deleted from repository 'internal'" );
}
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactNoGroupId()
{
deleteArtifact( " ", "delete", "1.0", "internal" );
assertTextPresent( "You must enter a groupId." );
}
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactNoArtifactId()
{
deleteArtifact( "delete", " ", "1.0", "internal" );
assertTextPresent( "You must enter an artifactId." );
}
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactNoVersion()
{
deleteArtifact( "delete", "delete", " ", "internal", false );
assertTextPresent( "You must enter a version." );
}
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactInvalidVersion()
{
deleteArtifact( "delete", "delete", "asdf", "internal", true );
assertTextPresent( "Invalid version." );
}
// HTML select should have the proper value, else it will cause a selenium error: Option with label 'customValue' not found
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactInvalidValues()
{
deleteArtifact( "<> \\/~+[ ]'\"", "<> \\/~+[ ]'\"", "<>", "internal" );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
// as it's a validation on server side it's not available here but tested in testDeleteArtifactInvalidVersion
//assertTextPresent( "Invalid version." );
}
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactInvalidGroupId()
{
deleteArtifact( "<> \\/~+[ ]'\"", "delete", "1.0", "internal" );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
@Test( alwaysRun = true, dependsOnMethods = { "testAddArtifactNullValues" } )
public void testDeleteArtifactInvalidArtifactId()
{
deleteArtifact( "delete", "<> \\/~+[ ]'\"", "1.0", "internal" );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
}

View File

@ -1,197 +0,0 @@
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.Test;
@Test( groups = { "auditlogsreport" }, dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public class AuditLogsReportTest
extends AbstractArchivaTest
{
private void goToAuditLogReports()
{
getSelenium().open( "/archiva/report/queryAuditLogReport.action" );
}
private void assertAuditLogsReportPage()
{
assertPage( "Apache Archiva \\ Audit Log Report" );
assertTextPresent( "Audit Log Report" );
assertElementPresent( "repository" );
assertElementPresent( "groupId" );
assertElementPresent( "artifactId" );
assertElementPresent( "startDate" );
assertElementPresent( "endDate" );
assertElementPresent( "rowCount" );
assertButtonWithValuePresent( "View Audit Log" );
}
@Test( dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public void testAuditLogsReport()
{
goToAuditLogReports();
assertAuditLogsReportPage();
assertTextPresent( "Latest Events" );
}
@Test( dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public void testViewAuditLogsNoDataFound()
{
goToAuditLogReports();
assertAuditLogsReportPage();
setFieldValue( "groupId", "non.existing" );
submit();
assertPage( "Apache Archiva \\ Audit Log Report" );
assertTextPresent( "Results" );
assertTextPresent( "No audit logs found." );
}
// TODO: add test for adding via WebDAV
@Test( dependsOnMethods = { "testAddArtifactValidValues" }, groups = "requiresUpload" )
public void testViewAuditLogsDataFound()
{
goToAuditLogReports();
assertAuditLogsReportPage();
selectValue( "repository", "internal" );
setFieldValue( "groupId", getProperty( "VALIDARTIFACT_GROUPID" ) );
submit();
assertAuditLogsReportPage();
assertTextPresent( "Results" );
assertTextNotPresent( "No audit logs found." );
assertTextPresent(
getProperty( "VALIDARTIFACT_ARTIFACTID" ) + "-" + getProperty( "ARTIFACT_VERSION" ) + "." + getProperty(
"ARTIFACT_PACKAGING" ) );
assertTextPresent( "Uploaded File" );
assertTextPresent( "internal" );
assertTextPresent( "admin" );
}
// TODO: add test for adding via WebDAV
@Test( dependsOnMethods = { "testAddArtifactValidValues" }, groups = "requiresUpload" )
public void testViewAuditLogsOnlyArtifactIdIsSpecified()
{
goToAuditLogReports();
assertAuditLogsReportPage();
selectValue( "repository", "internal" );
setFieldValue( "artifactId", getProperty( "AUDITLOGARTIFACT_ARTIFACTID" ) );
submit();
assertAuditLogsReportPage();
assertTextPresent( "If you specify an artifact ID, you must specify a group ID" );
assertTextNotPresent( "Results" );
assertTextNotPresent( "No audit logs found." );
assertTextNotPresent(
getProperty( "VALIDARTIFACT_ARTIFACTID" ) + "-" + getProperty( "ARTIFACT_VERSION" ) + "." + getProperty(
"ARTIFACT_PACKAGING" ) );
assertTextNotPresent( "Uploaded File" );
}
// TODO: add test for adding via WebDAV
@Test( dependsOnMethods = { "testAddArtifactValidValues" }, groups = "requiresUpload" )
public void testViewAuditLogsForAllRepositories()
{
goToAuditLogReports();
assertAuditLogsReportPage();
selectValue( "repository", "all" );
submit();
assertAuditLogsReportPage();
assertTextPresent( "Results" );
assertTextNotPresent( "No audit logs found." );
assertTextPresent(
getProperty( "VALIDARTIFACT_ARTIFACTID" ) + "-" + getProperty( "ARTIFACT_VERSION" ) + "." + getProperty(
"ARTIFACT_PACKAGING" ) );
assertTextPresent( "Uploaded File" );
assertTextPresent( "internal" );
assertTextPresent( "admin" );
}
@Test( dependsOnMethods = { "testAddArtifactValidValues", "testUserWithRepoManagerInternalRole" },
groups = "requiresUpload" )
public void testViewAuditLogsViewAuditEventsForManageableRepositoriesOnly()
{
String groupId = getProperty( "SNAPSHOT_GROUPID" );
String artifactId = getProperty( "SNAPSHOT_ARTIFACTID" );
String version = getProperty( "SNAPSHOT_VERSION" );
String repo = getProperty( "SNAPSHOT_REPOSITORYID" );
String packaging = getProperty( "SNAPSHOT_PACKAGING" );
addArtifact( groupId, artifactId, version, packaging, getProperty( "SNAPSHOT_ARTIFACTFILEPATH" ), repo, true );
assertTextPresent(
"Artifact '" + groupId + ":" + artifactId + ":" + version + "' was successfully deployed to repository '"
+ repo + "'" );
clickLinkWithText( "Logout" );
login( getProperty( "REPOMANAGER_INTERNAL_USERNAME" ), getUserRoleNewPassword() );
goToAuditLogReports();
assertAuditLogsReportPage();
selectValue( "repository", "all" );
submit();
assertAuditLogsReportPage();
assertTextPresent( "Results" );
assertTextNotPresent( "No audit logs found." );
assertTextPresent(
getProperty( "VALIDARTIFACT_ARTIFACTID" ) + "-" + getProperty( "ARTIFACT_VERSION" ) + "." + packaging );
assertTextPresent( "Uploaded File" );
assertTextPresent( "internal" );
assertTextPresent( "admin" );
assertTextNotPresent( artifactId + "-" + version + "." + packaging );
clickLinkWithText( "Logout" );
login( getProperty( "ADMIN_USERNAME" ), getProperty( "ADMIN_PASSWORD" ) );
}
// MRM-1304
@Test( dependsOnMethods = { "testAddArtifactValidValues" }, groups = "requiresUpload" )
public void testViewAuditLogsReportForGroupId()
{
String groupId = getProperty( "AUDITLOGARTIFACT_GROUPID" );
String artifactId = getProperty( "AUDITLOGARTIFACT_ARTIFACTID" );
String version = getProperty( "VERSION" );
String packaging = getProperty( "PACKAGING" );
String repositoryId = getProperty( "REPOSITORYID" );
String expectedArtifact = getProperty( "AUDITLOG_EXPECTED_ARTIFACT" );
addArtifact( groupId, artifactId, version, packaging, getProperty( "SNAPSHOT_ARTIFACTFILEPATH" ), repositoryId,
true );
goToAuditLogReports();
selectValue( "repository", repositoryId );
setFieldValue( "groupId", groupId );
submit();
assertAuditLogsReportPage();
assertTextPresent( expectedArtifact );
assertTextPresent( repositoryId );
}
}

View File

@ -1,274 +0,0 @@
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.AbstractBrowseTest;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.io.File;
@Test( groups = { "browse" }, dependsOnMethods = { "testAddArtifactNullValues" } )
public class BrowseTest
extends AbstractBrowseTest
{
public void testBrowseArtifactPageTabs()
{
goToBrowsePage();
clickLinkWithText( getProperty( "ARTIFACT_GROUPID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_ARTIFACTID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_VERSION" ) + "/" );
assertTextPresent( "Info" );
assertTextPresent( "Dependencies" );
assertTextPresent( "Dependency Tree" );
assertTextPresent( "Used By" );
assertTextPresent( "Mailing Lists" );
assertTextPresent( "Metadata" );
}
public void testBrowseArtifact()
{
goToBrowsePage();
assertBrowsePage();
}
@Test( dependsOnMethods = { "testAddArtifactValidValues" }, groups = { "requiresUpload" } )
public void testClickArtifactFromBrowse()
{
goToBrowsePage();
assertBrowsePage();
clickLinkWithText( getProperty( "ARTIFACT_ARTIFACTID" ) + "/" );
assertPage( "Apache Archiva \\ Browse Repository" );
assertTextPresent( "Artifacts" );
}
// MRM-1278
@Test( groups = { "requiresUpload" } )
public void testCorrectRepositoryInBrowse()
{
String releasesRepo = getProperty( "RELEASES_REPOSITORY" );
// create releases repository first
goToRepositoriesPage();
clickLinkWithText( "Add" );
addManagedRepository( getProperty( "RELEASES_REPOSITORY" ), "Releases Repository",
new File( getBasedir(), "target/repository/releases" ).getPath(), "",
"Maven 2.x Repository", "0 0 * * * ?", "", "", true );
assertTextPresent( "Releases Repository" );
String snapshotsRepo = getProperty( "SNAPSHOTS_REPOSITORY" );
String path =
"src/test/resources/snapshots/org/apache/maven/archiva/web/test/foo-bar/1.0-SNAPSHOT/foo-bar-1.0-SNAPSHOT.jar";
// TODO: do this differently as uploading doesn't work on browsers other than *chrome (below as well)
// upload a snapshot artifact to repository 'releases'
addArtifact( "archiva", "archiva-webapp", "1.0-SNAPSHOT", "jar", path, releasesRepo, true );
assertTextPresent(
"Artifact 'archiva:archiva-webapp:1.0-SNAPSHOT' was successfully deployed to repository '" + releasesRepo
+ "'" );
goToBrowsePage();
assertBrowsePage();
assertGroupsPage( "archiva/" );
assertArtifactsPage( "archiva-webapp/" );
assertArtifactInfoPage( "1.0-SNAPSHOT/", releasesRepo, "archiva", "archiva-webapp", "1.0-SNAPSHOT", "jar" );
// upload a snapshot artifact to repository 'snapshots'
addArtifact( "continuum", "continuum-core", "1.0-SNAPSHOT", "jar", path, snapshotsRepo, true );
assertTextPresent(
"Artifact 'continuum:continuum-core:1.0-SNAPSHOT' was successfully deployed to repository '" + snapshotsRepo
+ "'" );
goToBrowsePage();
assertBrowsePage();
assertGroupsPage( "continuum/" );
assertArtifactsPage( "continuum-core/" );
assertArtifactInfoPage( "1.0-SNAPSHOT/", snapshotsRepo, "continuum", "continuum-core", "1.0-SNAPSHOT", "jar" );
}
// MRM-1353
@Test( groups = { "requiresUpload" } )
public void testBuildNumberOfSnapshotArtifact()
{
String snapshotsRepo = getProperty( "SNAPSHOTS_REPOSITORY" );
String path =
"src/test/resources/snapshots/org/apache/maven/archiva/web/test/foo-bar/1.0-SNAPSHOT/foo-bar-1.0-SNAPSHOT.jar";
// TODO: do this differently as uploading doesn't work on browsers other than *chrome (below as well)
// upload a snapshot artifact to repository 'releases'
addArtifact( "archiva", "archiva-multiple-artifacts", "1.0-SNAPSHOT", "jar", path, snapshotsRepo, true );
assertTextPresent(
"Artifact 'archiva:archiva-multiple-artifacts:1.0-SNAPSHOT' was successfully deployed to repository '"
+ snapshotsRepo + "'" );
goToBrowsePage();
assertBrowsePage();
assertGroupsPage( "archiva/" );
assertArtifactsPage( "archiva-multiple-artifacts/" );
assertArtifactInfoPage( "1.0-SNAPSHOT/", snapshotsRepo, "archiva", "archiva-multiple-artifacts", "1.0-SNAPSHOT",
"jar" );
addArtifact( "archiva", "archiva-multiple-artifacts", "1.0-SNAPSHOT", "jar", path, snapshotsRepo, true );
assertTextPresent(
"Artifact 'archiva:archiva-multiple-artifacts:1.0-SNAPSHOT' was successfully deployed to repository '"
+ snapshotsRepo + "'" );
goToBrowsePage();
assertBrowsePage();
assertGroupsPage( "archiva/" );
assertArtifactsPage( "archiva-multiple-artifacts/" );
assertArtifactInfoPage( "1.0-SNAPSHOT/", snapshotsRepo, "archiva", "archiva-multiple-artifacts", "1.0-SNAPSHOT",
"jar" );
String firstSnapshotVersion = getText( "//div[@id='download']/div[@id='accordion']/p[2]/a/" );
Assert.assertTrue( firstSnapshotVersion.endsWith( "-1" ) );
String secondSnapshotVersion = getText( "//div[@id='download']/div[@id='accordion']/p[1]/a/" );
Assert.assertTrue( secondSnapshotVersion.endsWith( "-2" ) );
}
public void testAddMetadataPropertyEmpty()
{
goToBrowsePage();
clickLinkWithText( getProperty( "ARTIFACT_GROUPID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_ARTIFACTID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_VERSION" ) + "/" );
clickLinkWithText( "Metadata" );
assertTextPresent( "No metadata content." );
assertButtonWithValuePresent( "Add" );
clickButtonWithValue( "Add" );
waitPage();
assertTextPresent( "Property Name and Property Value are required." );
}
@Test( dependsOnMethods = { "testAddMetadataPropertyEmpty" } )
public void testAddMetadataProperty()
{
addMetadataProperty();
}
@Test( dependsOnMethods = { "testAddMetadataProperty", "testWithCorrectUsernamePassword" } )
public void testDeleteMetadataProperty()
{
deleteMetadataProperty();
}
@Test( dependsOnMethods = { "testDeleteMetadataProperty" } )
public void testMetadataAccessWithRepositoryObserverRole()
{
addMetadataProperty();
logout();
goToBrowsePage();
clickLinkWithText( getProperty( "ARTIFACT_GROUPID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_ARTIFACTID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_VERSION" ) + "/" );
clickLinkWithText( "Metadata" );
waitPage();
assertTextNotPresent( "No metadata content." );
assertButtonWithValueNotPresent( "Add" );
assertTextNotPresent( "Add Property" );
assertImgWithAltNotPresent( "Delete" );
login( getAdminUsername(), getAdminPassword() );
deleteMetadataProperty();
}
private void addMetadataProperty()
{
goToBrowsePage();
clickLinkWithText( getProperty( "ARTIFACT_GROUPID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_ARTIFACTID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_VERSION" ) + "/" );
clickLinkWithText( "Metadata" );
assertTextPresent( "No metadata content." );
assertButtonWithValuePresent( "Add" );
assertTextPresent( "Add Property" );
setFieldValue( "propertyName", "foo" );
setFieldValue( "propertyValue", "bar" );
clickButtonWithValue( "Add" );
waitPage();
assertTextNotPresent( "No metadata content." );
assertTextPresent( "foo=bar" );
}
private void deleteMetadataProperty()
{
goToBrowsePage();
clickLinkWithText( getProperty( "ARTIFACT_GROUPID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_ARTIFACTID" ) + "/" );
clickLinkWithText( getProperty( "ARTIFACT_VERSION" ) + "/" );
clickLinkWithText( "Metadata" );
assertTextPresent( "foo=bar" );
assertButtonWithValuePresent( "Add" );
assertTextPresent( "Add Property" );
clickImgWithAlt( "Delete" );
waitPage();
assertTextNotPresent( "foo=bar" );
assertTextPresent( "Property successfully deleted." );
assertImgWithAltNotPresent( "Delete" );
assertTextPresent( "No metadata content." );
}
private void assertArtifactInfoPage( String version, String artifactInfoRepositoryId, String artifactInfoGroupId,
String artifactInfoArtifactId, String artifactInfoVersion,
String artifactInfoPackaging )
{
clickLinkWithText( version );
assertPage( "Apache Archiva \\ Browse Repository" );
assertTextPresent( artifactInfoRepositoryId );
assertTextPresent( artifactInfoGroupId );
assertTextPresent( artifactInfoArtifactId );
assertTextPresent( artifactInfoVersion );
assertTextPresent( artifactInfoPackaging );
}
private void assertArtifactsPage( String artifactId )
{
clickLinkWithText( artifactId );
assertPage( "Apache Archiva \\ Browse Repository" );
assertTextPresent( "Versions" );
}
private void assertGroupsPage( String groupId )
{
clickLinkWithText( groupId );
assertPage( "Apache Archiva \\ Browse Repository" );
assertTextPresent( "Artifacts" );
}
}

View File

@ -1,132 +0,0 @@
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.Test;
/**
* Test all actions affected with CSRF security issue.
*/
@Test( groups = { "csrf" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true )
public class CSRFSecurityTest
extends AbstractArchivaTest
{
public void testCSRFDeleteRepository()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/deleteRepository.action?repoid=test&method%3AdeleteContents=Delete+Configuration+and+Contents" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFDeleteArtifact()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/deleteArtifact!doDelete.action?groupId=1&artifactId=1&version=1&repositoryId=snapshots" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFAddRepositoryGroup()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/addRepositoryGroup.action?repositoryGroup.id=csrfgrp" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFDeleteRepositoryGroup()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/deleteRepositoryGroup.action?repoGroupId=test&method%3Adelete=Confirm" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFDisableProxyConnector()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/disableProxyConnector!disable.action?target=maven2-repository.dev.java.net&source=internal" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFDeleteProxyConnector()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/deleteProxyConnector!delete.action?target=maven2-repository.dev.java.net&source=snapshots" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFDeleteLegacyArtifactPath()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/deleteLegacyArtifactPath.action?path=jaxen%2Fjars%2Fjaxen-1.0-FCS-full.jar" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFSaveNetworkProxy()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/saveNetworkProxy.action?mode=add&proxy.id=ntwrk&proxy.protocol=http&" +
"proxy.host=test&proxy.port=8080&proxy.username=&proxy.password=" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFDeleteNetworkProxy()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/deleteNetworkProxy!delete.action?proxyid=myproxy" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFAddFileTypePattern()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/repositoryScanning!addFiletypePattern.action?pattern=**%2F*.rum&fileTypeId=artifacts" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFRemoveFileTypePattern()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/repositoryScanning!removeFiletypePattern.action?pattern=**%2F*.rum&fileTypeId=artifacts" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testCSRFUpdateKnownConsumers()
{
getSelenium().open( baseUrl );
getSelenium().open( baseUrl + "/admin/repositoryScanning!updateKnownConsumers.action?enabledKnownContentConsumers=auto-remove&" +
"enabledKnownContentConsumers=auto-rename&enabledKnownContentConsumers=create-missing-checksums&" +
"enabledKnownContentConsumers=index-content&enabledKnownContentConsumers=metadata-updater&" +
"enabledKnownContentConsumers=repository-purge&enabledKnownContentConsumers=update-db-artifact&" +
"enabledKnownContentConsumers=validate-checksums" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
}

View File

@ -1,47 +0,0 @@
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.Test;
@Test( groups = { "findartifact" }, dependsOnGroups = {"about"}, sequential = true )
public class FindArtifactTest
extends AbstractArchivaTest
{
@Test(alwaysRun = true)
public void testFindArtifactNullValues()
{
goToFindArtifactPage();
clickButtonWithValue( "Search" );
assertTextPresent( "You must select a file, or enter the checksum. If the file was given and you receive this message, there may have been an error generating the checksum." );
}
@Test(alwaysRun = true)
public void testFindArtifactUsingChecksum()
{
goToFindArtifactPage();
setFieldValue( "checksumSearch_q", "8e896baea663a45d7bd2737f8e464481" );
clickButtonWithValue( "Search" );
assertTextPresent( "No results found" );
}
// TODO: test using file upload on Firefox versions that support getAsBinary (ie, no applet)
}

View File

@ -1,142 +0,0 @@
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.AbstractArtifactManagementTest;
import org.testng.annotations.Test;
@Test( groups = { "legacysupport" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true )
public class LegacySupportTest
extends AbstractArtifactManagementTest
{
public void testAddLegacyArtifact_NullValues()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "", "", "", "", "", "", false );
assertTextPresent( "You must enter a legacy path." );
assertTextPresent( "You must enter a groupId." );
assertTextPresent( "You must enter an artifactId." );
assertTextPresent( "You must enter a version." );
assertTextPresent( "You must enter a type." );
}
public void testAddLegacyArtifact_NullLegacyPath()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "", "test", "test", "1.0-SNAPSHOT", "testing", "jar", false );
assertTextPresent( "You must enter a legacy path." );
}
public void testAddLegacyArtifact_NullGroupId()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test", "", "test", "1.0-SNAPSHOT", "testing", "jar", false );
assertTextPresent( "You must enter a groupId." );
}
public void testAddLegacyArtifact_NullArtifactId()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test", "test", "", "1.0-SNAPSHOT", "testing", "jar", false );
assertTextPresent( "You must enter an artifactId." );
}
public void testAddLegacyArtifact_NullVersion()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test", "test", "test", "", "testing", "jar", false );
assertTextPresent( "You must enter a version." );
}
public void testAddLegacyArtifact_NullType()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test", "test", "test", "1.0-SNAPSHOT", "testing", "", false );
assertTextPresent( "You must enter a type." );
}
public void testAddLegacyArtifact_InvalidValues()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "<> ~+[ ]'\"" , "<> \\/~+[ ]'\"" , "<> \\/~+[ ]'\"" , "<> \\/~+[ ]'\"" , "<> \\/~+[ ]'\"" , "<> \\/~+[ ]'\"",
false );
assertTextPresent( "Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
public void testAddLegacyArtifact_InvalidLegacyPath()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "<> ~+[ ]'\"" , "test" , "test" , "1.0-SNAPSHOT" , "testing" , "jar", false );
assertTextPresent( "Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
}
public void testAddLegacyArtifact_InvalidGroupId()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test" , "<> \\/~+[ ]'\"" , "test" , "1.0-SNAPSHOT" , "testing" , "jar", false );
assertTextPresent( "Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
public void testAddLegacyArtifact_InvalidArtifactId()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test" , "test" , "<> \\/~+[ ]'\"" , "1.0-SNAPSHOT" , "testing" , "jar", false );
assertTextPresent( "Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
public void testAddLegacyArtifact_InvalidVersion()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test" , "test" , "test" , "<> \\/~+[ ]'\"" , "testing" , "jar", false );
assertTextPresent( "Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
public void testAddLegacyArtifact_InvalidType()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test" , "test" , "test" , "1.0-SNAPSHOT" , "testing" , "<> \\/~+[ ]'\"", false );
assertTextPresent( "Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
public void testAddLegacyArtifact_InvalidClassifier()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test" , "test" , "test" , "1.0-SNAPSHOT" , "<> \\/~+[ ]'\"" , "jar", false );
assertTextPresent( "Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
}

View File

@ -1,123 +0,0 @@
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
*
*/
@Test( groups = { "login" }, dependsOnGroups = {"about"})
public class LoginTest
extends AbstractArchivaTest
{
@Test(alwaysRun = true)
public void testWithBadUsername()
{
goToLoginPage();
setFieldValue( "loginForm_username", "badUsername" );
getSelenium().click( "loginSubmit" );
//getSelenium().waitForPageToLoad( maxWaitTimeInMs );
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

@ -1,102 +0,0 @@
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.AbstractMergingRepositoriesTest;
import org.testng.annotations.Test;
@Test(groups = {"merging"}, dependsOnMethods = {"testWithCorrectUsernamePassword"}, sequential = true)
public class MergingRepositoriesTest
extends AbstractMergingRepositoriesTest
{
public void testAddStagingRepository()
{
goToRepositoriesPage();
getSelenium().open( "/archiva/admin/addRepository.action" );
addStagingRepository( "merging-repo", "merging-repo", getRepositoryDir() + "merging-repo/", "",
"Maven 2.x Repository", "0 0 * * * ?", "", "" );
assertTextPresent( "merging-repo" );
}
// here we upload an artifact to the staging repository
@Test(dependsOnMethods = {"testAddStagingRepository"}, groups = "requiresUpload" )
public void testAddArtifactToStagingRepository()
{
addArtifact( getGroupId(), getArtifactId(), getVersion(), getPackaging(), getValidArtifactFilePath(),
"merging-repo-stage", true );
assertTextPresent( "Artifact '" + getGroupId() + ":" + getArtifactId() + ":" + getVersion() +
"' was successfully deployed to repository 'merging-repo-stage'" );
}
// here we test the merging (no conflicts artifacts are available)
@Test(dependsOnMethods = {"testAddArtifactToStagingRepository"})
public void testMerging()
{
goToRepositoriesPage();
clickButtonWithValue( "Merge" );
assertTextPresent( "No conflicting artifacts" );
clickButtonWithValue( "Merge All" );
assertTextPresent( "Repository 'merging-repo-stage' successfully merged to 'merging-repo'." );
}
// check audit updating is done properly or not
@Test(dependsOnMethods = {"testMerging"})
public void testAuditLogs()
{
goToAuditLogReports();
assertTextPresent( "Merged Artifact" );
assertTextPresent( "merging-repo" );
}
// merging is done by skipping conflicts
@Test(dependsOnMethods = {"testMerging"})
public void testMergingWithSkippingConflicts()
{
goToRepositoriesPage();
clickButtonWithValue( "Merge" );
assertTextPresent( "WARNING: The following are the artifacts in conflict." );
clickButtonWithValue( "Merge With Skip" );
assertTextPresent( "Repository 'merging-repo-stage' successfully merged to 'merging-repo'." );
}
// merging all
@Test(dependsOnMethods = {"testMerging"})
public void testMergingWithOutSkippingConflicts()
{
goToRepositoriesPage();
clickButtonWithValue( "Merge" );
assertTextPresent( "WARNING: The following are the artifacts in conflict." );
clickButtonWithValue( "Merge All" );
assertTextPresent( "Repository 'merging-repo-stage' successfully merged to 'merging-repo'." );
}
// change the configuaration first and try to upload existing artifact to the repository
@Test(dependsOnMethods = {"testAddArtifactToStagingRepository"})
public void testConfigurationChangesOfStagingRepository()
{
editManagedRepository();
addArtifact( getGroupId(), getArtifactId(), getVersion(), getPackaging(), getValidArtifactFilePath(),
"merging-repo-stage", true );
assertTextPresent(
"Overwriting released artifacts in repository '" + "merging-repo-stage" + "' is not allowed." );
}
}

View File

@ -1,148 +0,0 @@
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.AbstractRepositoryTest;
import org.testng.annotations.Test;
@Test( groups = { "networkproxies" }, dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public class NetworkProxiesTest
extends AbstractRepositoryTest
{
@Test( dependsOnMethods = { "testDeleteRepositoryGroup" } )
public void testAddNetworkProxyNullValues()
{
goToNetworkProxiesPage();
addNetworkProxy( "", "", "", "", "", "" );
assertTextPresent( "You must enter an identifier." );
assertTextPresent( "You must enter a protocol." );
assertTextPresent( "You must enter a host." );
}
@Test( dependsOnMethods = { "testAddNetworkProxyNullValues" } )
public void testAddNetworkProxyNullIdentifier()
{
goToNetworkProxiesPage();
addNetworkProxy( "", "http", "localhost", "8080", "", "" );
assertTextPresent( "You must enter an identifier." );
}
@Test( dependsOnMethods = { "testAddNetworkProxyNullIdentifier" } )
public void testAddNetworkProxyNullProtocol()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "", "localhost", "8080", "", "" );
assertTextPresent( "You must enter a protocol." );
}
@Test( dependsOnMethods = { "testAddNetworkProxyNullProtocol" } )
public void testAddNetworkProxiesNullHostname()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "http", "", "8080", "", "" );
assertTextPresent( "You must enter a host." );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesNullHostname" } )
public void testAddNetworkProxiesInvalidValues()
{
goToNetworkProxiesPage();
addNetworkProxy( "<> \\/~+[ ]'\"", "<> ~+[ ]'\"", "<> ~+[ ]'\"", "0", "<> ~+[ ]'\"", "");
assertTextPresent( "Proxy id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Protocol must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), dots(.), colons(:), and dashes(-)." );
assertTextPresent( "Host must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "Port needs to be larger than 1" );
assertTextPresent( "Username must only contain alphanumeric characters, at's(@), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesInvalidValues" } )
public void testAddNetworkProxiesInvalidIdentifier()
{
goToNetworkProxiesPage();
addNetworkProxy( "<> \\/~+[ ]'\"", "http", "localhost", "8080", "", "");
assertTextPresent( "Proxy id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesInvalidIdentifier" } )
public void testAddNetworkProxiesInvalidProtocol()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "<> ~+[ ]'\"", "localhost", "8080", "", "");
assertTextPresent( "Protocol must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), dots(.), colons(:), and dashes(-)." );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesInvalidProtocol" } )
public void testAddNetworkProxiesInvalidHostname()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "http", "<> ~+[ ]'\"", "8080", "", "");
assertTextPresent( "Host must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesInvalidHostname" } )
public void testAddNetworkProxiesInvalidPort()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "http", "localhost", "0", "", "");
assertTextPresent( "Port needs to be larger than 1" );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesInvalidPort" } )
public void testAddNetworkProxiesInvalidUsername()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "http", "localhost", "8080", "<> ~+[ ]'\"", "");
assertTextPresent( "Username must only contain alphanumeric characters, at's(@), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
}
@Test (dependsOnMethods = { "testAddNetworkProxiesInvalidUsername" } )
public void testAddNetworkProxiesValidValues()
{
goToNetworkProxiesPage();
addNetworkProxy( "testing123", "http", "localhost", "8080", "", "" );
assertPage( "Apache Archiva \\ Administration - Network Proxies" );
assertTextPresent( "testing123" );
}
@Test( dependsOnMethods = { "testAddNetworkProxiesValidValues" } )
public void testEditNetworkProxy()
{
editNetworkProxies( "proxy.host", "localhost" );
assertPage( "Apache Archiva \\ Administration - Network Proxies" );
assertTextPresent( "localhost" );
}
@Test( dependsOnMethods = { "testEditNetworkProxy" } )
public void testDeleteNetworkProxy()
{
deleteNetworkProxy();
assertPage( "Apache Archiva \\ Administration - Network Proxies" );
assertTextPresent( "There are no network proxies configured yet." );
}
@Test( dependsOnMethods = { "testDeleteNetworkProxy" } )
public void testAddNetworkProxyAfterDelete()
{
addNetworkProxy( "testing123", "http", "localhost", "8080", "", "" );
assertPage( "Apache Archiva \\ Administration - Network Proxies" );
assertTextPresent( "testing123" );
}
}

View File

@ -1,83 +0,0 @@
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.AbstractArtifactReportsTest;
import org.testng.annotations.Test;
@Test( groups = { "reports" }, dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public class ReportsTest
extends AbstractArtifactReportsTest
{
// TODO Tests for repository with defects
public void testRepoStatisticsWithoutRepoCompared()
{
goToReportsPage();
clickButtonWithValue( "View Statistics" );
assertTextPresent( "Please select a repository (or repositories) from the list." );
}
@Test( dependsOnMethods = { "testRepoStatisticsWithoutRepoCompared" } )
public void testRepositoryStatisticsWithoutDate()
{
String repositoryName = getProperty( "REPOSITORY_NAME" );
compareRepositories( "label=" + repositoryName, "", "" );
// TODO
// assertTextPresent( "Statistics Report" );
}
@Test( dependsOnMethods = { "testRepoStatisticsWithoutRepoCompared" } )
public void testRepositoryStatisticsEndEarlierThanStart()
{
String repositoryName = getProperty( "REPOSITORY_NAME" );
String startDate = getProperty( "END_DATE" );
String endDate = getProperty( "START_DATE" );
compareRepositories( "label=" + repositoryName, startDate, endDate );
// assertTextPresent( "Statistics for Repository '" + repositoryName + "'" );
assertPage( "Apache Archiva \\ Reports" );
assertTextPresent( "Start Date must be earlier than the End Date" );
}
public void testRepositoryStatistics()
{
String repositoryName = getProperty( "REPOSITORY_NAME" );
String startDate = getProperty( "START_DATE" );
String endDate = getProperty( "END_DATE" );
compareRepositories( "label=" + repositoryName, startDate, endDate );
// assertTextPresent( "Statistics for Repository '" + repositoryName + "'" );
// assertPage( "Apache Archiva \\ Reports" );
// assertTextPresent( "Statistics Report" );
}
/*
* @Test( dependsOnMethods = { "testRepositoryStatistics" } ) public void
* testRepositoriesStatisticComparisonReport() { //goToReportsPage(); clickButtonWithValue( "-->>" , false );
* clickButtonWithValue( "View Statistics" ); assertTextPresent( "Statistics Report" ); } public void
* testRepositoryHealthWithoutDefect() { goToReportsPage(); String groupId = getProperty( "ARTIFACT_GROUPID" );
* getSelenium().type( "generateReport_groupId" , groupId ); clickButtonWithValue( "Show Report" ); assertPage(
* "Apache Archiva \\ Reports" ); assertTextPresent( "The operation generated an empty report." ); } public void
* testRepositoryHealthWithoutGroupId() { goToReportsPage(); clickButtonWithValue( "Show Report" ); assertPage(
* "Apache Archiva \\ Reports" ); assertTextPresent( "The operation generated an empty report." ); //TODO As of the
* creation of the tests, GroupId is not a required field in showing the reports of repository health. GroupId
* should be required I think. }
*/
}

View File

@ -1,224 +0,0 @@
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.AbstractRepositoryTest;
import org.testng.Assert;
import org.testng.annotations.Test;
@Test( groups = { "reposcan" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true )
public class RepositoryScanningTest
extends AbstractRepositoryTest
{
public void testAddArtifactFileType_NullValue()
{
goToRepositoryScanningPage();
clickAddIcon( "newpattern_0" );
assertTextPresent( "Unable to process blank pattern." );
}
@Test
public void testAddArtifactFileType()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_0", "**/*.dll" );
clickAddIcon( "newpattern_0" );
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[1]/table.13.0" ), "**/*.dll" );
}
@Test( dependsOnMethods = { "testAddArtifactFileType" } )
public void testAddArtifactFileType_ExistingValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_0", "**/*.zip" );
clickAddIcon( "newpattern_0" );
Assert.assertEquals( getErrorMessageText(), "File type [artifacts] already contains pattern [**/*.zip]" );
}
@Test( dependsOnMethods = { "testAddArtifactFileType" } )
public void testDeleteArtifactFileType()
{
goToRepositoryScanningPage();
String path = "//div[@id='contentArea']/div/div/table/tbody/tr[14]/td/code";
assertElementPresent( path );
Assert.assertEquals( getSelenium().getText( path ), "**/*.dll" );
clickDeleteIcon( "**/*.dll" );
assertElementNotPresent( path );
}
@Test( dependsOnMethods = { "testDeleteArtifactFileType" } )
public void testAddAutoRemove_NullValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_1", "" );
clickAddIcon( "newpattern_1" );
assertTextPresent( "Unable to process blank pattern." );
}
@Test( dependsOnMethods = { "testAddAutoRemove_NullValue" } )
public void testAddAutoRemove_ExistingValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_1", "**/*-" );
clickAddIcon( "newpattern_1" );
Assert.assertEquals( getErrorMessageText(), "File type [auto-remove] already contains pattern [**/*-]" );
}
@Test( dependsOnMethods = { "testAddAutoRemove_NullValue" } )
public void testAddAutoRemove()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_1", "**/*.test" );
clickAddIcon( "newpattern_1" );
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[2]/table.3.0" ), "**/*.test" );
}
@Test( dependsOnMethods = { "testAddAutoRemove" } )
public void testDeleteAutoRemove()
{
goToRepositoryScanningPage();
String path = "//div[@id='contentArea']/div/div[2]/table/tbody/tr[4]/td/code";
assertElementPresent( path );
Assert.assertEquals( getSelenium().getText( path ), "**/*.test" );
clickDeleteIcon( "**/*.test" );
assertElementNotPresent( path );
}
@Test( dependsOnMethods = { "testDeleteAutoRemove" } )
public void testAddIgnoredArtifacts_NullValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_2", "" );
clickAddIcon( "newpattern_2" );
Assert.assertEquals( getErrorMessageText(),
"Unable to process blank pattern." );
}
@Test
public void testAddIgnoredArtifacts_ExistingValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_2", "**/*.sh" );
clickAddIcon( "newpattern_2" );
Assert.assertEquals( getErrorMessageText(), "File type [ignored] already contains pattern [**/*.sh]" );
}
@Test
public void testAddIgnoredArtifacts()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_2", "**/*.log" );
clickAddIcon( "newpattern_2" );
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[3]/table.6.0" ), "**/*.log" );
}
@Test( dependsOnMethods = { "testAddIgnoredArtifacts" } )
public void testDeleteIgnoredArtifacts()
{
goToRepositoryScanningPage();
String pattern = "**/*.log";
String path = "//div[@id='contentArea']/div/div[3]/table/tbody/tr[7]/td/code";
assertElementPresent( path );
Assert.assertEquals( getSelenium().getText( path ), pattern );
clickDeleteIcon( pattern );
assertElementNotPresent( path );
}
//
@Test( dependsOnMethods = { "testDeleteIgnoredArtifacts" } )
public void testAddIndexableContent_NullValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_3", "" );
clickAddIcon( "newpattern_3" );
Assert.assertEquals( getErrorMessageText(),
"Unable to process blank pattern." );
}
@Test
public void testAddIndexableContent_ExistingValue()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_3", "**/*.xml" );
clickAddIcon( "newpattern_3" );
Assert.assertEquals( getErrorMessageText(),
"File type [indexable-content] already contains pattern [**/*.xml]" );
}
@Test
public void testAddIndexableContent()
{
goToRepositoryScanningPage();
setFieldValue( "newpattern_3", "**/*.html" );
clickAddIcon( "newpattern_3" );
Assert.assertEquals( getSelenium().getTable( "//div[@id='contentArea']/div/div[4]/table.9.0" ), "**/*.html" );
}
@Test( dependsOnMethods = { "testAddIndexableContent" } )
public void testDeleteIndexableContent()
{
goToRepositoryScanningPage();
String pattern = "**/*.html";
String path = "//div[@id='contentArea']/div/div[4]/table/tbody/tr[10]/td/code";
assertElementPresent( path );
Assert.assertEquals( getSelenium().getText( path ), pattern );
clickDeleteIcon( pattern );
assertElementNotPresent( path );
}
@Test( dependsOnMethods = { "testDeleteIndexableContent" } )
public void testUpdateConsumers()
{
goToRepositoryScanningPage();
checkField( "enabledKnownContentConsumers" );
checkField( "//input[@name='enabledKnownContentConsumers' and @value='auto-rename']" );
clickButtonWithValue( "Update Consumers" );
assertPage( "Apache Archiva \\ Administration - Repository Scanning" );
}
@Test( dependsOnMethods = { "testUpdateConsumers" } )
public void testUpdateConsumers_UnsetAll()
{
goToRepositoryScanningPage();
getSelenium().uncheck( "enabledKnownContentConsumers" );
getSelenium().uncheck( "//input[@name='enabledKnownContentConsumers' and @value='auto-rename']" );
getSelenium().uncheck( "//input[@name='enabledKnownContentConsumers' and @value='create-missing-checksums']" );
getSelenium().uncheck( "//input[@name='enabledKnownContentConsumers' and @value='index-content']" );
getSelenium().uncheck( "//input[@name='enabledKnownContentConsumers' and @value='metadata-updater']" );
getSelenium().uncheck( "//input[@name='enabledKnownContentConsumers' and @value='repository-purge']" );
getSelenium().uncheck( "//input[@name='enabledKnownContentConsumers' and @value='validate-checksums']" );
clickButtonWithValue( "Update Consumers" );
assertPage( "Apache Archiva \\ Administration - Repository Scanning" );
}
private void clickAddIcon( String fieldId )
{
String xPath = "//preceding::td/input[@id='" + fieldId + "']//following::td/a/img";
clickLinkWithLocator( xPath );
}
private void clickDeleteIcon( String pattern )
{
String xPath = "//preceding::td/code[contains(text(),'" + pattern + "')]//following::td/a/img";
clickLinkWithLocator( xPath );
}
}

View File

@ -1,354 +0,0 @@
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.AbstractRepositoryTest;
import org.testng.annotations.Test;
@Test( groups = { "repository" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true )
public class RepositoryTest
extends AbstractRepositoryTest
{
@Test
public void testAddManagedRepoValidValues()
{
goToRepositoriesPage();
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "managedrepo1", "Managed Repository Sample 1", getRepositoryDir() + "repository/", "",
"Maven 2.x Repository", "0 0 * * * ?", "", "", true );
clickButtonWithValue( "Save" );
assertTextPresent( "Managed Repository Sample 1" );
assertRepositoriesPage();
}
@Test( dependsOnMethods = { "testAddManagedRepoValidValues" } )
public void testAddManagedRepoInvalidValues()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "<> \\/~+[ ]'\"", "<>\\~+[]'\"", "<> ~+[ ]'\"", "<> ~+[ ]'\"", "Maven 2.x Repository", "",
"-1", "101", false );
assertTextPresent(
"Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent(
"Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "Repository Purge By Retention Count needs to be between 1 and 100." );
assertTextPresent( "Repository Purge By Days Older Than needs to be larger than 0." );
assertTextPresent( "Cron expression is required." );
}
@Test
public void testAddManagedRepoInvalidIdentifier()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "<> \\/~+[ ]'\"", "name", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "1",
"1", false );
assertTextPresent(
"Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
@Test
public void testAddManagedRepoInvalidRepoName()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "<>\\~+[]'\"", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?",
"1", "1", false );
assertTextPresent(
"Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
}
@Test
public void testAddManagedRepoInvalidDirectory()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "name", "<> ~+[ ]'\"", "/.index", "Maven 2.x Repository", "0 0 * * * ?",
"1", "1", false );
assertTextPresent(
"Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
}
@Test
public void testAddManagedRepoInvalidIndexDir()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "name", "/home", "<> ~+[ ]'\"", "Maven 2.x Repository", "0 0 * * * ?", "1",
"1", false );
assertTextPresent(
"Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
}
@Test
public void testAddManagedRepoInvalidRetentionCount()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "name", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "1",
"101", false );
assertTextPresent( "Repository Purge By Retention Count needs to be between 1 and 100." );
}
@Test
public void testAddManagedRepoInvalidDaysOlder()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "name", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "-1",
"1", false );
assertTextPresent( "Repository Purge By Days Older Than needs to be larger than 0." );
}
@Test
public void testAddManagedRepoBlankValues()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "", "", "", "", "Maven 2.x Repository", "", "", "", false );
assertTextPresent( "You must enter a repository identifier." );
assertTextPresent( "You must enter a repository name." );
assertTextPresent( "You must enter a directory." );
assertTextPresent( "Cron expression is required." );
}
@Test
public void testAddManagedRepoNoIdentifier()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "", "name", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "", "", false );
assertTextPresent( "You must enter a repository identifier." );
}
@Test
public void testAddManagedRepoNoRepoName()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "", "",
false );
assertTextPresent( "You must enter a repository name." );
}
@Test
public void testAddManagedRepoNoDirectory()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "name", "", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "", "",
false );
assertTextPresent( "You must enter a directory." );
}
@Test
public void testAddManagedRepoNoCron()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "identifier", "name", "/home", "/.index", "Maven 2.x Repository", "", "", "", false );
assertTextPresent( "Cron expression is required." );
}
@Test
public void testAddManagedRepoForEdit()
{
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "managedrepo", "Managed Repository Sample", getRepositoryDir() + "local-repo/", "",
"Maven 2.x Repository", "0 0 * * * ?", "", "", true );
clickButtonWithValue( "Save" );
assertTextPresent( "Managed Repository Sample" );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidValues()
{
editManagedRepository( "<>\\~+[]'\"", "<> ~+[ ]'\"", "<> ~+[ ]'\"", "Maven 2.x Repository", "", "-1", "101" );
assertTextPresent(
"Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent(
"Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "Repository Purge By Retention Count needs to be between 1 and 100." );
assertTextPresent( "Repository Purge By Days Older Than needs to be larger than 0." );
assertTextPresent( "Cron expression is required." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidRepoName()
{
editManagedRepository( "<>\\~+[]'\"", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "1", "1" );
assertTextPresent(
"Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidDirectory()
{
editManagedRepository( "name", "<> ~+[ ]'\"", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "1", "1" );
assertTextPresent(
"Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidIndexDir()
{
editManagedRepository( "name", "/home", "<> ~+[ ]'\"", "Maven 2.x Repository", "0 0 * * * ?", "1", "1" );
assertTextPresent(
"Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidCronBadText()
{
editManagedRepository( "name", "/home", "/.index", "Maven 2.x Repository", "asdf", "1", "1" );
assertTextPresent( "Invalid cron expression." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidCronBadValue()
{
editManagedRepository( "name", "/home", "/.index", "Maven 2.x Repository", "60 0 * * * ?", "1", "1" );
assertTextPresent( "Invalid cron expression." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidCronTooManyElements()
{
editManagedRepository( "name", "/home", "/.index", "Maven 2.x Repository", "* * * * * * * *", "1", "1" );
assertTextPresent( "Invalid cron expression." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidRetentionCount()
{
editManagedRepository( "name", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "1", "101" );
assertTextPresent( "Repository Purge By Retention Count needs to be between 1 and 100." );
}
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepoInvalidDaysOlder()
{
editManagedRepository( "name", "/home", "/.index", "Maven 2.x Repository", "0 0 * * * ?", "-1", "1" );
assertTextPresent( "Repository Purge By Days Older Than needs to be larger than 0." );
}
// TODO
@Test( dependsOnMethods = { "testAddManagedRepoForEdit" } )
public void testEditManagedRepo()
{
editManagedRepository( "repository.name", "Managed Repo" );
assertTextPresent( "Managed Repository Sample" );
}
// TODO
@Test( dependsOnMethods = { "testEditManagedRepo" }, enabled = false )
public void testDeleteManageRepo()
{
deleteManagedRepository();
// assertTextNotPresent( "managedrepo" );
}
@Test( dependsOnMethods = { "testAddRemoteRepoValidValues" } )
public void testAddRemoteRepoNullValues()
{
getSelenium().open( "/archiva/admin/addRemoteRepository.action" );
addRemoteRepository( "", "", "", "", "", "", "Maven 2.x Repository", false );
assertTextPresent( "You must enter a repository identifier." );
assertTextPresent( "You must enter a repository name." );
assertTextPresent( "You must enter a url." );
}
@Test
public void testAddRemoteRepositoryNullIdentifier()
{
getSelenium().open( "/archiva/admin/addRemoteRepository.action" );
addRemoteRepository( "", "Remote Repository Sample", "http://repository.codehaus.org/org/codehaus/mojo/", "",
"", "", "Maven 2.x Repository", false );
assertTextPresent( "You must enter a repository identifier." );
}
@Test( dependsOnMethods = { "testAddRemoteRepositoryNullIdentifier" } )
public void testAddRemoteRepoNullName()
{
addRemoteRepository( "remoterepo", "", "http://repository.codehaus.org/org/codehaus/mojo/", "", "", "",
"Maven 2.x Repository", false );
assertTextPresent( "You must enter a repository name." );
}
@Test
public void testAddRemoteRepoNullURL()
{
getSelenium().open( "/archiva/admin/addRemoteRepository.action" );
addRemoteRepository( "remoterepo", "Remote Repository Sample", "", "", "", "", "Maven 2.x Repository", false );
assertTextPresent( "You must enter a url." );
}
@Test( dependsOnMethods = { "testAddRemoteRepoNullURL" } )
public void testAddProxyConnectorValidValues()
throws Exception
{
getSelenium().open( "/archiva/admin/addProxyConnector.action" );
addProxyConnector( "(direct connection)", "internal", "remoterepo" );
assertTextPresent( "remoterepo" );
assertTextPresent( "Remote Repository Sample" );
}
@Test
public void testAddRemoteRepoValidValues()
{
getSelenium().open( "/archiva/admin/addRemoteRepository.action" );
addRemoteRepository( "remoterepo", "Remote Repository Sample",
"http://repository.codehaus.org/org/codehaus/mojo/", "", "", "", "Maven 2.x Repository",
true );
assertTextPresent( "Remote Repository Sample" );
}
// *** BUNDLED REPOSITORY TEST ***
@Test( dependsOnMethods = { "testWithCorrectUsernamePassword" }, alwaysRun = true )
public void testBundledRepository()
{
String repo1 = baseUrl + "repository/internal/";
String repo2 = baseUrl + "repository/snapshots/";
assertRepositoryAccess( repo1 );
assertRepositoryAccess( repo2 );
getSelenium().open( "/archiva" );
}
private void assertRepositoryAccess( String repo )
{
getSelenium().open( "/archiva" );
goToRepositoriesPage();
assertLinkPresent( repo );
clickLinkWithText( repo );
assertPage( "Collection: /" );
assertTextPresent( "Collection: /" );
}
}

View File

@ -1,141 +0,0 @@
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.AbstractSearchTest;
import org.testng.annotations.Test;
@Test( groups = { "search" }, dependsOnGroups = { "about" }, sequential = true )
public class SearchTest
extends AbstractSearchTest
{
@Test( alwaysRun = true )
public void testSearchNonExistingArtifact()
throws Exception
{
searchForArtifact( getProperty( "SEARCH_BAD_ARTIFACT" ) );
assertTextPresent( "No results found" );
}
// TODO: make search tests more robust especially when comparing/asserting number of hits
@Test( alwaysRun = true )
public void testSearchExistingArtifact()
{
searchForArtifact( "artifactId:" + getProperty( "ARTIFACT_ARTIFACTID" ) );
//assertTextPresent( "Results" );
assertElementPresent( "resultsBox" );
assertTextPresent( "1 to 1 of 1" );
assertLinkPresent( "test" );
}
@Test( alwaysRun = true )
public void testViewSearchedArtifact()
{
searchForArtifact( getProperty( "ARTIFACT_ARTIFACTID" ) );
clickLinkWithLocator( "//span[@class=\"artifact-title\"]/a[text()='" + getProperty( "ARTIFACT_ARTIFACTID" ) + "']" );
assertPage( "Apache Archiva \\ Browse Repository" );
assertTextPresent( getProperty( "ARTIFACT_ARTIFACTID" ) );
clickLinkWithText( getProperty( "ARTIFACT_VERSION" ) + "/" );
assertPage( "Apache Archiva \\ Browse Repository" );
}
@Test( alwaysRun = true )
public void testSearchWithMultipleKeywords()
{
String groupId = getProperty( "ADD_REMOVE_GROUPID" );
String version = getProperty( "SNAPSHOT_VERSION" );
String packaging = getProperty( "SNAPSHOT_PACKAGING" );
String filePath = getProperty( "SNAPSHOT_ARTIFACTFILEPATH" );
String repoId = getProperty( "SNAPSHOT_REPOSITORYID" );
String existingArtifactId = getProperty( "ADD_REMOVE_ARTIFACTID" );
String multiKeywords = existingArtifactId.replace( "-", " " );
addArtifact( groupId, existingArtifactId, version, packaging, filePath, repoId, true );
// verify artifact is existing
searchForArtifact( existingArtifactId );
assertTextPresent( "Results" );
assertTextPresent( "Hits: 1 to 1 of 1" );
assertLinkPresent( existingArtifactId );
// search for existing artifact using multiple keywords
searchForArtifact( multiKeywords );
assertTextPresent( "Results" );
assertTextPresent( "Hits: 1 to 1 of 1" );
assertLinkPresent( existingArtifactId );
}
@Test( alwaysRun = true )
public void testSearchNonExistingArtifactInAdvancedSearch()
{
searchForArtifactAdvancedSearch( null, getProperty( "SEARCH_BAD_ARTIFACT" ), null, null, null, null );
assertTextPresent( "No results found" );
}
@Test( alwaysRun = true )
public void testSearchNoSearchCriteriaSpecifiedInAdvancedSearch()
{
searchForArtifactAdvancedSearch( null, null, null, null, null, null );
assertTextPresent( "Advanced Search - At least one search criteria must be provided." );
}
@Test( alwaysRun = true )
public void testSearchExistingArtifactUsingAdvancedSearchArtifactId()
{
searchForArtifactAdvancedSearch( null, getProperty( "ARTIFACT_ARTIFACTID" ), null,
getProperty( "REPOSITORYID" ), null, null );
assertTextPresent( "Results" );
assertTextPresent( "Hits: 1 to 1 of 1" );
assertLinkPresent( "test" );
}
@Test( alwaysRun = true )
public void testSearchExistingArtifactUsingAdvancedSearchGroupId()
{
searchForArtifactAdvancedSearch( getProperty( "GROUPID" ), null, null, getProperty( "REPOSITORYID" ), null,
null );
assertTextPresent( "Results" );
assertTextPresent( "Hits: 1 to 1 of 1" );
assertLinkPresent( "test" );
}
@Test( alwaysRun = true )
public void testSearchExistingArtifactAllCriteriaSpecifiedInAdvancedSearch()
{
searchForArtifactAdvancedSearch( getProperty( "GROUPID" ), getProperty( "ARTIFACT_ARTIFACTID" ),
getProperty( "ARTIFACT_VERSION" ), getProperty( "REPOSITORYID" ),
getProperty( "ARTIFACT_CLASSNAME" ), null );
assertTextPresent( "Results" );
assertTextPresent( "Hits: 1 to 1 of 1" );
assertLinkPresent( "test" );
}
@Test( alwaysRun = true )
public void testSearchExistingArtifactUsingAdvancedSearchNotInRepository()
{
searchForArtifactAdvancedSearch( null, getProperty( "ARTIFACT_ARTIFACTID" ), null, "snapshots", null, null );
assertTextPresent( "No results found" );
assertTextNotPresent( "Results" );
assertTextNotPresent( "Hits: 1 to 1 of 1" );
assertLinkNotPresent( "test" );
}
}

View File

@ -1,242 +0,0 @@
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.Test;
@Test( groups = {"userroles"}, dependsOnMethods = {"testWithCorrectUsernamePassword"} )
public class UserRolesTest
extends AbstractArchivaTest
{
private static final String EDIT_ROLES = "Roles";
public void testBasicAddDeleteUser()
{
username = getProperty( "GUEST_USERNAME" );
fullname = getProperty( "GUEST_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
deleteUser( username, fullname, getUserEmail() );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testBasicAddDeleteUser"} )
public void testUserWithGuestRole()
{
username = getProperty( "GUEST_USERNAME" );
fullname = getProperty( "GUEST_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkUserRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testUserWithGuestRole"} )
public void testUserWithRegisteredUserRole()
{
username = getProperty( "REGISTERED_USERNAME" );
fullname = getProperty( "REGISTERED_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkUserRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testUserWithRegisteredUserRole"} )
public void testUserWithSysAdminUserRole()
{
username = getProperty( "SYSAD_USERNAME" );
fullname = getProperty( "SYSAD_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkUserRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testUserWithSysAdminUserRole"} )
public void testUserWithUserAdminUserRole()
{
username = getProperty( "USERADMIN_USERNAME" );
fullname = getProperty( "USERADMIN_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkUserRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testUserWithUserAdminUserRole"} )
public void testUserWithGlobalRepoManagerRole()
{
username = getProperty( "GLOBALREPOMANAGER_USERNAME" );
fullname = getProperty( "GLOBALREPOMANAGER_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkUserRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testUserWithGlobalRepoManagerRole"} )
public void testUserWithGlobalRepoObserverRole()
{
username = getProperty( "GLOBALREPOOBSERVER_USERNAME" );
fullname = getProperty( "GLOBALREPOOBSERVER_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkUserRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
@Test( dependsOnMethods = {"testUserWithGlobalRepoObserverRole"} )
public void testUserWithRepoManagerInternalRole()
{
username = getProperty( "REPOMANAGER_INTERNAL_USERNAME" );
fullname = getProperty( "REPOMANAGER_INTERNAL_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkResourceRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
assertTextPresent( "Password successfully changed" );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
/*
* @Test (dependsOnMethods = { "testUserWithRepoManagerInternalRole" } ) public void
* testUserWithRepoManagerSnapshotsRole() { username = getProperty("REPOMANAGER_SNAPSHOTS_USERNAME"); fullname =
* getProperty("REPOMANAGER_SNAPSHOTS_FULLNAME"); createUser(username, fullname, getUserEmail(),
* getUserRolePassword(), true); clickLinkWithText( username ); clickLinkWithText( "Edit Roles" );
* checkResourceRoleWithValue( fullname ); clickButtonWithValue( "Submit" ); clickLinkWithText("Logout");
* login(username, getUserRolePassword()); changePassword( getUserRolePassword(), getUserRoleNewPassword()); // this
* section will be removed if issue from redback after changing password will be fixed. getSelenium().goBack();
* clickLinkWithText("Logout"); //assertTextPresent("You are already logged in."); login(username,
* getUserRoleNewPassword()); assertLeftNavMenuWithRole( fullname ); clickLinkWithText("Logout"); login(
* getAdminUsername() , getAdminPassword() ); }
*/
@Test( dependsOnMethods = {"testUserWithRepoManagerInternalRole"} )
public void testUserWithRepoObserverInternalRole()
{
username = getProperty( "REPOOBSERVER_INTERNAL_USERNAME" );
fullname = getProperty( "REPOOBSERVER_INTERNAL_FULLNAME" );
createUser( username, fullname, getUserEmail(), getUserRolePassword(), true );
clickLinkWithText( username );
clickLinkWithText( EDIT_ROLES );
checkResourceRoleWithValue( fullname );
clickButtonWithValue( "Submit" );
logout();
login( username, getUserRolePassword() );
changePassword( getUserRolePassword(), getUserRoleNewPassword() );
// this section will be removed if issue from redback after changing password will be fixed.
getSelenium().goBack();
logout();
// assertTextPresent("You are already logged in.");
login( username, getUserRoleNewPassword() );
assertLeftNavMenuWithRole( fullname );
logout();
login( getAdminUsername(), getAdminPassword() );
}
/*
* @Test (dependsOnMethods = { "testUserWithRepoObserverInternalRole" } ) public void
* testUserWithRepoObserverSnapshotsRole() { username = getProperty( "REPOOBSERVER_SNAPSHOTS_USERNAME" ); fullname =
* getProperty( "REPOOBSERVER_SNAPSHOTS_FULLNAME" ); createUser(username, fullname, getUserEmail(),
* getUserRolePassword(), true); clickLinkWithText( username ); clickLinkWithText( "Edit Roles" );
* checkResourceRoleWithValue( fullname ); clickButtonWithValue( "Submit" ); clickLinkWithText("Logout");
* login(username, getUserRolePassword()); changePassword( getUserRolePassword(), getUserRoleNewPassword()); // this
* section will be removed if issue from redback after changing password will be fixed. getSelenium().goBack();
* clickLinkWithText("Logout"); //assertTextPresent("You are already logged in."); login(username,
* getUserRoleNewPassword()); assertLeftNavMenuWithRole( fullname ); clickLinkWithText("Logout"); login(
* getAdminUsername() , getAdminPassword() ); }
*/
}

View File

@ -1,70 +0,0 @@
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.AbstractRepositoryTest;
import org.testng.annotations.Test;
import org.testng.Assert;
@Test( groups = { "virtualrepository" }, dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public class VirtualRepositoryTest
extends AbstractRepositoryTest
{
@Test
public void testAddRepositoryGroupNullValue()
{
addRepositoryGroup( " ", false );
assertTextPresent( "Identifier field is required." );
}
@Test( dependsOnMethods = { "testWithCorrectUsernamePassword" } )
public void testAddRepositoryGroupValidValue()
{
addRepositoryGroup( "testing", true );
Assert.assertEquals( getSelenium().getText( "//div[@id='contentArea']/div[2]/div/div[1]/p[1]" ), "testing" );
}
@Test( dependsOnMethods = { "testAddRepositoryGroupValidValue" } )
public void testAddRepositoryToRepositoryGroup()
{
addRepositoryToRepositoryGroup( "testing", "internal" );
Assert.assertEquals( getSelenium().getText( "//div[@id='contentArea']/div[2]/div/div[3]/div[2]/p[1]" ),
"internal" );
}
@Test( dependsOnMethods = { "testAddRepositoryToRepositoryGroup" } )
public void testDeleteRepositoryOfRepositoryGroup()
{
goToRepositoryGroupsPage();
deleteRepositoryInRepositoryGroups();
assertTextPresent( "Repository Groups" );
assertTextNotPresent( "No Repository Groups Defined." );
Assert.assertFalse( getSelenium().isElementPresent( "//div[@id='contentArea']/div[2]/div/div[3]/div[2]/p[1]" ) );
}
@Test( dependsOnMethods = { "testDeleteRepositoryOfRepositoryGroup" } )
public void testDeleteRepositoryGroup()
{
goToRepositoryGroupsPage();
deleteRepositoryGroup( "testing" );
assertTextPresent( "No Repository Groups Defined." );
}
}

View File

@ -1,242 +0,0 @@
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

@ -1,254 +0,0 @@
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.Test;
/**
* Test all actions affected with XSS security issue.
*/
@Test( groups = { "xss" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true )
public class XSSSecurityTest
extends AbstractArchivaTest
{
public void testDeleteArtifactImmunityToURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/deleteArtifact!doDelete.action?groupId=\"/>1<script>alert('xss')</script>&artifactId=\"/>1<script>alert('xss')</script>&version=\"/>1<script>alert('xss')</script>&repositoryId=\"/>1<script>alert('xss')</script>" );
assertDeleteArtifactPage();
assertTextPresent( "Invalid version." );
assertTextPresent(
"User is not authorized to delete artifacts in repository '\"/>1<script>alert('xss')</script>'." );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Repository id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertElementValue( "//input[@id='deleteArtifact_groupId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='deleteArtifact_artifactId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='deleteArtifact_version']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//select[@id='deleteArtifact_repositoryId']", "internal" );
}
public void testDeleteArtifactImmunityToEncodedURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/deleteArtifact!doDelete.action?groupId=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&artifactId=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&version=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&repositoryId=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E" );
assertDeleteArtifactPage();
assertTextPresent( "Invalid version." );
assertTextPresent(
"User is not authorized to delete artifacts in repository '\"/>1<script>alert('xss')</script>'." );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Repository id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertElementValue( "//input[@id='deleteArtifact_groupId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='deleteArtifact_artifactId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='deleteArtifact_version']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//select[@id='deleteArtifact_repositoryId']", "internal" );
}
public void testEditAppearanceImmunityToURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/admin/configureAppearance.action?organisationName=<script>alert('xss')</script>&organisationUrl=<script>alert('xss')</script>&organisationLogo=<script>alert('xss')</script>" );
assertAppearancePage();
assertXpathCount( "//td[text()=\"<script>alert('xss')</script>\"]", 1 );
assertXpathCount( "//code[text()=\"<script>alert('xss')</script>\"]", 2 );
}
public void testEditAppearanceImmunityToEncodedURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/admin/configureAppearance.action?organisationName=%3Cscript%3Ealert('xss')%3C%2Fscript%3E&organisationUrl=%3Cscript%3Ealert('xss')%3C%2Fscript%3E&organisationLogo=%3Cscript%3Ealert('xss')%3C%2Fscript%3E" );
assertAppearancePage();
assertXpathCount( "//td[text()=\"<script>alert('xss')</script>\"]", 1 );
assertXpathCount( "//code[text()=\"<script>alert('xss')</script>\"]", 2 );
}
public void testAddLegacyArtifactImmunityToURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/admin/addLegacyArtifactPath!commit.action?legacyArtifactPath.path=\"/>1<script>alert('xss')</script>&groupId=\"/>1<script>alert('xss')</script>&artifactId=\"/>1<script>alert('xss')</script>&version=\"/>1<script>alert('xss')</script>&classifier=\"/>1<script>alert('xss')</script>&type=\"/>1<script>alert('xss')</script>" );
assertAddLegacyArtifactPathPage();
assertTextPresent(
"Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertElementValue( "//input[@id='addLegacyArtifactPath_legacyArtifactPath_path']",
"\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_artifactId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_version']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_groupId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_classifier']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_type']", "\"/>1<script>alert('xss')</script>" );
}
public void testAddLegacyArtifactImmunityToEncodedURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/admin/addLegacyArtifactPath!commit.action?legacyArtifactPath.path=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&groupId=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&artifactId=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&version=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&classifier=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E&type=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E" );
assertAddLegacyArtifactPathPage();
assertTextPresent(
"Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertElementValue( "//input[@id='addLegacyArtifactPath_legacyArtifactPath_path']",
"\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_artifactId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_version']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_groupId']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_classifier']", "\"/>1<script>alert('xss')</script>" );
assertElementValue( "//input[@id='addLegacyArtifactPath_type']", "\"/>1<script>alert('xss')</script>" );
}
public void testDeleteNetworkProxyImmunityToURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/admin/deleteNetworkProxy!confirm.action?proxyid=\"/>1<script>alert('xss')</script>" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
public void testDeleteNetworkProxyImmunityToEncodedURLCrossSiteScripting()
{
getSelenium().open(
"/archiva/admin/deleteNetworkProxy!confirm.action?proxyid=%22%2F%3E1%3Cscript%3Ealert('xss')%3C%2Fscript%3E" );
assertTextPresent( "Security Alert - Invalid Token Found" );
assertTextPresent( "Possible CSRF attack detected! Invalid token found in the request." );
}
@Test
public void testAddManagedRepositoryImmunityToInputFieldCrossSiteScripting()
{
// TODO: these are evaluated client side now - we should force it to do server-side to make sure (though this could probably be tested in the webapp tests instead)
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "test\"><script>alert('xss')</script>", "test\"><script>alert('xss')</script>",
"test\"><script>alert('xss')</script>", "test\"><script>alert('xss')</script>",
"Maven 2.x Repository", "", "-1", "101", false );
// xss inputs are blocked by validation.
assertTextPresent(
"Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent(
"Repository Name must only contain alphanumeric characters, white-spaces(' '), forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Index directory must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "Repository Purge By Retention Count needs to be between 1 and 100." );
assertTextPresent( "Repository Purge By Days Older Than needs to be larger than 0." );
assertTextPresent( "Cron expression is required." );
}
@Test
public void testAddManagedRepositoryImmunityToInputFieldCrossSiteScriptingCron()
{
// separate test because cron is evaluated server side, not client side
getSelenium().open( "/archiva/admin/addRepository.action" );
addManagedRepository( "id", "name", "/home", "/.index", "Maven 2.x Repository",
"<test\"><script>alert('xss')</script>", "1", "1", true );
assertTextPresent( "Invalid cron expression." );
}
public void testEditAppearanceImmunityToInputFieldCrossSiteScripting()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "test<script>alert('xss')</script>", "test<script>alert('xss')</script>",
"test<script>alert('xss')</script>", false );
// xss inputs are blocked by validation.
assertTextPresent(
"Organisation name must only contain alphanumeric characters, white-spaces(' '), equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "You must enter a URL." );
assertTextPresent( "You must enter a URL for your logo." );
}
public void testEditAppearanceImmunityToCrossSiteScriptingRendering()
{
goToAppearancePage();
clickLinkWithText( "Edit" );
addEditAppearance( "xss", "http://\">test<script>alert(\"xss\")</script>",
"http://\">test<script>alert(\"xss\")</script>", false );
// escaped html/url prevents cross-site scripting exploits
// assertXpathCount( "//td[text()=\"xss\"]", 1 );
// assertXpathCount( "//code[text()='http://\">test<script>alert(\"xss\")</script>']", 2 );
// Javascript catches this instead now
assertTextPresent( "You must enter a URL." );
assertTextPresent( "You must enter a URL for your logo." );
}
public void testAddLegacyArtifactPathImmunityToInputFieldCrossSiteScripting()
{
goToLegacySupportPage();
clickLinkWithText( "Add" );
addLegacyArtifactPath( "test<script>alert('xss')</script>", "test<script>alert('xss')</script>",
"test<script>alert('xss')</script>", "test<script>alert('xss')</script>",
"test<script>alert('xss')</script>", "test<script>alert('xss')</script>", false );
// xss inputs are blocked by validation.
assertTextPresent(
"Legacy path must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Group id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Artifact id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Version must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Classifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent( "Type must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
}
public void testAddNetworkProxyImmunityToInputFieldCrossSiteScripting()
{
goToNetworkProxiesPage();
addNetworkProxy( "test<script>alert('xss')</script>", "test<script>alert('xss')</script>",
"test<script>alert('xss')</script>", "test<script>alert('xss')</script>",
"test<script>alert('xss')</script>", "" );
// xss inputs are blocked by validation.
assertTextPresent(
"Proxy id must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)." );
assertTextPresent(
"Protocol must only contain alphanumeric characters, forward-slashes(/), back-slashes(\\), dots(.), colons(:), and dashes(-)." );
assertTextPresent(
"Host must only contain alphanumeric characters, equals(=), question-marks(?), exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-)." );
assertTextPresent( "Invalid field value for field \"proxy.port\"." );
assertTextPresent(
"Username must only contain alphanumeric characters, at's(@), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), and dashes(-)." );
}
}

View File

@ -1,109 +0,0 @@
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

@ -1,746 +0,0 @@
package org.apache.archiva.web.test.parent;
import org.apache.archiva.web.test.XPathExpressionUtil;
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( "adminCreateForm" );
//assertPage( "Apache Archiva \\ Create Admin User" );
//assertTextPresent( "Username" );
assertFieldValue( "admin", "user.username" );
//assertTextPresent( "Full Name*" );
assertElementPresent( "user.fullName" );
//assertTextPresent( "Email Address*" );
assertElementPresent( "user.email" );
//assertTextPresent( "Password*" );
assertElementPresent( "user.password" );
//assertTextPresent( "Confirm Password*" );
assertElementPresent( "user.confirmPassword" );
//assertButtonWithValuePresent( "Create Admin" );
}
public void submitAdminData( String fullname, String email, String password )
{
setFieldValue( "user.fullName", fullname );
setFieldValue( "user.email", email );
setFieldValue( "user.password", password );
setFieldValue( "user.confirmPassword", password );
submit();
}
// Go to Login Page
public void goToLoginPage()
{
getSelenium().open( baseUrl );
// are we already logged in ?
if ( isElementPresent( "logoutLink" ) )
{
// so logout
clickLinkWithLocator( "logoutLink" );
clickLinkWithLocator( "loginLink" );
}
else if ( isElementPresent( "loginLink" ) )
{
clickLinkWithLocator( "loginLink" );
}
assertLoginPage();
}
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
{
assertLoginPage();
}
}
public void assertLoginPage()
{
//assertPage( "Apache Archiva \\ Login Page" );
//assertTextPresent( "Login" );
assertElementPresent( "loginForm" );
//assertTextPresent( "Register" );
assertElementPresent( "registerLink" );
//assertTextPresent( "Username" );
assertElementPresent( "username" );
//assertTextPresent( "Password" );
assertElementPresent( "password" );
//assertTextPresent( "Remember Me" );
assertElementPresent( "rememberMe" );
//assertButtonWithValuePresent( "Login" );
assertButtonWithIdPresent( "loginSubmit" );
//assertButtonWithValuePresent( "Cancel" );
assertButtonWithIdPresent( "loginCancel" );
//assertTextPresent( "Need an Account? Register!" );
//assertTextPresent( "Forgot your Password? Request a password reset." );
assertElementPresent( "registerLinkLoginPage" );
assertElementPresent( "forgottenPasswordLink" );
}
// 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 ( 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 )
{
assertLoginPage();
setFieldValue( "username", username );
setFieldValue( "password", password );
if ( rememberMe )
{
checkField( "rememberMe" );
}
//clickButtonWithValue( "Login" );
clickButtonWithLocator( "loginSubmit" );
if ( validUsernamePassword )
{
assertUserLoggedIn( username );
}
else
{
if ( "Login Page".equals( assertReturnPage ) )
{
assertLoginPage();
}
else
{
assertPage( assertReturnPage );
}
}
}
protected void assertUserLoggedIn( String username )
{
//assertTextPresent( "Current User:" );
assertTextPresent( username );
//assertLinkPresent( "Edit Details" );
assertElementPresent( "editUserLink" );
assertElementPresent( "logoutLink" );
//assertLinkPresent( "Logout" );
//assertTextNotPresent( "Login" );
assertElementNotPresent( "loginLink" );
}
// 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

@ -1,82 +0,0 @@
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

@ -1,80 +0,0 @@
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

@ -1,40 +0,0 @@
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

@ -1,74 +0,0 @@
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

@ -1,358 +0,0 @@
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

@ -1,117 +0,0 @@
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

@ -1,481 +0,0 @@
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>
*
*/
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 void waitPage()
{
// TODO define a smaller maxWaitTimeJsInMs for wait javascript response for browser side validation
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( 1000 );
}
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

@ -1,30 +0,0 @@
<?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

@ -1,32 +0,0 @@
<!--
~ 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}/server/webapps/host-manager"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

Some files were not shown because too many files have changed in this diff Show More