btrfs-progs: tests: update README.md

Irregular proofreading with adjustments and enhancements.

Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2018-02-08 17:40:34 +01:00
parent cebf3b3722
commit dd11901dae
1 changed files with 33 additions and 24 deletions

View File

@ -45,46 +45,51 @@ $ make TEST=001\* test-fsck
$ TEST=001\* ./fsck-tests.sh $ TEST=001\* ./fsck-tests.sh
``` ```
will run the first test in fsck-tests subdirectory. will run the first test in fsck-tests subdirectory. If the test directories
follow a good naming scheme, it's possible to select a subset eg. like the
convert tests for ext[234] filesystems.
## Test structure ## Test structure
*tests/fsck-tests/:* *tests/fsck-tests/*
* tests targeted at bugs that are fixable by fsck * tests targeted at bugs that are fixable by fsck, the test directory can
contain images that will get fixed, or a custom script `./test.sh` that
will be run if present
*tests/convert-tests/:* *tests/convert-tests/*
* coverage tests of ext2/3/4 and btrfs-convert options * coverage tests of ext2/3/4 or reiserfs and btrfs-convert options
*tests/fuzz-tests/:* *tests/fuzz-tests/*
* collection of fuzzed or crafted images * collection of fuzzed or crafted images
* tests that are supposed to run various utilities on the images and not * tests that are supposed to run various utilities on the images and not
crash crash
*tests/cli-tests/:* *tests/cli-tests/*
* tests for command line interface, option coverage, weird option combinations that should not work * tests for command line interface, option coverage, weird option combinations that should not work
* not necessary to do any functional testing, could be rather lightweight * not necessary to do any functional testing, could be rather lightweight
* functional tests should go to to other test dirs * functional tests should go to to other test dirs
* the driver script will only execute `./test.sh` in the test directory * the driver script will only execute `./test.sh` in the test directory
*tests/misc-tests/:* *tests/misc-tests/*
* anything that does not fit to the above, the test driver script will only * anything that does not fit to the above, the test driver script will only
execute `./test.sh` in the test directory execute `./test.sh` in the test directory
*tests/common, tests/common.convert:* *tests/common, tests/common.convert*
* script with shell helpers, separated by functionality * scripts with shell helpers, separated by functionality
*tests/test.img:* *tests/test.img*
* default testing image, the file is never deleted by the scripts but * default testing image, available as `TEST_DEV` variable, the file is never
truncated to 0 bytes, so it keeps it's permissions. It's eg. possible to deleted by the scripts but truncated to 0 bytes, so it keeps it's
host it on NFS, make it `chmod a+w` for root. permissions. It's eg. possible to host it on NFS, make it `chmod a+w` for
root.
## Other tuning, environment variables ## Other tuning, environment variables
@ -125,10 +130,10 @@ Multiple values can be separated by `,`.
### Permissions ### Permissions
Some commands require root privileges (to mount/umount, access loop devices). Some commands require root privileges (to mount/umount, access loop devices or
It is assumed that `sudo` will work in some way (no password, password asked call privileged ioctls). It is assumed that `sudo` will work in some way (no
and cached). Note that instrumentation is not applied in this case, for safety password, password asked and cached). Note that instrumentation is not applied
reasons. You need to modify the test script instead. in this case, for safety reasons. You need to modify the test script instead.
### Cleanup ### Cleanup
@ -143,13 +148,14 @@ the loop devices as they are managed on a per-test basis.
### Prototyping tests, quick tests ### Prototyping tests, quick tests
There's a script `test-console.sh` that will run shell commands in a loop and There's a script `test-console.sh` that will run shell commands in a loop and
logs the output with the testing environment set up. logs the output with the testing environment set up. It sources the common
helper scripts so the shell functions are available.
### Runtime dependencies ### Runtime dependencies
The tests use some common system utilities like `find`, `rm`, `dd`. Additionally, The tests use some common system utilities like `find`, `rm`, `dd`. Additionally,
specific tests need the following packages installed: `acl`, `attr`, specific tests need the following packages installed: `acl`, `attr`,
`e2fsprogs`, `reiserfsprogs` `e2fsprogs`, `reiserfsprogs`.
## New test ## New test
@ -158,7 +164,7 @@ specific tests need the following packages installed: `acl`, `attr`,
an easy start copy an existing `test.sh` script from some test that might be an easy start copy an existing `test.sh` script from some test that might be
close to the purpose of your new test. The environment setup includes the close to the purpose of your new test. The environment setup includes the
common scripts and/or prepares the test devices. Other scripts contain examples common scripts and/or prepares the test devices. Other scripts contain examples
how to do mkfs, mount, unmount, check, etc. how to do mkfs, mount, unmount, check, loop device management etc.
2. Use the highest unused number in the sequence, write a short descriptive title 2. Use the highest unused number in the sequence, write a short descriptive title
and join by dashes `-`. This will become the directory name, eg. `012-subvolume-sync-must-wait`. and join by dashes `-`. This will become the directory name, eg. `012-subvolume-sync-must-wait`.
@ -180,10 +186,12 @@ $ TEST=012\* ./misc-tests.sh # from tests/
fixed the bug (or both). Subject line of the shall mention the name of the fixed the bug (or both). Subject line of the shall mention the name of the
new directory for ease of search, eg. `btrfs-progs: tests: add 012-subvolume-sync-must-wait` new directory for ease of search, eg. `btrfs-progs: tests: add 012-subvolume-sync-must-wait`
7. A commit that fixes a bug should be applied before the test that verifies
the fix. This is to keep the git history bisectable.
### Crafted/fuzzed images ### Crafted/fuzzed images
Images that are create by fuzzing or specially crafted to trigger some error Images that are created by fuzzing or specially crafted to trigger some error
conditions should be added to the directory *fuzz-tests/images*, accompanied by conditions should be added to the directory *fuzz-tests/images*, accompanied by
a textual description of the source (bugzilla, mail), the reporter, brief a textual description of the source (bugzilla, mail), the reporter, brief
description of the problem or the stack trace. description of the problem or the stack trace.
@ -208,8 +216,9 @@ bisectability.
always built when the tests are started through make always built when the tests are started through make
* use functions instead of repeating code * use functions instead of repeating code
* generic helpers could be factored to the `common` script * generic helpers could be factored to the `common` script
* cleanup after successful test * cleanup files an intermediate state (mount, loop devices, device mapper
* use common helpers and variables devices) a after successful test
* use common helpers and variables where possible
## do not ## do not