On 07/19/2011 12:38 PM, Gregory P. Smith wrote:
>
>
> On Tue, Jul 19, 2011 at 8:10 AM, Cleber Rosa <[email protected]
> <mailto:[email protected]>> wrote:
>
> xfstests was originally developed to test SGI's XFS filesystem.
>
> Signed-off-by: Cleber Rosa <[email protected]
> <mailto:[email protected]>>
> ---
> client/tests/xfstests/README | 33 ++++++++++++++
> client/tests/xfstests/control | 62 +++++++++++++++++++++++++
> client/tests/xfstests/xfstests.py | 89
> +++++++++++++++++++++++++++++++++++++
> 3 files changed, 184 insertions(+), 0 deletions(-)
> create mode 100644 client/tests/xfstests/README
> create mode 100644 client/tests/xfstests/control
> create mode 100644 client/tests/xfstests/xfstests.py
>
> diff --git a/client/tests/xfstests/README
> b/client/tests/xfstests/README
> new file mode 100644
> index 0000000..da49bcf
> --- /dev/null
> +++ b/client/tests/xfstests/README
> @@ -0,0 +1,33 @@
> +xfstests in autotest
> +====================
> +
> +This is 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.
> +
> + 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.
> diff --git a/client/tests/xfstests/control
> b/client/tests/xfstests/control
> new file mode 100644
> index 0000000..4befa5e
> --- /dev/null
> +++ b/client/tests/xfstests/control
> @@ -0,0 +1,62 @@
> +TIME="SHORT"
> +AUTHOR = "Cleber Rosa <[email protected] <mailto:[email protected]>>"
> +DOC = """
> +xfstests is a filesystem QA suite, originally developed to test
> SGI's XFS
> +filesystem.
> +"""
> +NAME = 'control'
>
>
> this is wrong. The NAME in the control file needs to be a unique name
> for this test across all tests in autotest as it gets imported into
> the database on an autotest server and is the name the test is
> referred to in the gui and cli and generate_control_file rpc.
>
> I suggest something like:
>
> NAME = 'xfs filesystem test suite'.
Thanks for catching this.
> +TEST_CLASS = 'kernel'
> +TEST_CATEGORY = 'Functional'
> +TEST_TYPE = 'client'
> +
> +#
> +# 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'] = '/dev/null'
> +
> +# TEST_DIR: "mount point of TEST PARTITION"
> +os.environ['TEST_DIR'] = '/mnt/null'
> +
> +# 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)]
> +
> +#
> +# Finally, run the tests
> +#
> +for test in TEST_RANGE:
> + result = job.run_test_detail('xfstests', test_number=test,
> tag=test)
> diff --git a/client/tests/xfstests/xfstests.py
> b/client/tests/xfstests/xfstests.py
> new file mode 100644
> index 0000000..1dea294
> --- /dev/null
> +++ b/client/tests/xfstests/xfstests.py
> @@ -0,0 +1,89 @@
> +import os, re, glob, logging
> +from autotest_lib.client.common_lib import error
> +from autotest_lib.client.bin import test, utils, os_dep
> +
> +class xfstests(test.test):
> +
> + version = 1
> +
> + PASSED_RE = re.compile(r'Passed all \d+ tests')
> + FAILED_RE = re.compile(r'Failed \d+ of \d+ tests')
> + NA_RE = re.compile(r'Passed all 0 tests')
> + NA_DETAIL_RE = re.compile(r'(\d{3})\s*(\[not run\])\s*(.*)')
> +
> +
> + def _get_available_tests(self):
> + tests = glob.glob('???.out')
> + tests_list = [t[:-4] for t in tests if
> os.path.exists(t[:-4])]
> + tests_list.sort()
> + return tests_list
> +
> +
> + def _run_sub_test(self, test):
> + os.chdir(self.srcdir)
> + output = utils.system_output('./check %s' % test,
> + ignore_status=True,
> + retain_output=True)
> + lines = output.split('\n')
> + result_line = lines[-1]
> +
> + if self.NA_RE.match(result_line):
> + detail_line = lines[-3]
> + match = self.NA_DETAIL_RE.match(detail_line)
> + if match is not None:
> + error_msg = match.groups()[2]
> + else:
> + error_msg = 'Test dependency failed, test not run'
> + raise error.TestNAError(error_msg)
> +
> + elif self.FAILED_RE.match(result_line):
> + raise error.TestError('Test error, check debug logs
> for complete '
> + 'test output')
> +
> + elif self.PASSED_RE.match(result_line):
> + return
> +
> + else:
> + raise error.TestError('Could not assert test success
> or failure, '
> + 'assuming failure. Please check
> debug logs')
> +
> +
> + def setup(self, tarball = 'xfstests.tar.bz2'):
> + #
> + # Anticipate failures due to missing devel tools,
> libraries, headers
> + # and xfs commands
> + #
> + os_dep.command('autoconf')
> + os_dep.command('autoheader')
> + os_dep.command('libtool')
> + os_dep.library('libuuid.so.1')
> + os_dep.header('xfs/xfs.h')
> + os_dep.header('attr/xattr.h')
> + os_dep.header('sys/acl.h')
> + os_dep.command('mkfs.xfs')
> + os_dep.command('xfs_db')
> + os_dep.command('xfs_bmap')
> + os_dep.command('xfsdump')
> +
> + self.job.require_gcc()
> +
> + tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
> + utils.extract_tarball_to_dir(tarball, self.srcdir)
> + os.chdir(self.srcdir)
> + utils.make()
> +
> + logging.debug("Available tests in srcdir: %s" %
> + ", ".join(self._get_available_tests()))
> +
> +
> + def run_once(self, test_number):
> + os.chdir(self.srcdir)
> + if test_number == '000':
> + logging.debug('Dummy test to setup xfstests')
> + return
> +
> + if test_number not in self._get_available_tests():
> + raise error.TestError('test file %s not found' %
> test_number)
> +
> + logging.debug("Running test: %s" % test_number)
> + self._run_sub_test(test_number)
> --
> 1.7.4.4
>
> _______________________________________________
> Autotest mailing list
> [email protected] <mailto:[email protected]>
> http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
>
>
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest