Running the regression tests
----------------------------

The Makefile used for building can also be used to run a series of
regression tests that check for proper operation of individual
components of SpamAssassin. The tests should be run after building
SpamAssassin and before installing it. For example, a typical install
that includes the testing step would look like

 perl Makefile.PL
 make
 make test
 su
 make install

See the INSTALL file for details on the build and installation
process.

Regression Test Options
-----------------------

The test case scripts are located in directory t/ under the root
build directory, in files named t/*.t .

When the tests are run, those that are not applicable in your OS or
with the build options that you selected will be skipped.

Running a subset of the tests
------------------------------

To run some of the tests, specify TEST_FILES as in the following
example:

 make test TEST_FILES="t/spamc.t t/spamc_l.t"

Wildcards can be used in shell file globbing syntax, as in

 make test TEST_FILES="t/spam*.t"

The wildcard syntax does not work with standard Windows command
shells.

You can also run individual test scripts directly, from the "t" directory,
like so:

 cd t
 ./spamc.t

Getting more output from the tests
----------------------------------

The test suite can be run in a verbose mode using the TEST_VERBOSE=1
switch:

 make test TEST_VERBOSE=1

Options set using 'config'
--------------------------

The test suite accepts some configuration information to identify optional
features that should be tested, or to provide environment-specific settings
needed to test some features (such as an LDAP server or SQL server to use
testing those subsystems).   See 'config.dist' for details.

Options set using environment variables
---------------------------------------

The following environment variables affect operation of the
tests. Under most circumstances they should not be set, allowing the
tests to use default values. A full description of what all of them
do is beyond the scope of this README. If you need the degree of
customisation that they offer, you should be able to read the code in
SATest.pm to see how they are used.

See the following sections for customisations that may be required in common
configurations.  All the variables are listed here to document which may
conflict with the regression tests if they happen to be set to arbitrary
values.

SPAMD_HOST
SPAMD_PORT
SPAMD_LOCALHOST
SPAMASSASSIN_SCRIPT
SPAMC_SCRIPT
SALEARN_SCRIPT
SA_ARGS
SC_ARGS
SD_ARGS
SPAMD_FORKER
TEST_DIR
TEST_PERL_TAINT
TEST_PERL_WARN

Testing on Windows or with spamd running on another system
----------------------------------------------------------

Spamd does not run under Windows, except under Cygwin. To run the
spamc tests under Windows or any other system on which you cannot run
spamd during the tests, set the environment variable SPAMD_HOST to the
host name or ip address of the spamd daemon.

If SPAMD_HOST is not set, the regressions tests that use spamd will
start up a spamd daemon using the code in the build tree, and will
shut it down after each test script.

If SPAMD_HOST is set, you must ensure that the spamd daemon is
running before you run make test, and stop it afterwards. The spamd
daemon must run with options that include

  spamd -L -x -p 48373

The last parameter is the port on which spamd will be listening. If
you specify a different port number set the environment variable
SPAMD_PORT in the environment of the make test to be the same number.

For example, if you build SpamAssassin on a Windows system without
setting SPAMD_HOST, you would use commands

 nmake
 nmake test

which would skip all regressions tests of spamc.

If you had already build and installed SpamAssassin under Cygwin on
the same computer, then you could open a Cygwin shell, use the command

 spamd -L -x -p 48373

and then in a Windows CMD.EXE shell you could

 nmake
 set SPAMD_HOST=localhost
 nmake test

to run the spamc tests.

Testing in a FreeBSD jail
-------------------------

see https://issues.apache.org/SpamAssassin/show_bug.cgi?id=5761 for details;
basically, set SPAMD_LOCALHOST to indicate the IP address to use to contact
processes running on the same host, instead of 127.0.0.1.

 ------------------------------
