mirror of https://github.com/apache/archiva.git
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:
parent
535a635cc6
commit
4051ba2db6
|
@ -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
|
||||
|
||||
|
|
@ -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>
|
|
@ -1,8 +0,0 @@
|
|||
<configuration>
|
||||
<localRepository></localRepository>
|
||||
<webapp>
|
||||
<ui>
|
||||
<appletFindEnabled>false</appletFindEnabled>
|
||||
</ui>
|
||||
</webapp>
|
||||
</configuration>
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
<configuration />
|
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
ea7dea9244b2a0975cfa117dc34fe18e
|
|
@ -1 +0,0 @@
|
|||
1039566ff5361d07eccd1243c45929b96441c7d6
|
|
@ -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>
|
||||
|
|
@ -1 +0,0 @@
|
|||
f80c7c493716de649a99db00cd2ff34c
|
|
@ -1 +0,0 @@
|
|||
4b95c6fa09d1e02efdb69129f53f025e33bc8958
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
dab1b8c2475fe839f387ceaef0d82b30
|
|
@ -1 +0,0 @@
|
|||
4e5b414d5419121ef75131cb52235a9abbf2095a
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
|
@ -1 +0,0 @@
|
|||
0360f14347d5502114ba7afe4ea2e07f
|
|
@ -1 +0,0 @@
|
|||
4a667b9923fb936409b96c8242bebc2f96f374f5
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
cdf69ffbcb888aacea6cfeaf479fefd1
|
|
@ -1 +0,0 @@
|
|||
f6a384b1ab62ed45ae7dee1a059815e94bbc7fa6
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
bc87573a595a2c387b5baa4ad7d06743
|
|
@ -1 +0,0 @@
|
|||
e9ecaaa14a3c09b07206980c15749a631dbc986a
|
|
@ -1 +0,0 @@
|
|||
16a308257949f23afa5d1f1dec41aa44
|
|
@ -1 +0,0 @@
|
|||
36a3a9cc35b8ca0d73998d7b39d290b489800a22
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
be5b8f8539a62b5935793ebeb87215fd
|
|
@ -1 +0,0 @@
|
|||
012a658d4a4f70aa3e8dd4b2db67020817b7dfcc
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
bedfccc27fc7dc262d5c99a7aa8b83d8
|
|
@ -1 +0,0 @@
|
|||
4902ea6b16838ff26f9136460c4394b0ad7cc7f5
|
|
@ -1 +0,0 @@
|
|||
853a10a201f8a296e37e856615c5349c
|
|
@ -1 +0,0 @@
|
|||
5155da8820ed77c43e983c1244d94a3b27bf08f7
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
4df0417579b1492f37da14316adb85af
|
|
@ -1 +0,0 @@
|
|||
c3b007acd9c17b80753b39a4121255965e7e2e65
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
74d58d97e78d5e51cc02c489c5edba0d
|
|
@ -1 +0,0 @@
|
|||
5c7571eb35248be0f65758783b036e8f7899c146
|
|
@ -1 +0,0 @@
|
|||
55f498a518e1151ce2e54daa674691de
|
|
@ -1 +0,0 @@
|
|||
730551bde461564d3f8a7e0178ef9bc54a86d2dd
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
746ba2848229dbc1c9683ece0e7f02c8
|
|
@ -1 +0,0 @@
|
|||
0d068f63069a86d982075a1dca7fe74fd95a29df
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
baa0ad0afaba9cee66ec262b38f796b6
|
|
@ -1 +0,0 @@
|
|||
dea84d579f673d2d87c7bd47e4318cdf8e59e4d0
|
|
@ -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
|
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
306d556e6e5e4d604dc854d09ddcdefd
|
|
@ -1 +0,0 @@
|
|||
afb6586f5eb4c63dd5735a0bed11c99c7fac6755
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
8e896baea663a45d7bd2737f8e464481
|
|
@ -1 +0,0 @@
|
|||
e37897c617d78dedd978766a2db318d301e80105
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
add4f71a005137e9a296c5b192e900c2
|
|
@ -1 +0,0 @@
|
|||
b505e302169e04fc821bf571da7435b1e42ef8d7
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
f3b657fb48d2e82fee5fada169756938
|
|
@ -1 +0,0 @@
|
|||
f4629e609deb95cefdcdddc6dd8c2942d1c3e47f
|
|
@ -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
|
||||
|
||||
|
|
@ -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" );
|
||||
}
|
||||
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
}
|
|
@ -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(-)." );
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
}
|
|
@ -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." );
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
|
@ -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(-)." );
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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." );
|
||||
}
|
||||
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
|
||||
}
|
|
@ -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. }
|
||||
*/
|
||||
|
||||
}
|
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
|
@ -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: /" );
|
||||
}
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
}
|
|
@ -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() ); }
|
||||
*/
|
||||
}
|
|
@ -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." );
|
||||
}
|
||||
|
||||
}
|
|
@ -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 + "'" );
|
||||
}
|
||||
}
|
|
@ -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(-)." );
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
}
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
|
||||
}
|
|
@ -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";
|
||||
}
|
||||
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
}
|
|
@ -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" );
|
||||
}
|
||||
}
|
|
@ -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 );
|
||||
}
|
||||
|
||||
}
|
|
@ -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>
|
|
@ -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
Loading…
Reference in New Issue