2004-08-12 07:31:30 +00:00
|
|
|
_______________________
|
|
|
|
|
BUILDING THE FSQA SUITE
|
|
|
|
|
_______________________
|
|
|
|
|
|
|
|
|
|
Building Linux:
|
|
|
|
|
- cd into the xfstests directory and run make.
|
|
|
|
|
|
|
|
|
|
Building IRIX:
|
|
|
|
|
- Note gmake must be used. FSQA will not build with IRIX make.
|
|
|
|
|
- fw_gcc, fw_make, fw_autoconf, fw_libtool and compiler_dev
|
|
|
|
|
and all their prerequisites must be installed.
|
|
|
|
|
- cd into the xfstests directory and run gmake.
|
|
|
|
|
|
2001-01-15 05:01:19 +00:00
|
|
|
______________________
|
2004-08-12 07:31:30 +00:00
|
|
|
USING THE FSQA SUITE
|
2001-01-15 05:01:19 +00:00
|
|
|
______________________
|
|
|
|
|
|
2004-08-12 07:31:30 +00:00
|
|
|
Preparing system for tests (IRIX and Linux):
|
2001-01-15 05:01:19 +00:00
|
|
|
|
|
|
|
|
- compile XFS into your kernel or load XFS modules
|
|
|
|
|
- install user tools including mkfs.xfs, xfs_db & xfs_bmap
|
2004-08-12 07:31:30 +00:00
|
|
|
- If you wish to run the udf components of the suite install
|
|
|
|
|
mkfs_udf and udf_db for IRIX and mkudffs for Linux. Also download and
|
|
|
|
|
build the Philips UDF Verification Software from
|
|
|
|
|
http://www.extra.research.philips.com/udf/, then copy the udf_test
|
|
|
|
|
binary to xfstests/src/.
|
|
|
|
|
|
2001-01-15 05:01:19 +00:00
|
|
|
|
|
|
|
|
- create two partitions to use for testing
|
|
|
|
|
- one TEST partition
|
|
|
|
|
- format as XFS, mount & optionally populate with
|
|
|
|
|
NON-IMPORTANT stuff
|
|
|
|
|
- one SCRATCH partition
|
|
|
|
|
- leave empty and expect this partition to be clobbered
|
|
|
|
|
by some tests.
|
|
|
|
|
|
|
|
|
|
(these must be two DIFFERENT partitions)
|
|
|
|
|
|
|
|
|
|
- setup your environment
|
|
|
|
|
- setenv TEST_DEV "device containing TEST PARTITION"
|
|
|
|
|
- setenv TEST_DIR "mount point of TEST PARTITION"
|
|
|
|
|
- setenv SCRATCH_DEV "device containing SCRATCH PARTITION"
|
|
|
|
|
- setenv SCRATCH_MNT "mount point for SCRATCH PARTITION"
|
|
|
|
|
- setenv TAPE_DEV "tape device for testing xfsdump"
|
|
|
|
|
- setenv RMT_TAPE_DEV "remote tape device for testing xfsdump"
|
|
|
|
|
- setenv RMT_IRIXTAPE_DEV "remote IRIX tape device for testing xfsdump"
|
2003-05-22 04:16:45 +00:00
|
|
|
- optionally:
|
|
|
|
|
- setenv SCRATCH_LOGDEV "device for scratch-fs external log"
|
|
|
|
|
- setenv SCRATCH_RTDEV "device for scratch-fs realtime data"
|
|
|
|
|
- setenv TEST_LOGDEV "device for test-fs external log"
|
|
|
|
|
- setenv TEST_RTDEV "device for test-fs realtime data"
|
|
|
|
|
- if TEST_LOGDEV and/or TEST_RTDEV, these will always be used.
|
|
|
|
|
- if SCRATCH_LOGDEV and/or SCRATCH_RTDEV, the USE_EXTERNAL
|
|
|
|
|
environment variable set to "yes" will enable their use.
|
2001-01-15 05:01:19 +00:00
|
|
|
- or add a case to the switch in common.config assigning
|
|
|
|
|
these variables based on the hostname of your test
|
|
|
|
|
machine
|
2004-08-12 07:31:30 +00:00
|
|
|
- or add these variables to a file called local.config and keep that
|
|
|
|
|
file in your workarea.
|
2001-01-15 05:01:19 +00:00
|
|
|
|
|
|
|
|
- if testing xfsdump, make sure the tape devices have a
|
|
|
|
|
tape which can be overwritten.
|
|
|
|
|
|
|
|
|
|
- make sure $TEST_DEV is a mounted XFS partition
|
|
|
|
|
- make sure that $SCRATCH_DEV contains nothing useful
|
|
|
|
|
|
|
|
|
|
Running tests:
|
|
|
|
|
|
2004-01-14 02:29:30 +00:00
|
|
|
- cd xfstests
|
2004-08-12 07:31:30 +00:00
|
|
|
- By default the tests suite will run xfs tests:
|
|
|
|
|
- ./check 001 002 003 ... or you can explicitly run a filesystem:
|
|
|
|
|
./check -xfs [test(s)]
|
|
|
|
|
- You can run a range of tests: ./check 067-078
|
|
|
|
|
- Groups of tests maybe ran by: ./check -g [group(s)]
|
|
|
|
|
See the 'group' file for details on groups
|
|
|
|
|
- for udf tests: ./check -udf [test(s)]
|
|
|
|
|
Running all the udf tests: ./check -udf -g udf
|
|
|
|
|
- for running nfs tests: ./check -nfs [test(s)]
|
|
|
|
|
|
2001-01-15 05:01:19 +00:00
|
|
|
|
|
|
|
|
The check script tests the return value of each script, and
|
|
|
|
|
compares the output against the expected output. If the output
|
|
|
|
|
is not as expected, a diff will be output and an .out.bad file
|
|
|
|
|
will be produced for the failing test.
|
|
|
|
|
|
|
|
|
|
Unexpected console messages, crashes and hangs may be considered
|
2004-08-12 07:31:30 +00:00
|
|
|
to be failures but are not necessarily detected by the QA system.
|
2001-01-15 05:01:19 +00:00
|
|
|
|
|
|
|
|
__________________________
|
2004-08-12 07:31:30 +00:00
|
|
|
ADDING TO THE FSQA SUITE
|
2001-01-15 05:01:19 +00:00
|
|
|
__________________________
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Creating new tests scripts:
|
|
|
|
|
|
|
|
|
|
Use the "new" script.
|
|
|
|
|
|
|
|
|
|
Test script environment:
|
|
|
|
|
|
|
|
|
|
When developing a new test script keep the following things in
|
|
|
|
|
mind. All of the environment variables and shell procedures are
|
|
|
|
|
available to the script once the "common.rc" file has been
|
|
|
|
|
sourced.
|
|
|
|
|
|
|
|
|
|
1. The tests are run from an arbitrary directory. If you want to
|
|
|
|
|
do operations on an XFS filesystem (good idea, eh?), then do
|
|
|
|
|
one of the following:
|
|
|
|
|
|
|
|
|
|
(a) Create directories and files at will in the directory
|
|
|
|
|
$TEST_DIR ... this is within an XFS filesystem and world
|
|
|
|
|
writeable. You should cleanup when your test is done,
|
|
|
|
|
e.g. use a _cleanup shell procedure in the trap ... see
|
|
|
|
|
001 for an example. If you need to know, the $TEST_DIR
|
2004-08-12 07:31:30 +00:00
|
|
|
directory is within the filesystem on the block device
|
2001-01-15 05:01:19 +00:00
|
|
|
$TEST_DEV.
|
|
|
|
|
|
|
|
|
|
(b) mkfs a new XFS filesystem on $SCRATCH_DEV, and mount this
|
|
|
|
|
on $SCRATCH_MNT. Call the the _require_scratch function
|
|
|
|
|
on startup if you require use of the scratch partition.
|
|
|
|
|
_require_scratch does some checks on $SCRATCH_DEV &
|
|
|
|
|
$SCRATCH_MNT and makes sure they're unmounted. You should
|
|
|
|
|
cleanup when your test is done, and in particular unmount
|
|
|
|
|
$SCRATCH_MNT.
|
|
|
|
|
Tests can make use of $SCRATCH_LOGDEV and $SCRATCH_RTDEV
|
|
|
|
|
for testing external log and realtime volumes - however,
|
|
|
|
|
these tests need to simply "pass" (e.g. cat $seq.out; exit
|
|
|
|
|
- or default to an internal log) in the common case where
|
|
|
|
|
these variables are not set.
|
|
|
|
|
|
|
|
|
|
2. You can safely create temporary files that are not part of the
|
|
|
|
|
filesystem tests (e.g. to catch output, prepare lists of things
|
|
|
|
|
to do, etc.) in files named $tmp.<anything>. The standard test
|
|
|
|
|
script framework created by "new" will initialize $tmp and
|
|
|
|
|
cleanup on exit.
|
|
|
|
|
|
|
|
|
|
3. By default, tests are run as the same uid as the person
|
|
|
|
|
executing the control script "check" that runs the test scripts.
|
|
|
|
|
|
|
|
|
|
If you need to be root, add a call to the shell procedure
|
|
|
|
|
_need_to_be_root ... this will do nothing or exit with an
|
|
|
|
|
error message depending on your current uid.
|
|
|
|
|
|
|
|
|
|
4. Some other useful shell procedures:
|
|
|
|
|
|
|
|
|
|
_get_fqdn - echo the host's fully qualified
|
|
|
|
|
domain name
|
|
|
|
|
|
|
|
|
|
_get_pids_by_name - one argument is a process name, and
|
|
|
|
|
return all of the matching pids on
|
|
|
|
|
standard output
|
|
|
|
|
|
|
|
|
|
_within_tolerance - fancy numerical "close enough is good
|
|
|
|
|
enough" filter for deterministic
|
|
|
|
|
output ... see comments in
|
|
|
|
|
common.filter for an explanation
|
|
|
|
|
|
|
|
|
|
_filter_date - turn ctime(3) format dates into the
|
|
|
|
|
string DATE for deterministic
|
|
|
|
|
output
|
|
|
|
|
|
|
|
|
|
Verified output:
|
|
|
|
|
|
|
|
|
|
Each test script has a numerical name, e.g. 007, and an associated
|
|
|
|
|
verified output, e.g. 007.out.
|
|
|
|
|
|
|
|
|
|
It is important that the verified output is deterministic, and
|
|
|
|
|
part of the job of the test script is to filter the output to
|
|
|
|
|
make this so. Examples of the sort of things that need filtering:
|
|
|
|
|
|
|
|
|
|
- dates
|
|
|
|
|
- pids
|
|
|
|
|
- hostnames
|
|
|
|
|
- filesystem names
|
|
|
|
|
- timezones
|
|
|
|
|
- variable directory contents
|
|
|
|
|
- imprecise numbers, especially sizes and times
|
|
|
|
|
|
|
|
|
|
Use the "remake" script to recreate the verified output for one
|
|
|
|
|
or more tests.
|
|
|
|
|
|
|
|
|
|
Pass/failure:
|
|
|
|
|
|
|
|
|
|
The script "check" may be used to run one or more tests.
|
|
|
|
|
|
|
|
|
|
Test number $seq is deemed to "pass" when:
|
|
|
|
|
(a) no "core" file is created,
|
|
|
|
|
(b) the file $seq.notrun is not created,
|
|
|
|
|
(c) the exit status is 0, and
|
|
|
|
|
(d) the output matches the verified output.
|
|
|
|
|
|
|
|
|
|
In the "not run" case (b), the $seq.notrun file should contain a
|
|
|
|
|
short one-line summary of why the test was not run. The standard
|
|
|
|
|
output is not checked, so this can be used for a more verbose
|
|
|
|
|
explanation and to provide feedback when the QA test is run
|
|
|
|
|
interactively.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To force a non-zero exit status use:
|
|
|
|
|
status=1
|
|
|
|
|
exit
|
|
|
|
|
|
|
|
|
|
Note that:
|
|
|
|
|
exit 1
|
2004-08-12 07:31:30 +00:00
|
|
|
won't have the desired effect because of the way the exit trap
|
2001-01-15 05:01:19 +00:00
|
|
|
works.
|
|
|
|
|
|
|
|
|
|
The recent pass/fail history is maintained in the file "check.log".
|
|
|
|
|
The elapsed time for the most recent pass for each test is kept
|
|
|
|
|
in "check.time".
|