Re: [PATCH] [RFC] KVM test: Major control file cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



----- "Lucas Meneghel Rodrigues" <lmr@xxxxxxxxxx> wrote:

> One thing that just occurred to me is, if we have a test config
> "library" as you said, it's perfectly possible to put the actual test
> set definitions and other config files inside the control file as
> strings. This way one can control configuration inside the control
> file,
> making it more convenient for usage, let's say, inside the autotest
> web
> interface. Since the control file would be reduced in size, the
> configuration snippets being in the control file would not be a huge
> problem, while keeping the original autotest philosophy of keeping
> stuff inside the control file... What do you think?

Sounds great, except it won't allow you to debug your configuration
using kvm_config.py.  So the question now is what's more important --
the ability to debug or ease of use when running from the server.

> On Wed, 2009-10-28 at 05:48 -0400, Michael Goldish wrote:
> > I think this patch is a good idea.  Comments:
> > 
> > - If we've decided to put all the configuration in config files
> > (rather than the control file) let's split up the main one into
> > kvm_test_library.cfg and kvm_tests.cfg.sample.  The latter should
> > look like this:
> > 
> > include kvm_test_library.cfg
> > include kvm_cdkeys.cfg
> > 
> > variants:
> >     - fc8_quick:
> >         ...
> >     - other_test_set:
> >         ...
> > 
> > only fc8_quick
> > 
> > ... and the former should contain everything else.
> > 
> > - I think we should allow the user to modify his/her configuration
> > in the control file using parse_string().  This is actually useful,
> > especially when running from the server.  (At least I use it.)
> > 
> > - If kvm_build.cfg or kvm_tests.cfg are missing, we should continue
> > without them, or create them (blank), instead of failing due to an
> > unhandled exception raised by the config parser.  This should be
> > true at least for kvm_build.cfg, which isn't always required for
> the
> > tests to run.
> > 
> > - We should consider removing hardcoded references to
> > /tmp/kvm_autotest_root/.  We use that path locally in TLV but
> that's
> > not a good reason to put it upstream IMO.
> > We should also stop creating symlinks to that path.
> > Instead we can allow more flexibility using config files.
> > For example, we can put this in kvm_tests.cfg.sample, between the
> > 'include' and the 'variants':
> > 
> > # Uncomment and modify the following lines if you wish to modify
> > # the paths of the image files, ISO files, step files or qemu
> binaries.
> > # If you keep these lines commented, all mentioned paths are
> expected
> > # to be found in the KVM test dir (tests/kvm/).  For example, all
> > # image files are expected under tests/kvm/images/.
> > 
> > # qemu_binary ?<= /tmp/kvm_autotest_root/
> > # qemu_img_binary ?<= /tmp/kvm_autotest_root/
> > # image_name.* ?<= /tmp/kvm_autotest_root/
> > # cdrom.* ?<= /tmp/kvm_autotest_root/
> > # steps ?<= /tmp/kvm_autotest_root/
> > 
> > The ?<= operator prepends strings to keys that match a regex, so
> > 'image_name.* ?<= something/' will prepend 'something/' to
> image_name,
> > image_name_vm2 and so on.
> > In kvm_test_library.cfg (currently kvm_tests.cfg.sample) all
> > 'image_name' parameters, for example, begin with 'images/', which
> means
> > all image files should be under tests/kvm/images.
> > If we prepend /tmp/kvm_autotest_root/ to that, all image files will
> be
> > expected under /tmp/kvm_autotest_root/images/.
> > 
> > Maybe we should leave these lines uncommented by default, in case
> anyone
> > uses /tmp/kvm_autotest_root and relies on the control file creating
> the
> > symlinks.
> > 
> > - kvm_utils.run_tests() should return True if all tests passed and
> > otherwise False.  We need this in order to quit if the build
> test(s)
> > failed.
> > 
> > - I suggest we use kvm_utils.parse_host_specific_cfg() instead of
> > kvm_utils.get_test_list().  I think 'parse_host_specific_cfg'
> better
> > describes what the function does.  I also think it should take
> > 'kvm_address_pools.cfg' as a parameter so we don't have to hardcode
> it
> > into the function.
> > 
> > 
> > Please see additional comments below.
> > 
> > 
> > ----- "Lucas Meneghel Rodrigues" <lmr@xxxxxxxxxx> wrote:
> > 
> > > As pointed out before, the KVM reference control files
> > > could use a little clean up. This patch implements severe
> > > cleanup of the main control file by:
> > > 
> > > * Refactoring the code present there, moving it to the
> > > kvm_utils.py library
> > > * Treat the build test exactly the same way as other
> > > tests, moving the config stuff that used to be in the
> > > control file realm out to its own configuration file,
> > > for the sake of consistency.
> > > * Since a frequent complaint amongst users is that by
> > > default the build test will build from release, and
> > > that build might be unsuccessful depending on the system
> > > being used (older kernel versions and other sorts of
> > > stuff), change the default build method to 'noinstall'.
> > > 
> > > This way the control file becomes way shorter, fairly
> > > well organized, and we have a consistent configuration
> > > schema across the board, based on configuration files.
> > > 
> > > If people are OK with this change, final path will
> > > change the control.parallel file as well.
> > > 
> > > Important: For the default control file, I removed
> > > the part of the code that parses new strings for the
> > > test configuration because I believe those
> > > modifications belong to the test config files, they
> > > could be just commented. For cases where keeping
> > > all stuff inside the config file is not possible,
> > > appropriate code will be added (in other example
> > > control files).
> > > 
> > > Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
> > > ---
> > >  client/tests/kvm/control              |  203
> > > +++------------------------------
> > >  client/tests/kvm/kvm_build.cfg.sample |   82 +++++++++++++
> > >  client/tests/kvm/kvm_utils.py         |  112 ++++++++++++++++++
> > >  3 files changed, 211 insertions(+), 186 deletions(-)
> > >  create mode 100644 client/tests/kvm/kvm_build.cfg.sample
> > > 
> > > diff --git a/client/tests/kvm/control b/client/tests/kvm/control
> > > index 431baf9..7acec14 100644
> > > --- a/client/tests/kvm/control
> > > +++ b/client/tests/kvm/control
> > > @@ -20,194 +20,25 @@ KVM (both kernelspace and userspace) code.
> > >  For online docs, please refer to
> > > http://www.linux-kvm.org/page/KVM-Autotest
> > >  """
> > >  
> > > +import sys, os, logging
> > > +# Add the KVM tests dir to the python path
> > > +kvm_test_dir = os.path.join(os.environ['AUTODIR'],'tests/kvm')
> > > +sys.path.append(kvm_test_dir)
> > > +import kvm_utils, kvm_config
> > >  
> > > -import sys, os
> > >  
> > >
> -#-----------------------------------------------------------------------------
> > > -# set English environment (command output might be localized,
> need to
> > > be safe)
> > >
> -#-----------------------------------------------------------------------------
> > > -os.environ['LANG'] = 'en_US.UTF-8'
> > > +## Prepare the environment for the KVM test.
> > > +kvm_utils.prepare_test_run(basedir=kvm_test_dir,
> > > +                           rootdir='/tmp/kvm_autotest_root')
> > >  
> > > -#---------------------------------------------------------
> > > -# Enable modules import from current directory (tests/kvm)
> > > -#---------------------------------------------------------
> > > -pwd = os.path.join(os.environ['AUTODIR'],'tests/kvm')
> > > -sys.path.append(pwd)
> > > +cfg_names = ['kvm_build.cfg', 'kvm_tests.cfg']
> > >  
> > > -# ------------------------
> > > -# create required symlinks
> > > -# ------------------------
> > > -# When dispatching tests from autotest-server the links we need
> do
> > > not exist on
> > > -# the host (the client). The following lines create those
> symlinks.
> > > Change
> > > -# 'rootdir' here and/or mount appropriate directories in it.
> > > -#
> > > -# When dispatching tests on local host (client mode) one can
> either
> > > setup kvm
> > > -# links, or same as server mode use rootdir and set all
> appropriate
> > > links and
> > > -# mount-points there. For example, guest installation tests need
> to
> > > know where
> > > -# to find the iso-files.
> > > -#
> > > -# We create the links only if not already exist, so if one
> already
> > > set up the
> > > -# links for client/local run we do not touch the links.
> > > -rootdir='/tmp/kvm_autotest_root'
> > > -iso=os.path.join(rootdir, 'iso')
> > > -images=os.path.join(rootdir, 'images')
> > > -qemu=os.path.join(rootdir, 'qemu')
> > > -qemu_img=os.path.join(rootdir, 'qemu-img')
> > > +for cfg_name in cfg_names:
> > > +    cfg_path = os.path.join(kvm_test_dir, cfg_name)
> > > +    cfg = kvm_config.config(cfg_path)
> > > +    list = kvm_utils.get_test_list(cfg, cfg_name, kvm_test_dir)
> > > +    logging.info("Running test set defined on config file %s",
> > > cfg_name)
> > > +    kvm_utils.run_tests(list, job)
> > 
> > I think we should unroll this loop and allow users to modify the
> main
> > and/or build configurations here.  For example:
> > 
> > build_cfg_path = os.path.join(kvm_test_dir, "kvm_build.cfg")
> > test_cfg_path = os.path.join(kvm_test_dir, "kvm_tests.cfg")
> > open(build_cfg_path, 'a').close()
> > open(test_cfg_path, 'a').close()
> > 
> > cfg = kvm_config.config(build_cfg_path)
> > cfg.parse_string("""
> > # Make any desired changes to the build configuration here.  For
> example:
> > # release_tag = 84
> > """)
> > if not kvm_utils.run_tests(cfg.get_list(), job.run_test):
> >     sys.exit(1)
> > 
> > cfg = kvm_config.config(test_cfg_path)
> > cfg.parse_string("""
> > # Make any desired changes to the test configuration here.  For
> example:
> > # display = sdl
> > # install|setup: timeout_multiplier = 3
> > """)
> > kvm_utils.parse_host_specific_cfg(cfg, os.path.join(kvm_test_dir,
> >                                                    
> "kvm_address_pools.cfg"))
> > kvm_utils.run_tests(cfg.get_list(), job.run_test)
> > 
> > Alternatively, instead of creating the files in case they don't
> exit,
> > we can put the code that parses and runs tests inside 'if'
> statements.
> > I'm not sure which option is shorter.
> > 
> > >  
> > > -
> > > -def link_if_not_exist(ldir, target, link_name):
> > > -    t = target
> > > -    l = os.path.join(ldir, link_name)
> > > -    if not os.path.exists(l):
> > > -        os.system('ln -s %s %s' % (t, l))
> > > -
> > > -# Create links only if not already exist
> > > -link_if_not_exist(pwd, '../../', 'autotest')
> > > -link_if_not_exist(pwd, iso, 'isos')
> > > -link_if_not_exist(pwd, images, 'images')
> > > -link_if_not_exist(pwd, qemu, 'qemu')
> > > -link_if_not_exist(pwd, qemu_img, 'qemu-img')
> > > -
> > > -# --------------------------------------------------------
> > > -# Params that will be passed to the KVM install/build test
> > > -# --------------------------------------------------------
> > > -params = {
> > > -    "name": "build",
> > > -    "shortname": "build",
> > > -    "type": "build",
> > > -    "mode": "release",
> > > -    #"mode": "snapshot",
> > > -    #"mode": "localtar",
> > > -    #"mode": "localsrc",
> > > -    #"mode": "git",
> > > -    #"mode": "noinstall",
> > > -    #"mode": "koji",
> > > -
> > > -    ## Are we going to load modules built by this test?
> > > -    ## Defaults to 'yes', so if you are going to provide only
> > > userspace code to
> > > -    ## be built by this test, please set load_modules to 'no',
> and
> > > make sure
> > > -    ## the kvm and kvm-[vendor] module is already loaded by the
> time
> > > you start
> > > -    ## it.
> > > -    "load_modules": "no",
> > > -
> > > -    ## Install from a kvm release ("mode": "release"). You can
> > > optionally
> > > -    ## specify a release tag. If you omit it, the test will get
> the
> > > latest
> > > -    ## release tag available.
> > > -    #"release_tag": '84',
> > > -    "release_dir":
> 'http://downloads.sourceforge.net/project/kvm/',
> > > -    # This is the place that contains the sourceforge project
> list of
> > > files
> > > -    "release_listing":
> 'http://sourceforge.net/projects/kvm/files/',
> > > -
> > > -    ## Install from a kvm snapshot location ("mode": "snapshot").
> You
> > > can
> > > -    ## optionally specify a snapshot date. If you omit it, the
> test
> > > will get
> > > -    ## yesterday's snapshot.
> > > -    #"snapshot_date": '20090712'
> > > -    #"snapshot_dir": 'http://foo.org/kvm-snapshots/',
> > > -
> > > -    ## Install from a tarball ("mode": "localtar")
> > > -    #"tarball": "/tmp/kvm-84.tar.gz",
> > > -
> > > -    ## Install from a local source code dir ("mode": "localsrc")
> > > -    #"srcdir": "/path/to/source-dir"
> > > -
> > > -    ## Install from koji build server ("mode": "koji")
> > > -    ## Koji is the Fedora Project buildserver. It is possible to
> > > install
> > > -    ## packages right from Koji if you provide a release tag or
> a
> > > build.
> > > -    ## Tag (if available)
> > > -    #"koji_tag": 'dist-f11',
> > > -    ## Build (if available, is going to override tag).
> > > -    #"koji_build": 'qemu-0.10-16.fc11',
> > > -    ## Command to interact with the build server
> > > -    #"koji_cmd": '/usr/bin/koji',
> > > -    ## The name of the source package that's being built
> > > -    #"src_pkg": 'qemu',
> > > -    ## Name of the rpms we need installed
> > > -    #"pkg_list": ['qemu-kvm', 'qemu-kvm-tools',
> 'qemu-system-x86',
> > > 'qemu-common', 'qemu-img'],
> > > -    ## Paths of the qemu relevant executables that should be
> checked
> > > -    #"qemu_bin_paths": ['/usr/bin/qemu-kvm',
> '/usr/bin/qemu-img'],
> > > -
> > > -    ## Install from git ("mode": "git")
> > > -    ## If you provide only "git_repo" and "user_git_repo", the
> build
> > > test
> > > -    ## will assume it will perform all build from the userspace
> dir,
> > > building
> > > -    ## modules trough make -C kernel LINUX=%s sync. As of today
> > > (07-13-2009)
> > > -    ## we need 3 git repos, "git_repo" (linux sources),
> > > "user_git_repo" and 
> > > -    ## "kmod_repo" to build KVM userspace + kernel modules.
> > > -    #"git_repo":
> > > 'git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git',
> > > -    #"kernel_branch": 'kernel_branch_name',
> > > -    #"kernel_lbranch": 'kernel_lbranch_name',
> > > -    #"kernel_tag": 'kernel_tag_name',
> > > -    #"user_git_repo":
> > > 'git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git',
> > > -    #"user_branch": 'user_branch_name',
> > > -    #"user_lbranch": 'user_lbranch_name',
> > > -    #"user_tag": 'user_tag_name',
> > > -    #"kmod_repo":
> > > 'git://git.kernel.org/pub/scm/virt/kvm/kvm-kmod.git',
> > > -    #"kmod_branch": 'kmod_branch_name',
> > > -    #"kmod_lbranch": 'kmod_lbranch_name',
> > > -    #"kmod_tag": 'kmod_tag_name',
> > > -}
> > > -
> > > -# If you don't want to execute the build stage, just use
> 'noinstall'
> > > as the
> > > -# install type. If you run the tests from autotest-server, make
> sure
> > > that
> > > -# /tmp/kvm-autotest-root/qemu is a link to your existing
> executable.
> > > Note that
> > > -# if kvm_install is chose to run, it overwrites existing qemu
> and
> > > qemu-img
> > > -# links to point to the newly built executables.
> > > -r = True
> > > -r = job.run_test("kvm", params=params,
> tag=params.get("shortname"))
> > > -if not r:
> > > -    print 'kvm_installation failed ... exiting'
> > > -    sys.exit(1)
> > > -
> > > -# ----------------------------------------------------------
> > > -# Get test set (dictionary list) from the configuration file
> > > -# ----------------------------------------------------------
> > > -import kvm_config
> > > -
> > > -filename = os.path.join(pwd, "kvm_tests.cfg")
> > > -cfg = kvm_config.config(filename)
> > > -
> > > -# If desirable, make changes to the test configuration here. 
> For
> > > example:
> > > -# cfg.parse_string("install|setup: timeout_multiplier = 2")
> > > -# cfg.parse_string("only fc8_quick")
> > > -# cfg.parse_string("display = sdl")
> > > -
> > > -filename = os.path.join(pwd, "kvm_address_pools.cfg")
> > > -if os.path.exists(filename):
> > > -    cfg.parse_file(filename)
> > > -    hostname = os.uname()[1].split(".")[0]
> > > -    if cfg.filter("^" + hostname):
> > > -        cfg.parse_string("only ^%s" % hostname)
> > > -    else:
> > > -        cfg.parse_string("only ^default_host")
> > > -
> > > -list = cfg.get_list()
> > > -
> > > -
> > > -# -------------
> > > -# Run the tests
> > > -# -------------
> > > -status_dict = {}
> > > -
> > > -for dict in list:
> > > -    if dict.get("skip") == "yes":
> > > -        continue
> > > -    dependencies_satisfied = True
> > > -    for dep in dict.get("depend"):
> > > -        for test_name in status_dict.keys():
> > > -            if not dep in test_name:
> > > -                continue
> > > -            if not status_dict[test_name]:
> > > -                dependencies_satisfied = False
> > > -                break
> > > -    if dependencies_satisfied:
> > > -        test_iterations = int(dict.get("iterations", 1))
> > > -        current_status = job.run_test("kvm", params=dict,
> > > -                                      tag=dict.get("shortname"),
> > > -                                     
> iterations=test_iterations)
> > > -    else:
> > > -        current_status = False
> > > -    status_dict[dict.get("name")] = current_status
> > > -
> > > -# create the html report in result dir
> > > -reporter = os.path.join(pwd, 'html_report.py')
> > > -html_file = os.path.join(job.resultdir,'results.html')
> > > -os.system('%s -r %s -f %s -R' % (reporter, job.resultdir,
> > > html_file))
> > > +## Generate a nice HTML report inside results_dir
> > > +kvm_utils.create_report(kvm_test_dir, job.resultsdir)
> > > diff --git a/client/tests/kvm/kvm_build.cfg.sample
> > > b/client/tests/kvm/kvm_build.cfg.sample
> > > new file mode 100644
> > > index 0000000..692a747
> > > --- /dev/null
> > > +++ b/client/tests/kvm/kvm_build.cfg.sample
> > > @@ -0,0 +1,82 @@
> > > +# This configuration file holds the KVM build test config
> > > parameters.
> > > +# The default is noinstall (won't attempt to build KVM), so if
> you
> > > stick with it
> > > +# please make sure:
> > > +# 1) You have setup symbolic links to qemu and qemu-img binaries
> on
> > > the
> > > +#    KVM test dir.
> > > +# 2) The appropriate KVM modules are already loaded on your
> machine.
> > > +
> > > +variants:
> > > +    - build:
> > > +        type = build
> > > +        # Load modules built/installed by the build test?
> > > +        load_modules = no
> > > +        variants:
> > > +            - noinstall:
> > > +                mode = noinstall
> > > +            - release:
> > > +                mode = release
> > > +                ## Install from a kvm release. You can
> optionally
> > > specify
> > > +                ## a release tag. If you omit it, the build test
> will
> > > get
> > > +                ## the latest release tag available at that
> moment.
> > > +                # release_tag = 84
> > > +                release_dir =
> > > http://downloads.sourceforge.net/project/kvm/
> > > +                release_listing =
> > > http://sourceforge.net/projects/kvm/files/
> > > +            - snapshot:
> > > +                mode = snapshot
> > > +                ## Install from a kvm snapshot location. You can
> > > optionally
> > > +                ## specify a snapshot date. If you omit it, the
> test
> > > will get
> > > +                ## yesterday's snapshot.
> > > +                # snapshot_date = 20090712
> > > +                snapshot_dir = http://foo.org/kvm-snapshots/
> > > +            - localtar:
> > > +                mode = localtar
> > > +                ## Install from tarball located on the host's
> > > filesystem.
> > > +                tarball = /tmp/kvm-84.tar.gz
> > > +            - localsrc:
> > > +                mode = localsrc
> > > +                ## Install from tarball located on the host's
> > > filesystem.
> > > +                srcdir = /tmp/kvm-84
> > > +            - git:
> > > +                mode = git
> > > +                ## Install KVM from git repositories.
> > > +                ## If you provide only "git_repo" and
> > > "user_git_repo", the
> > > +                ## build test will assume it will perform all
> build
> > > from the
> > > +                ## userspace dir, building modules trough 
> > > +                ## make -C kernel LINUX=%s sync. As of today
> > > (07-13-2009)
> > > +                ## upstream needs 3 git repos:
> > > +                ## * git_repo (linux sources)
> > > +                ## * user_git_repo (qemu sources)
> > > +                ## * kmod_repo" to build KVM userspace + kernel
> > > modules.
> > > +                git_repo =
> > > git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm.git
> > > +                # kernel_branch = kernel_branch_name
> > > +                # kernel_lbranch = kernel_lbranch_name
> > > +                # kernel_tag = kernel_tag_name
> > > +                user_git_repo =
> > > git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
> > > +                # user_branch = user_branch_name
> > > +                # user_lbranch = user_lbranch_name
> > > +                # user_tag = user_tag_name
> > > +                kmod_repo =
> > > git://git.kernel.org/pub/scm/virt/kvm/kvm-kmod.git
> > > +                # kmod_branch = kmod_branch_name
> > > +                # kmod_lbranch = kmod_lbranch_name
> > > +                # kmod_tag = kmod_tag_name
> > > +            - koji:
> > > +                mode = koji
> > > +                ## Install KVM from koji (Fedora build server)
> > > +                ## It is possible to install packages right from
> Koji
> > > if you
> > > +                ## provide a release tag or a build.
> > > +                ## Tag (if available)
> > > +                koji_tag = dist-f11
> > > +                ## Build (if available, is going to override
> tag).
> > > +                koji_build = qemu-0.10-16.fc11
> > > +                ## Command to interact with the build server
> > > +                koji_cmd = /usr/bin/koji
> > > +                ## The name of the source package that will be
> built
> > > +                src_pkg = qemu
> > > +                ## Name of the rpms we need installed
> > > +                pkg_list = ['qemu-kvm', 'qemu-kvm-tools',
> > > 'qemu-system-x86', 'qemu-common', 'qemu-img']
> > > +                ## Paths of the qemu relevant executables that
> should
> > > be checked
> > > +                qemu_bin_paths = ['/usr/bin/qemu-kvm',
> > > '/usr/bin/qemu-img']
> > > +
> > > +
> > > +# Choose your install method here
> > > +only build.noinstall
> > > \ No newline at end of file
> > > diff --git a/client/tests/kvm/kvm_utils.py
> > > b/client/tests/kvm/kvm_utils.py
> > > index f72984a..90b3def 100644
> > > --- a/client/tests/kvm/kvm_utils.py
> > > +++ b/client/tests/kvm/kvm_utils.py
> > > @@ -871,3 +871,115 @@ def unmap_url_cache(cachedir, url,
> > > expected_hash, method="md5"):
> > >          file_path = utils.unmap_url(cachedir, src, cachedir)
> > >  
> > >      return file_path
> > > +
> > > +
> > > +def prepare_test_run(basedir, rootdir='/tmp/kvm_autotest_root'):
> > > +    """
> > > +    Prepare the environment for a KVM test run by linking some
> > > previously
> > > +    prepared directories to the test bindir.
> > > +
> > > +    @param basedir: Location of the KVM test directory
> > > +    @param rootdir: Base directory that contains the KVM support
> > > directory
> > > +            structure:
> > > +            * isos (holds guest install isos)
> > > +            * images (will hold guest disk images)
> > > +            * qemu (qemu binary)
> > > +            * qemu-img (qemu-img binary)
> > > +    """
> > > +    # set English environment (command output might be
> localized,
> > > +    # need to be safe)
> > > +    os.environ['LANG'] = 'en_US.UTF-8'
> > > +
> > > +    # Symbolic links we desire to see in the KVM test dir
> > > +    list_symlinks = ['isos', 'images', 'qemu', 'qemu-img']
> > > +    for symlink_basename in list_symlinks:
> > > +        link_src = os.path.join(rootdir, symlink_basename)
> > > +        link_dst = os.path.join(basedir, symlink_basename)
> > > +        if not os.path.islink(link_dst):
> > > +            os.symlink(link_src, link_dst)
> > > +        # Testing whether our symlinks are good and in shape
> > > +        link_good = os.path.exists(os.readlink(link_dst))
> > > +        if not link_good:
> > > +            if symlink_basename in ['isos', 'images']:
> > > +                logging.critical("Mandatory directory %s is a
> broken
> > > symlink. "
> > > +                                 "This job will be aborted so you
> can
> > > fix the "
> > > +                                 "problem. Make sure %s points to
> a
> > > valid "
> > > +                                 "directory before proceeding.",
> > > +                                 symlink_basename, link_dst)
> > > +                raise error.JobError("Mandatory directory %s is
> a
> > > broken "
> > > +                                     "symlink. Please correct
> it." 
> > > %
> > > +                                     (link_dst))
> > > +            else:
> > > +                logging.warning("Symlink %s is broken. You might
> have
> > > problems "
> > > +                                "later in the test if the KVM
> build
> > > test mode "
> > > +                                "selected is 'noinstall'
> (default).
> > > ", link_dst)
> > 
> > As mentioned before I'm not sure we need this function at all.
> > If the user has to modify kvm_tests.cfg.sample anyway, he/she will
> see our
> > comments regarding the qemu/images/isos/steps paths.
> > 
> > > +def get_test_list(cfg, cfg_name, base_dir):
> > > +    """
> > > +    Return a list of test dictionaries composed by the KVM
> > > configuration system.
> > > +    This might look like a delegate of the get_list() method of
> the
> > > +    configuration, but in fact we might want to do custom config
> > > processing
> > > +    depending on the config file name provided.
> > > +
> > > +    @param cfg: KVM test configuration object
> > > +    @param cfg_name: Basename of the configuration file that
> > > generated the
> > > +            configuration object
> > > +    @param base_dir: Directory that holds the config files
> > > +
> > > +    @return: A list with test parameters dictionaries.
> > > +    """
> > > +    if cfg_name == 'kvm_tests.cfg':
> > > +        pools = os.path.join(base_dir, "kvm_address_pools.cfg")
> > > +        if os.path.exists(pools):
> > > +            cfg.parse_file(pools)
> > > +            hostname = os.uname()[1].split(".")[0]
> > > +            if cfg.filter("^" + hostname):
> > > +                cfg.parse_string("only ^%s" % hostname)
> > > +            else:
> > > +                cfg.parse_string("only ^default_host")
> > > +
> > > +    return cfg.get_list()
> > 
> > Already commented on this one above.
> > 
> > > +def run_tests(test_list, job):
> > > +    """
> > > +    Runs the sequence of KVM tests based on the list of
> dictionaries
> > > +    generated by the configuration system, handling
> dependencies.
> > > +
> > > +    @param test_list: List with all dictionary test parameters.
> > > +    @param job: Autotest job object.
> > > +    """
> > > +    status_dict = {}
> > > +
> > > +    for dict in test_list:
> > > +        if dict.get("skip") == "yes":
> > > +            continue
> > > +        dependencies_satisfied = True
> > > +        for dep in dict.get("depend"):
> > > +            for test_name in status_dict.keys():
> > > +                if not dep in test_name:
> > > +                    continue
> > > +                if not status_dict[test_name]:
> > > +                    dependencies_satisfied = False
> > > +                    break
> > > +        if dependencies_satisfied:
> > > +            test_iterations = int(dict.get("iterations", 1))
> > > +            current_status = job.run_test("kvm", params=dict,
> > > +                                         
> tag=dict.get("shortname"),
> > > +                                         
> > > iterations=test_iterations)
> > > +        else:
> > > +            current_status = False
> > > +        status_dict[dict.get("name")] = current_status
> > 
> > Already commented on this one above.
> > 
> > > +def create_report(report_dir, results_dir):
> > > +    """
> > > +    Creates a neatly arranged HTML results report in the results
> > > dir.
> > > +
> > > +    @param report_dir: Directory where the report script is
> located.
> > > +    @param results_dir: Directory where the results will be
> output.
> > > +    """
> > > +    reporter = os.path.join(report_dir, 'html_report.py')
> > > +    html_file = os.path.join(results_dir, 'results.html')
> > > +    os.system('%s -r %s -f %s -R' % (reporter, results_dir,
> > > html_file))
> > > -- 
> > > 1.6.2.5
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux