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 (note that it uses hardcoded #!/usr/bin/perl):

 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
SPAMD_SCRIPT
SPAMASSASSIN_SCRIPT
SPAMC_SCRIPT
SAAWL_SCRIPT
SACHECKSPAMD_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.

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