public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
From: Lucas Meneghel Rodrigues <lmr@redhat.com>
To: autotest@test.kernel.org
Cc: kvm@vger.kernel.org, mgoldish@redhat.com, jburke@redhat.com,
	Lucas Meneghel Rodrigues <lmr@redhat.com>
Subject: [PATCH 2/3] KVM test: Daily DVD test control file
Date: Wed, 21 Oct 2009 19:31:46 -0200	[thread overview]
Message-ID: <1256160707-4333-2-git-send-email-lmr@redhat.com> (raw)
In-Reply-To: <1256160707-4333-1-git-send-email-lmr@redhat.com>

This control file is a proof of concept of a control file
that downloads a iso DVD image produced on a daily basis
to the isos directory, gets the hash sums for the DVD
images and verifies the integrity of the download.

Makes use of the utility functions introduced on
previous patches.

Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com>
---
 client/tests/kvm/control.daily_dvd |  249 ++++++++++++++++++++++++++++++++++++
 1 files changed, 249 insertions(+), 0 deletions(-)
 create mode 100644 client/tests/kvm/control.daily_dvd

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


  reply	other threads:[~2009-10-21 21:31 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-21 21:31 [PATCH 1/3] KVM test: Add new utility functions to kvm_utils Lucas Meneghel Rodrigues
2009-10-21 21:31 ` Lucas Meneghel Rodrigues [this message]
2009-10-21 21:31   ` [PATCH 3/3] KVM test: Extend VM.create() method to support SHA1 check Lucas Meneghel Rodrigues
2009-10-22 10:58     ` [Autotest] " Uri Lublin
2009-10-22 10:56 ` [Autotest] [PATCH 1/3] KVM test: Add new utility functions to kvm_utils Uri Lublin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1256160707-4333-2-git-send-email-lmr@redhat.com \
    --to=lmr@redhat.com \
    --cc=autotest@test.kernel.org \
    --cc=jburke@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mgoldish@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox