TIME="LONG"
AUTHOR = "Cleber Rosa <cleber@redhat.com>"
NAME = 'xfs filesystem test suite'
TEST_CLASS = 'kernel'
TEST_CATEGORY = 'Functional'
TEST_TYPE = 'client'
DOC = """
xfstests in autotest
--------------------

This is a simple wrapper for running xfstests inside autotest. The steps to get
started are really simple:

1) Edit the configuration variables on the control file.

1.1) The variables 'TEST_DEV' and 'TEST_DIR' are mandatory and should be set to
     a block device path and mount point path, respectively, that will be used
     *exclusively* for xfstests. It must have the filesystem of your choice
     previously created.

     DO NOT USE A BLOCK DEVICE WITH IMPORTANT DATA!!!

1.2) Set the range of tests you want to run setting the TEST_RANGE variable.
     Please notice that python's range() function may not work as you expect,
     that is, if you want a range from 0-255, use: range(0, 256)

2) Run the tests (assuming autotest installed in /usr/local/autotest):

   # cd /usr/local/autotest/client/tests/xfstests
   # ../../bin/autotest control

3) Check the HTML report at

   /usr/local/autotest/client/results/default/job_report.html

General notes
-------------

* As autotest includes a setup phase for client tests, this step is encapsulated
in a dummy xfstests number 000.

* XFS utilities, system libraries and header files are checked early, before
trying to build xfstests. Make sure you resolve those dependencies.

* Some tests are not relevant to filesystems other than XFS, so they will return
as TEST_NA.

* Be extra careful when using TEST_DEV with device-mapper based block devices.
For instance, xfstests may not be able to figure out that /dev/<vg>/<lv> is
actually a link to /dev/mapper/vg-lv. Tests will then fail to check that the
device is mounted.

* As a convenience the default config file uses a virtual partition, so people
can try it out the tests without having an actual spare device. However the
virtual partition depends on the following programs to be available:
     * sfdisk
     * losetup
     * kpartx
Make sure you have them or a real spare device to test things.
"""
# Define the partitions you want to use.
#
# Here, by default we use the concept of virtual partition (a partition of 1GB
# of size), to avoid setup by the user. However, you'll most likely use a real
# block device for your tests.
from autotest_lib.client.bin import partition
file_img = os.path.join(job.tmpdir, 'xfstests.img')
vp = partition.virtual_partition(file_img=file_img, file_size=1024*1024)
device = vp.device
# You can use a real block device, such as /dev/sdc1
#device=/dev/sdc1

# By default, we create a directory under autotest
mountpoint = os.path.join(job.tmpdir, 'xfstests')
if not os.path.isdir(mountpoint):
    os.makedirs(mountpoint)

p = job.partition(device=device, mountpoint=mountpoint)

#
# Job configuration, instead of editing xfstests config files, set them
# right here as environment variables
#

# TEST_DEV: "device containing TEST PARTITION"
os.environ['TEST_DEV'] = p.device

# TEST_DIR: "mount point of TEST PARTITION"
os.environ['TEST_DIR'] = p.mountpoint

# SCRATCH_DEV "device containing SCRATCH PARTITION"
# os.environ['SCRATCH_DEV'] = ''

# SCRATCH_MNT "mount point for SCRATCH PARTITION"
# os.environ['SCRATCH_MNT'] = ''

# TAPE_DEV "tape device for testing xfsdump"
# os.environ['TAPE_DEV'] = ''

# RMT_TAPE_DEV "remote tape device for testing xfsdump"
# os.environ['RMT_TAPE_DEV'] = ''

# RMT_IRIXTAPE_DEV "remote IRIX tape device for testing xfsdump"
# os.environ['RMT_IRIXTAPE_DEV'] = ''

# SCRATCH_LOGDEV "device for scratch-fs external log"
# os.environ['SCRATCH_LOGDEV'] = ''

# SCRATCH_RTDEV "device for scratch-fs realtime data"
# os.environ['SCRATCH_RTDEV'] = ''

# TEST_LOGDEV "device for test-fs external log"
# os.environ['TEST_LOGDEV'] = ''

# TEST_RTDEV "device for test-fs realtime data"
# os.environ['TEST_RTDEV'] = ''

# Whether UDF tests are disable
# os.environ['DISABLE_UDF_TEST'] = '1'

#
# Adapt to the list of tests you want to run
#
TEST_RANGE = ['%03i' % t for t in range(0, 256)]
#
# Choose the filesystem types you want the tests to run on
#
FS_TYPES = ['xfs']

#
# Finally, run the tests
#

for fs_type in FS_TYPES:
    p.mkfs(fs_type)
    for test in TEST_RANGE:
        tag = "%s.%s" % (test, fs_type)
        result = job.run_test_detail('xfstests', test_number=test, tag=tag)

# It is good practice to unmount the partition created
p.unmount()
# If you are using the virtual partition, you may destroy it here
vp.destroy()
