new file mode 100644
@@ -0,0 +1,249 @@
+AUTHOR = """
+uril@redhat.com (Uri Lublin)
+drusso@redhat.com (Dror Russo)
+mgoldish@redhat.com (Michael Goldish)
+dhuff@redhat.com (David Huff)
+aeromenk@redhat.com (Alexey Eromenko)
+mburns@redhat.com (Mike Burns)
+"""
+TIME = 'SHORT'
+NAME = 'KVM test'
+TEST_TYPE = 'client'
+TEST_CLASS = 'Virtualization'
+TEST_CATEGORY = 'Functional'
+
+DOC = """
+Executes the KVM test framework on a given host. This module is separated in
+minor functions, that execute different tests for doing Quality Assurance on
+KVM (both kernelspace and userspace) code.
+
+For online docs, please refer to http://www.linux-kvm.org/page/KVM-Autotest
+
+This control file tests daily DVD/CDs for a given distro, adding MD5/SHA1
+checksums and executing unattended installs of that distro.
+"""
+
+
+import sys, os
+
+#-----------------------------------------------------------------------------
+# set English environment (command output might be localized, need to be safe)
+#-----------------------------------------------------------------------------
+os.environ['LANG'] = 'en_US.UTF-8'
+
+#---------------------------------------------------------
+# Enable modules import from current directory (tests/kvm)
+#---------------------------------------------------------
+pwd = os.path.join(os.environ['AUTODIR'],'tests/kvm')
+sys.path.append(pwd)
+
+# ------------------------
+# 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')
+
+
+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 time
+import kvm_config, kvm_utils
+from autotest_lib.client.bin import utils
+
+filename = os.path.join(pwd, "kvm_tests.cfg")
+cfg = kvm_config.config(filename)
+
+# ----------------------------------------------------------
+# Daily DVD testing setup
+# ----------------------------------------------------------
+repo = "http://download.fedoraproject.org/pub/fedora/linux/releases/11/Fedora/"
+dvd_32_basename = "Fedora-11-%s.0-i386-DVD.iso" % time.strftime("%Y%m%d")
+dvd_64_basename = "Fedora-11-%s.0-x86_64-DVD.iso" % time.strftime("%Y%m%d")
+hash_basename = "MD5SUM"
+hash_type = "md5"
+
+dvd_32_hash_url = os.path.join(repo, "i386/iso", hash_basename)
+dvd_64_hash_url = os.path.join(repo, "x86_64/iso", hash_basename)
+dvd_32_url = os.path.join(repo, "i386/iso", dvd_32_basename)
+dvd_64_url = os.path.join(repo, "x86_64/iso", dvd_64_basename)
+
+dvd_32_sha1_path = utils.unmap_url("/tmp", dvd_32_url, "/tmp")
+dvd_64_sha1_path = utils.unmap_url("/tmp", dvd_64_url, "/tmp")
+
+dvd_32_hash = kvm_utils.get_hash_from_file(dvd_32_sha1_path, dvd_32_basename)
+dvd_64_hash = kvm_utils.get_hash_from_file(dvd_64_sha1_path, dvd_64_basename)
+
+# Download the DVD images to the images directory, caching them
+dvd_32 = kvm_utils.unmap_url_cache(os.path.join(pwd, "isos/linux"), dvd_32_url,
+ dvd_32_hash, hash_type)
+dvd_64 = kvm_utils.unmap_url_cache(os.path.join(pwd, "isos/linux"), dvd_64_url,
+ dvd_64_hash, hash_type)
+
+# Since we are dynamically downloading the isos, we need to add their
+# hash strings and iso names to the test configuration
+cfg.parse_string("Fedora.nightly.32: cdrom = isos/linux/%s" % dvd_32_basename)
+cfg.parse_string("Fedora.nightly.64: cdrom = isos/linux/%s" % dvd_64_basename)
+cfg.parse_string("Fedora.nightly.32: %ssum = %s" % (hash_type, dvd_32_hash))
+cfg.parse_string("Fedora.nightly.64: %ssum = %s" % (hash_type, dvd_32_hash))
+
+# If desirable, make changes to the test configuration here. For example:
+# cfg.parse_string("install|setup: timeout_multiplier = 3")
+
+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, 'make_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))