From patchwork Wed Oct 21 21:31:46 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Meneghel Rodrigues X-Patchwork-Id: 55223 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n9LLWXVo030880 for ; Wed, 21 Oct 2009 21:32:33 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755448AbZJUVby (ORCPT ); Wed, 21 Oct 2009 17:31:54 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755409AbZJUVbx (ORCPT ); Wed, 21 Oct 2009 17:31:53 -0400 Received: from mx1.redhat.com ([209.132.183.28]:13688 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755437AbZJUVbv (ORCPT ); Wed, 21 Oct 2009 17:31:51 -0400 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id n9LLVtFr015108; Wed, 21 Oct 2009 17:31:55 -0400 Received: from localhost.localdomain (vpn-12-234.rdu.redhat.com [10.11.12.234]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id n9LLVoHV004876; Wed, 21 Oct 2009 17:31:53 -0400 From: Lucas Meneghel Rodrigues To: autotest@test.kernel.org Cc: kvm@vger.kernel.org, mgoldish@redhat.com, jburke@redhat.com, Lucas Meneghel Rodrigues Subject: [PATCH 2/3] KVM test: Daily DVD test control file Date: Wed, 21 Oct 2009 19:31:46 -0200 Message-Id: <1256160707-4333-2-git-send-email-lmr@redhat.com> In-Reply-To: <1256160707-4333-1-git-send-email-lmr@redhat.com> References: <1256160707-4333-1-git-send-email-lmr@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org diff --git a/client/tests/kvm/control.daily_dvd b/client/tests/kvm/control.daily_dvd new file mode 100644 index 0000000..07dade6 --- /dev/null +++ b/client/tests/kvm/control.daily_dvd @@ -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))