mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
cmd/xfs/stress/001 1.6 Renamed to cmd/xfstests/001
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
______________________
|
||||
USING THE XFS QA SUITE
|
||||
______________________
|
||||
|
||||
Preparing system for tests:
|
||||
|
||||
- compile XFS into your kernel or load XFS modules
|
||||
- install user tools including mkfs.xfs, xfs_db & xfs_bmap
|
||||
|
||||
- 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"
|
||||
- optionally:
|
||||
- setenv SCRATCH_LOGDEV "device for external log"
|
||||
- setenv SCRATCH_RTDEV "device for realtime data"
|
||||
- or add a case to the switch in common.config assigning
|
||||
these variables based on the hostname of your test
|
||||
machine
|
||||
|
||||
- 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:
|
||||
|
||||
- cd cmd/xfs/stress
|
||||
- ./check 001 002 003 ...
|
||||
|
||||
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
|
||||
to be failures but are not necesarily detected by the QA system.
|
||||
|
||||
__________________________
|
||||
ADDING TO THE XFS QA SUITE
|
||||
__________________________
|
||||
|
||||
|
||||
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
|
||||
direcotry is within the filesystem on the block device
|
||||
$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
|
||||
won't have the desired effect becuase of the way the exit trap
|
||||
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".
|
||||
Reference in New Issue
Block a user