100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
import os, re, logging
 | 
						|
from autotest_lib.client.bin import test, utils, os_dep
 | 
						|
from autotest_lib.client.common_lib import error
 | 
						|
 | 
						|
 | 
						|
class qemu_iotests(test.test):
 | 
						|
    """
 | 
						|
    This autotest module runs the qemu_iotests testsuite.
 | 
						|
 | 
						|
    @copyright: Red Hat 2009
 | 
						|
    @author: Yolkfull Chow (yzhou@redhat.com)
 | 
						|
    @see: http://www.kernel.org/pub/scm/linux/kernel/git/hch/qemu-iotests.git
 | 
						|
    """
 | 
						|
    version = 2
 | 
						|
    def initialize(self, qemu_path=''):
 | 
						|
        if qemu_path:
 | 
						|
            # Prepending the path at the beginning of $PATH will make the
 | 
						|
            # version found on qemu_path be preferred over other ones.
 | 
						|
            os.environ['PATH'] =  qemu_path + ":" + os.environ['PATH']
 | 
						|
        try:
 | 
						|
            self.qemu_img_path = os_dep.command('qemu-img')
 | 
						|
            self.qemu_io_path = os_dep.command('qemu-io')
 | 
						|
        except ValueError, e:
 | 
						|
            raise error.TestNAError('Commands qemu-img or qemu-io missing')
 | 
						|
        self.job.require_gcc()
 | 
						|
 | 
						|
 | 
						|
    def setup(self, tarball='qemu-iotests.tar.bz2'):
 | 
						|
        """
 | 
						|
        Uncompresses the tarball and cleans any leftover output files.
 | 
						|
 | 
						|
        @param tarball: Relative path to the testsuite tarball.
 | 
						|
        """
 | 
						|
        tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
 | 
						|
        utils.extract_tarball_to_dir(tarball, self.srcdir)
 | 
						|
        os.chdir(self.srcdir)
 | 
						|
        utils.make('clean')
 | 
						|
 | 
						|
 | 
						|
    def run_once(self, options='', testlist=''):
 | 
						|
        """
 | 
						|
        Passes the appropriate parameters to the testsuite.
 | 
						|
 | 
						|
        # Usage: $0 [options] [testlist]
 | 
						|
        # check options
 | 
						|
        #     -raw                test raw (default)
 | 
						|
        #     -cow                test cow
 | 
						|
        #     -qcow               test qcow
 | 
						|
        #     -qcow2              test qcow2
 | 
						|
        #     -vpc                test vpc
 | 
						|
        #     -vmdk               test vmdk
 | 
						|
        #     -xdiff              graphical mode diff
 | 
						|
        #     -nocache            use O_DIRECT on backing file
 | 
						|
        #     -misalign           misalign memory allocations
 | 
						|
        #     -n                  show me, do not run tests
 | 
						|
        #     -T                  output timestamps
 | 
						|
        #     -r                  randomize test order
 | 
						|
        #
 | 
						|
        # testlist options
 | 
						|
        #     -g group[,group...] include tests from these groups
 | 
						|
        #     -x group[,group...] exclude tests from these groups
 | 
						|
        #     NNN                 include test NNN
 | 
						|
        #     NNN-NNN             include test range (eg. 012-021)
 | 
						|
 | 
						|
        @param qemu_path: Optional qemu install path.
 | 
						|
        @param options: Options accepted by the testsuite.
 | 
						|
        @param testlist: List of tests that will be executed (by default, all
 | 
						|
                testcases will be executed).
 | 
						|
        """
 | 
						|
        os.chdir(self.srcdir)
 | 
						|
        test_dir = os.path.join(self.srcdir, "scratch")
 | 
						|
        if not os.path.exists(test_dir):
 | 
						|
            os.mkdir(test_dir)
 | 
						|
        cmd = "./check"
 | 
						|
        if options:
 | 
						|
            cmd += " " + options
 | 
						|
        if testlist:
 | 
						|
            cmd += " " + testlist
 | 
						|
 | 
						|
        try:
 | 
						|
            try:
 | 
						|
                result = utils.system(cmd)
 | 
						|
            except error.CmdError, e:
 | 
						|
                failed_cases = re.findall("Failures: (\d+)", str(e))
 | 
						|
                for num in failed_cases:
 | 
						|
                    failed_name = num + ".out.bad"
 | 
						|
                    src = os.path.join(self.srcdir, failed_name)
 | 
						|
                    dest = os.path.join(self.resultsdir, failed_name)
 | 
						|
                    utils.get_file(src, dest)
 | 
						|
                if failed_cases:
 | 
						|
                    e_msg = ("Qemu-iotests failed. Failed cases: %s" %
 | 
						|
                             failed_cases)
 | 
						|
                else:
 | 
						|
                    e_msg = "Qemu-iotests failed"
 | 
						|
                raise error.TestFail(e_msg)
 | 
						|
        finally:
 | 
						|
            src = os.path.join(self.srcdir, "check.log")
 | 
						|
            dest = os.path.join(self.resultsdir, "check.log")
 | 
						|
            utils.get_file(src, dest)
 |