<!--
    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.
-->
<document>
    <properties>
        <title>Running the Tests</title>
        <author email="rgoers@apache.org">Ralph Goers</author>
    </properties>

    <body>
        <section name="Running the tests">
            <p>
                This page details how to setup the tests for the various providers and then
                run them with Maven 2.
            </p>
            <p>
                The tests were run on Mac OS/X 10.5. The tests requiring a remote repository
                were pointed to a second machine running Kubuntu 7.10 and the various servers
                that can be installed from the system administration tool. The only exception
                to this is that the WebDAV and Http support was testing using Day CRX 1.4 as
                the server.
            </p>

            <subsection name="Getting Started">
                <p>
                    First, from the root directory of the project, run <code>mvn install</code>.
                    This will compile all the source and test source and then run all the tests
                    for providers that use the local file system.
                </p>
            </subsection>

            <subsection name="Setting up the remote server">
                <p>
                    Each remote service needs to have the test data placed within it's "repository".
                    After running the maven build, the test data can be found in
                    core/target/test-data. Each service may require a userid and password to be
                    created. For example, to run the ftp test on a Linux system a user should be
                    created and the test data placed within that user's home directory. See the
                    following sections for details on each service.
                </p>
                <p>
                    Each repository should contain the following list of files for the tests to
                    complete successfully.
                </p>
                <source><![CDATA[
write-tests
read-tests
read-tests/file1.txt
read-tests/dir1
read-tests/dir1/file1.txt
read-tests/dir1/file2.txt
read-tests/dir1/file3.txt
read-tests/dir1/subdir1
read-tests/dir1/subdir1/file1.txt
read-tests/dir1/subdir1/file2.txt
read-tests/dir1/subdir1/file3.txt
read-tests/dir1/subdir2
read-tests/dir1/subdir2/file1.txt
read-tests/dir1/subdir2/file2.txt
read-tests/dir1/subdir2/file3.txt
read-tests/dir1/subdir3
read-tests/dir1/subdir3/file1.txt
read-tests/dir1/subdir3/file2.txt
read-tests/dir1/subdir3/file3.txt
read-tests/empty.txt
read-tests/file%.txt
code
code/sealed
code/sealed/AnotherClass.class
code/ClassToLoad.class]]></source>
            </subsection>

            <subsection name="Apache 2 Webserver">
                <p>
                    Create a user on the system
                </p>
                <ol>
                    <li>Create a user 'vfsusr' with password 'vfs/%\te:st' and home directory '/home/vfsusr'
                        <br/>
                        <source><![CDATA[
useradd -p vfsusr -m vfsusr]]></source>
                    </li>
                    <li>In vfsuser's home directory create the directories
                        <ol>
                            <li>vfstest</li>
                            <li>vfstest/write-tests</li>
                        </ol>
                    </li>
                    <li>Copy the test data into the vfstest directory</li>
                    <li>Create a symbolic link at '/vfstest' to /home/vfsuser/vfstest<br />
                        <source><![CDATA[
ln -s /vfstest /home/vfsusr/vfstest]]></source>
                    </li>
                    <li>Create a file named '/etc/apache2/conf.d/vfstest.conf' with this content<br />
                        <source><![CDATA[
#
# VFSTEST
#
Alias /vfstest /vfstest/

DAVLockDB /var/lib/apache2/dav.lockDB
DAVMinTimeout 600

<Directory /vfstest>
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<Location />
        DAV On
        Options Indexes MultiViews
        AllowOverride None

        AuthType Basic
        AuthName vfstest_zone
        AuthUserFile /etc/apache2/passwd
        <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
                Require user vfsusr
        </Limit>
</Location>]]></source>
                    </li>
                    <li>change the permission on
                        <source><![CDATA[
chown vfsusr.users /var/lib/apache2
                        ]]></source>
                    </li>
                    <li>Activate the WebDAV module by adding 'dav' and 'dav_fs' to the list of modules in '/etc/sysconfig/apache2'. e.g <br/>
                        <source><![CDATA[
APACHE_MODULES="access actions alias auth auth_dbm autoindex cgi dir env expires include log_config
mime negotiation setenvif ssl suexec userdir php4 php5 dav dav_fs"]]></source>
                    </li>
                    <li>Setup the webserver to use user-id 'vfsusr' and group 'users'. This can be done by changing the file '/etc/apache2/uid.conf'<br />
                        <source><![CDATA[
User vfsusr
Group users]]></source>
                    </li>
                    <li>Create the VFS user to access the Webdav resource<br />
                        <source><![CDATA[
htpasswd2 -cmb /etc/apache2/passwd  vfsusr 'vfstest']]></source>
                    </li>
                    <li>Add the following to profiles section of settings.xml in the Maven home
                        directory. Modify the urls to match your setup.
                        <source><![CDATA[
   <profile>
      <id>http</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <test.http.uri>http://vfsusr:vfstest@192.168.10.133:80/vfstest/test-data</test.http.uri>
      </properties>
    </profile>
    <profile>
      <id>webdav</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <test.webdav.uri>webdav://vfsusr:vfstest@192.168.10.133:80/vfstest/test-data</test.webdav.uri>
      </properties>
    </profile>]]></source>
                    </li>
                </ol>
            </subsection>

            <subsection name="Day CRX or Apache Jackrabbit">
                <ol>
                    <li>Use Windows Explorer, Mac Finder or a similar tool to connect to the
                        repository.</li>
                    <li>Create a vfstest directory</li>
                    <li>Drag the test-data from Explorer/Finder window to the repository window to
                        copy the files to the vfstest directory in the repository</li>
                    <li>Add the following to profiles section of settings.xml in the Maven home
                        directory. Modify the urls to match your setup.
                        <source><![CDATA[
   <profile>
      <id>http</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <test.http.uri>http://admin:admin@192.168.10.133:7402/vfstest/test-data</test.http.uri>
      </properties>
    </profile>
    <profile>
      <id>webdav</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <test.webdav.uri>webdav://admin:admin@192.168.10.133:7402/vfstest/test-data</test.webdav.uri>
      </properties>
    </profile>]]></source>
                    </li>
                </ol>
            </subsection>

            <subsection name="Samba 3">
                <ol>
                    <li>Create a share 'vfsusr'<br />
                        <source><![CDATA[
[vfsusr]
   comment = VFS Test Directory
   path = /home/vfsusr
   guest ok = yes
   writable = yes]]></source>
                    </li>
                    <li>Setup a 'vfsusr' with password 'vfstest'<br />
                        <source><![CDATA[
smbpasswd -a vfsusr]]></source>
                    </li>
                </ol>
            </subsection>

            <subsection name="ssh">
                <ol>
                    <li>In '/etc/ssh/sshd_config' ensure<br />
                        <source><![CDATA[
PasswordAuthentication yes]]></source>
                    </li>
                </ol>
            </subsection>

            <subsection name="vsftp">
                <ol>
                    <li>Create a user 'vfsusr' with password 'vfstest' and home directory '/home/vfsusr'
                        <br/>
                        <source><![CDATA[
useradd -p vfsusr -m vfsusr]]></source>
                    </li>
                    <li>In vfsuser's home directory create the directories
                        <ol>
                            <li>vfstest</li>
                            <li>vfstest/write-tests</li>
                        </ol>
                    </li>
                    <li>Copy the test data into the vfstest directory</li>
                    <li>Ensure the server is not disabled in the xinetd configuration<br />
                        Set <source>disable=no</source> in '/etc/xinetd.d/vsftpd'
                    </li>

                    <li>Setup the server config: '/etc/vsftpd.conf'<br/>
                        <source><![CDATA[
write_enable=YES
local_enable=YES]]></source>

                    <li>Add the following to profiles section of settings.xml in the Maven home
                        directory. Modify the urls to match your setup.
                        <source><![CDATA[
    <profile>
      <id>ftp</id>
      <activation>
        <activeByDefault>false</activeByDefault>
      </activation>
      <properties>
        <test.ftp.uri>ftp://admin:admin@192.168.10.133/vfstest/test-data</test.ftp.uri>
      </properties>
    </profile>]]></source>
                    </li>        </li>

                </ol>
            </subsection>

            <subsection name="Running tests">
                <p>
                    Running tests simply requires that the appropriate profile be activated. For
                    example, to run just the webdav test do
                    <code>mvn -P webdav test -Dtest=WebdavProviderTestCase</code>. Multipe tests
                    can be run by doing <code>mvn -P webdav -P http test</code>.
                </p>
            </subsection>
        </section>
    </body>
</document>