97 lines
3.9 KiB
Python
97 lines
3.9 KiB
Python
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
import logging
|
|
import os
|
|
from autotest_lib.client.bin import utils, test
|
|
from autotest_lib.client.common_lib import error
|
|
|
|
import parse_ltp_out
|
|
|
|
|
|
class ltp(test.test):
|
|
version = 6
|
|
|
|
def _import_site_config(self):
|
|
site_config_path = os.path.join(os.path.dirname(__file__),
|
|
'site_config.py')
|
|
if os.path.exists(site_config_path):
|
|
# for some reason __import__ with full path does not work within
|
|
# autotest, although it works just fine on the same client machine
|
|
# in the python interactive shell or separate testcases
|
|
execfile(site_config_path)
|
|
self.site_ignore_tests = locals().get('ignore_tests', [])
|
|
else:
|
|
self.site_ignore_tests = []
|
|
|
|
|
|
def initialize(self):
|
|
self._import_site_config()
|
|
self.job.require_gcc()
|
|
|
|
|
|
# http://sourceforge.net/projects/ltp/files/LTP%20Source/ltp-20120104/
|
|
# ltp-full-20120104.bz2
|
|
def setup(self, tarball = 'ltp-full-20120104.bz2'):
|
|
tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
|
|
utils.extract_tarball_to_dir(tarball, self.srcdir)
|
|
os.chdir(self.srcdir)
|
|
ltpbin_dir = os.path.join(self.srcdir, 'bin')
|
|
os.mkdir(ltpbin_dir)
|
|
|
|
utils.system('patch -p1 < ../patches/getdents.patch')
|
|
utils.system('patch -p1 < ../patches/cpuid.patch')
|
|
utils.system('patch -p1 < ../patches/kill-ipc.patch')
|
|
utils.system('patch -p1 < ../patches/genpow.patch')
|
|
utils.system('patch -p1 < ../patches/sysctl.patch')
|
|
utils.make('autotools')
|
|
utils.configure('--prefix=%s' % ltpbin_dir)
|
|
utils.make('-j %d all' % utils.count_cpus())
|
|
utils.system('yes n | make SKIP_IDCHECK=1 install')
|
|
|
|
|
|
# Note: to run specific test(s), runltp supports an option (-f)
|
|
# to specify a custom 'scenario group' which is a comma-separated
|
|
# list of cmdfiles and/or an option (-s) to specify a grep match
|
|
# pattern for individual test names.
|
|
# e.g. -for all tests in math cmdfile:
|
|
# job.run_test('ltp', '-f math')
|
|
# -for just the float_bessel test in the math cmdfile:
|
|
# job.run_test('ltp', '-f math -s float_bessel')
|
|
# -for the math and memory management cmdfiles:
|
|
# job.run_test('ltp', '-f math,mm')
|
|
# Note: the site_excluded file lists individual test tags for tests
|
|
# to exclude (see the comment at the top of site_excluded).
|
|
def run_once(self, args = '', script = 'runltp', ignore_tests=[]):
|
|
|
|
ignore_tests = ignore_tests + self.site_ignore_tests
|
|
|
|
# In case the user wants to run another test script
|
|
if script == 'runltp':
|
|
logfile = os.path.join(self.resultsdir, 'ltp.log')
|
|
outfile = os.path.join(self.resultsdir, 'ltp.out')
|
|
failcmdfile = os.path.join(self.debugdir, 'failcmdfile')
|
|
excludecmdfile = os.path.join(self.bindir, 'site_excluded')
|
|
args2 = '-p -l %s -C %s -d %s -o %s -S %s' % (logfile, failcmdfile,
|
|
self.tmpdir, outfile,
|
|
excludecmdfile)
|
|
args = args + ' ' + args2
|
|
|
|
ltpbin_dir = os.path.join(self.srcdir, 'bin')
|
|
cmd = os.path.join(ltpbin_dir, script) + ' ' + args
|
|
result = utils.run(cmd, ignore_status=True)
|
|
|
|
if script == 'runltp':
|
|
parse_ltp_out.summarize(outfile)
|
|
|
|
# look for any failed test command.
|
|
try:
|
|
f = open(failcmdfile)
|
|
except IOError:
|
|
logging.warning('Expected to find failcmdfile but did not.')
|
|
return
|
|
failed_cmd = f.read().strip()
|
|
f.close()
|
|
if failed_cmd:
|
|
raise error.TestFail(failed_cmd)
|