# 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)