89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
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)
|