public inbox for kvm@vger.kernel.org
 help / color / mirror / Atom feed
* [Autotest] [KVM-AUTOTEST][PATCH V2] Patch to install cygwin and run autotest in windows
@ 2010-09-27 12:13 Yogananth Subramanian
  2010-09-27 12:13 ` [PATCH] [PATCH V2] patch to enable installing cygwin and running autotest in windows guests Yogananth Subramanian
  0 siblings, 1 reply; 3+ messages in thread
From: Yogananth Subramanian @ 2010-09-27 12:13 UTC (permalink / raw)
  To: lmr; +Cc: anantyog, autotest, kvm

Hello Lucas,
I like to resubmit this patch, in the previous patch i had hard coded it for
 doing local installation and had missed the remote installation part. So in 
this patch i have fixed it,  'cyg_param' take different vlaues for local and 
remote install, to avoid the error in previous patch.
Have also altered the commit message, to make it more lucid. 

Thanks
yogi
  

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] [PATCH V2] patch to enable installing cygwin and running autotest in windows guests
  2010-09-27 12:13 [Autotest] [KVM-AUTOTEST][PATCH V2] Patch to install cygwin and run autotest in windows Yogananth Subramanian
@ 2010-09-27 12:13 ` Yogananth Subramanian
  2010-10-27 21:00   ` Lucas Meneghel Rodrigues
  0 siblings, 1 reply; 3+ messages in thread
From: Yogananth Subramanian @ 2010-09-27 12:13 UTC (permalink / raw)
  To: lmr; +Cc: autotest, kvm

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 106068 bytes --]

The patch creates two new files 'scripts/cyg_install.py' and
'tests/cyg_install'. 'scripts/cyg_install.py' is used to install cygwin in
unattended mode. This patch also introduces a new parameter 'patch_file'to
run_autotest() in kvm_test_utils.py file, to install patch for autotest to
run in windows. The file 'autotest_control/autotest.patch' is base patch to
run any autotest test cases in windows and file 'autotest_control/iozone.patch'
is a patch to run iozone on windows.

[cyg_install]:
1)local install:
   Folder denoted by 'cyg_path' should contain the cygwin setup file and a
   dir called "repo" which would contain all the cygwin packages need to be
   installed.
  remote install:
   'cyg_path' contains the link to download cygwin setup file
2)scripts/cyg_install.py creates  cyg.iso,which contains "cyg_install.cmd"
   script needed to install cygwin and set of files pointed by the
   'cyg_path'
3)login to guest using telnet and run "cyg_install.cmd" to install
   cygwin

[cygwin autotest]
1)the param 'test_patch_file' contains the list of patches for autotest
2)scp autotest to windows guest, apply the patch and run autotest

Signed-off-by: Yogananth Subramanian <anantyog@linux.vnet.ibm.com>
---
 client/tests/kvm/autotest_control/autotest.patch |   15 +
 client/tests/kvm/autotest_control/iozone.patch   |   12 +
 client/tests/kvm/kvm_test_utils.py               |   10 +-
 client/tests/kvm/scripts/cyg_install.py          |   98 ++
 client/tests/kvm/tests/autotest.py               |   21 +-
 client/tests/kvm/tests/cyg_install.py            |   36 +
 client/tests/kvm/tests_base.cfg.sample           |   45 +-
 client/tests/kvm/tests_base.cfg.sample.orig      | 1884 ++++++++++++++++++++++
 8 files changed, 2117 insertions(+), 4 deletions(-)
 create mode 100644 client/tests/kvm/autotest_control/autotest.patch
 create mode 100644 client/tests/kvm/autotest_control/iozone.patch
 create mode 100644 client/tests/kvm/scripts/cyg_install.py
 create mode 100644 client/tests/kvm/tests/cyg_install.py
 create mode 100644 client/tests/kvm/tests_base.cfg.sample.orig

diff --git a/client/tests/kvm/autotest_control/autotest.patch b/client/tests/kvm/autotest_control/autotest.patch
new file mode 100644
index 0000000..f562f95
--- /dev/null
+++ b/client/tests/kvm/autotest_control/autotest.patch
@@ -0,0 +1,15 @@
+diff -aurpN client/bin/job.py client-new/bin/job.py
+--- client/bin/job.py   2010-08-25 01:42:27.000000000 -0400
++++ client-new/bin/job.py       2010-09-07 09:54:30.000000000 -0400
+@@ -296,7 +296,10 @@ class base_client_job(base_job.base_job)
+
+         # extract console= and other args from cmdline and add them into the
+         # base args that we use for all kernels we install
+-        cmdline = utils.read_one_line('/proc/cmdline')
++        if os.path.exists('/proc/cmdline'):
++            cmdline = utils.read_one_line('/proc/cmdline')
++        else:
++            return
+         kernel_args = []
+         for karg in cmdline.split():
+             for param in copy_cmdline:
diff --git a/client/tests/kvm/autotest_control/iozone.patch b/client/tests/kvm/autotest_control/iozone.patch
new file mode 100644
index 0000000..6229205
--- /dev/null
+++ b/client/tests/kvm/autotest_control/iozone.patch
@@ -0,0 +1,12 @@
+diff -aurpN client/tests/iozone/iozone.py client-new/tests/iozone/iozone.py
+--- client/tests/iozone/iozone.py       2010-08-25 01:42:27.000000000 -0400
++++ client-new/tests/iozone/iozone.py   2010-09-02 11:38:42.000000000 -0400
+@@ -43,7 +43,7 @@ class iozone(test.test):
+         elif (arch == 'x86_64'):
+             utils.system('make linux-AMD64')
+         else:
+-            utils.system('make linux')
++            utils.system('make Windows')
+ 
+ 
+     def run_once(self, dir=None, args=None):
diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py
index 5412aac..34bccb8 100644
--- a/client/tests/kvm/kvm_test_utils.py
+++ b/client/tests/kvm/kvm_test_utils.py
@@ -336,7 +336,7 @@ def get_memory_info(lvms):
     return meminfo
 
 
-def run_autotest(vm, session, control_path, timeout, outputdir):
+def run_autotest(vm, session, control_path, timeout, outputdir, patch_file):
     """
     Run an autotest control file inside a guest (linux only utility).
 
@@ -346,6 +346,7 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
     @param timeout: Timeout under which the autotest control file must complete.
     @param outputdir: Path on host where we should copy the guest autotest
             results to.
+    @param patch_file: A path to an autotest patch file.
     """
     def copy_if_hash_differs(vm, local_path, remote_path):
         """
@@ -460,12 +461,19 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
                             os.path.join(autotest_path, 'control')):
         raise error.TestFail("Could not copy the test control file to guest")
 
+    if not patch_file == "":
+        if not vm.copy_files_to(patch_file,
+                            os.path.join(autotest_path, '../test.patch')):
+            raise error.TestFail("Could not copy the test patch file to guest")
+
     # Run the test
     logging.info("Running autotest control file %s on guest, timeout %ss",
                  os.path.basename(control_path), timeout)
     session.get_command_output("cd %s" % autotest_path)
     session.get_command_output("rm -f control.state")
     session.get_command_output("rm -rf results/*")
+    if not patch_file == "":
+        session.get_command_output("patch -p1 <../test.patch")
     logging.info("---------------- Test output ----------------")
     status = session.get_command_status("bin/autotest control",
                                         timeout=timeout,
diff --git a/client/tests/kvm/scripts/cyg_install.py b/client/tests/kvm/scripts/cyg_install.py
new file mode 100644
index 0000000..7213b90
--- /dev/null
+++ b/client/tests/kvm/scripts/cyg_install.py
@@ -0,0 +1,98 @@
+#!/usr/bin/python
+"""
+Script to install cygwin  on KVM guests.
+"""
+# -*- coding: utf-8 -*-
+import os, sys, shutil, tempfile, re, ConfigParser, glob
+import common
+from autotest_lib.client.bin import utils
+
+class CygInstall(object):
+    """
+    Creates an iso image that will contain cygwin setup file for unattended
+    install. The setup and cygwin packages should be present on the host
+    under the path specified by 'cyg_path' for local install. For remote 
+    install the setup will be downloaded from 'cyg_path'  
+    """
+    def __init__(self):
+        """
+        Gets params from environment variables and sets class attributes.
+        """
+        script_dir = os.path.dirname(sys.modules[__name__].__file__)
+        kvm_test_dir = os.path.abspath(os.path.join(script_dir, ".."))
+        images_dir = os.path.join(kvm_test_dir, 'images')
+        self.deps_dir = os.path.join(kvm_test_dir, 'deps')
+        self.cachedir = os.path.join(kvm_test_dir, 'cyg_cache')
+        self.unattended_dir = os.path.join(kvm_test_dir, 'unattended')
+        self.cyg_type = os.environ.get('KVM_TEST_cyg_type')
+        self.cyg_path = os.environ.get('KVM_TEST_cyg_path')
+        self.cyg_param = os.environ.get('KVM_TEST_cyg_param')
+        self.cyg_iso = os.environ.get('KVM_TEST_cdrom_cd1')
+
+
+    def setup_local(self):
+        """
+        cygwin setup and packages are present locally.
+        """
+        self.cygsetup_file()
+        mkiso_cmd = "mkisofs -L -l -allow-lowercase -allow-multidot -relaxed-"\
+              "filenames  -N -v -d  -D  -o %s %s"%(self.cyg_iso, self.cyg_path)
+        if os.system(mkiso_cmd):
+            raise SetupError('Could not create iso')
+
+
+    def setup_remote(self):
+        """
+        cygwin setup downloaded from 'cyg_path' 
+        """
+
+        if not os.path.isdir(self.cachedir):
+            os.makedirs(self.cachedir)
+        self.cyg_md5 = os.environ.get('KVM_TEST_cyg_md5')
+        dacapo_pkg = utils.unmap_url_cache(self.cachedir, self.cyg_path, self.cyg_md5)
+        self.cyg_path = self.cachedir 
+        self.cygsetup_file()
+        mkiso_cmd = "mkisofs -L -l -allow-lowercase -allow-multidot -relaxed"\
+             "-filenames  -N -v -d  -D  -o %s %s"%(self.cyg_iso,self.cachedir)
+        if os.system(mkiso_cmd):
+            raise SetupError('Could not create iso')
+        shutil.rmtree(self.cachedir)
+
+    def cygsetup_file(self):
+       cyg_config_file = os.path.join(self.cyg_path, 'cyg_install.cmd')
+       cyg_config = open(cyg_config_file, 'w')
+       cyg_config.write('d:setup.exe -q -R '
+                              '"%systemdrive%\\cygwin"  '+self.cyg_param)
+       cyg_config.write('\n')
+       cyg_config.write('cd %systemdrive%\\cygwin\\bin\n')
+       cyg_config.write("""for /f "delims=" %%A in ('cygpath.exe -u %tmp%')"""
+                                                         """ do set a=%%A\n""")
+       cyg_config.write('bash --login -i -c "chmod 777 %a%"\n')
+       cyg_config.write('ash.exe /usr/bin/rebaseall \n')
+       cyg_config.write('bash --login -i -c "ssh-host-config -y --pwd '
+                                                              '1q2w3eP"\n')
+       cyg_config.write('net start sshd\n')
+       cyg_config.write('bash --login -i -c "ssh-user-config -y -p"\n')
+       cyg_config.close()
+
+    def setup(self):
+        print "Starting Cygwin install setup"
+
+        print "Variables set:"
+        print "    cygwin instally type: " + str(self.cyg_type)
+        print "    cygwin path: " + str(self.cyg_path)
+        print "    cygwin iso: " + str(self.cyg_iso)
+
+        if self.cyg_type == "local":
+            self.setup_local()
+        elif self.cyg_type == "remote":
+            self.setup_remote()
+        else:
+            raise SetupError("Unexpected installation method %s" %
+                                   self.cyg_type)
+        print "Cygwin install setup finished successfuly"
+
+
+if __name__ == "__main__":
+    os_install = CygInstall()
+    os_install.setup()
diff --git a/client/tests/kvm/tests/autotest.py b/client/tests/kvm/tests/autotest.py
index 2916ebd..e40b26a 100644
--- a/client/tests/kvm/tests/autotest.py
+++ b/client/tests/kvm/tests/autotest.py
@@ -1,4 +1,4 @@
-import os, logging
+import os, logging, tempfile
 from autotest_lib.client.common_lib import error
 from autotest_lib.client.bin import utils
 import kvm_subprocess, kvm_utils, kvm_test_utils
@@ -20,6 +20,23 @@ def run_autotest(test, params, env):
     timeout = int(params.get("test_timeout", 300))
     control_path = os.path.join(test.bindir, "autotest_control",
                                 params.get("test_control_file"))
+    if not params.get("test_patch_file"):
+        patch_file = ""
+    else:
+        autotest_files = params.get("test_patch_file").split()
+        temp = []
+        for autotest_file in autotest_files:
+            patch_path = os.path.join(test.bindir, "autotest_control",
+                                autotest_file)
+            f = open(patch_path, "r")
+            temp.extend(f.readlines())
+            f.close()
+
+        (fd,patch_file)=tempfile.mkstemp(prefix='patch_',dir='/tmp')
+        f = open(patch_file, "w")
+        f.writelines(temp)
+        f.close()
     outputdir = test.outputdir
 
-    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir)
+    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir,
+                                                                   patch_file)
diff --git a/client/tests/kvm/tests/cyg_install.py b/client/tests/kvm/tests/cyg_install.py
new file mode 100644
index 0000000..f038b2d
--- /dev/null
+++ b/client/tests/kvm/tests/cyg_install.py
@@ -0,0 +1,36 @@
+import logging, time, os
+from autotest_lib.client.common_lib import error
+from autotest_lib.client.bin import utils
+from autotest_lib.client.tests.iozone import postprocessing
+import kvm_subprocess, kvm_test_utils, kvm_utils
+
+
+def run_cyg_install(test, params, env):
+    """
+    Install cygwin on a windows guest:
+    1) Log into a guest
+    2) Install cygwin with the setup contained in the cyg.iso
+
+    @param test: kvm test object
+    @param params: Dictionary with the test parameters
+    @param env: Dictionary with test environment.
+    """
+    vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
+    timeout = int(params.get("login_timeout", 360))
+    session = kvm_test_utils.wait_for_login(vm, 0,timeout,0,2)
+    results_path = os.path.join(test.resultsdir,
+                                'raw_output_%s' % test.iteration)
+
+    c = params.get("cyg_cmd")
+    t = int(params.get("cyg_timeout"))
+    logging.info("Installing cygwin on guest, timeout %ss", t)
+    results = session.get_command_output(command=c, timeout=t,
+                                         print_func=logging.debug)
+    utils.open_write_close(results_path, results)
+
+    logging.info("Installation succeed")
+    session.sendline(vm.get_params().get("shutdown_command"))
+    if not kvm_utils.wait_for(vm.is_dead, 240, 0, 1):
+        raise error.TestFail("Guest refuses to go down")
+    session.close()
+
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 167e86d..70ab947 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -130,6 +130,25 @@ variants:
         kill_vm_on_error = yes
         login_timeout = 240
 
+    -cyg_install:     install setup unattended_install.cdrom
+        type = cyg_install
+        pre_command = " scripts/cyg_install.py;"
+        cyg_param = " -P make,patch,bash,vim,openssh,python,gcc,binutils "
+        shutdown_method = shell
+        cyg_cmd = "cmd /c D:\cyg_install.cmd"
+        cyg_timeout = 3600
+        shutdown_command = shutdown /s /f /t 0
+        variants:
+            - local:
+                cyg_type = local
+                cyg_param += " -L -l d:\\repo "
+                cyg_path = "/root/sdb/images/cyg"
+            - remote:
+                cyg_type = remote
+                cyg_param += " -s http://cygwin.basemirror.de "
+                cyg_path = "http://www.cygwin.com/setup.exe"
+                cyg_md5 = "a4f5eaaa1096891b9812b81f104fc4d9"
+
     - migrate:      install setup unattended_install.cdrom
         type = migration
         migration_test_command = help
@@ -1236,7 +1255,7 @@ variants:
 
     # Windows section
     - @Windows:
-        no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks)
+        no linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks)
         shutdown_command = shutdown /s /f /t 0
         reboot_command = shutdown /r /f /t 0
         status_test_command = echo %errorlevel%
@@ -1327,6 +1346,30 @@ variants:
             pci_test_cmd = echo select disk 1 > dt && echo online >> dt && echo detail disk >> dt && echo exit >> dt && diskpart /s dt
         physical_resources_check:
             catch_uuid_cmd = 
+        cyg_install:
+            cdrom_cd1 = windows/cyg.iso
+            shell_prompt = "Administrator>$"
+            username = Administrator
+            password = 1q2w3eP
+            shell_client = telnet
+            shell_port = 23
+            guest_port_remote_shell = 23
+        autotest:
+            shell_prompt = "Administrator>$"
+            username = Administrator
+            password = 1q2w3eP
+            status_test_command = echo $?
+            shell_prompt = "\$ "
+            shell_client = ssh
+            shell_linesep = "\n"
+            shell_port = 22
+            file_transfer_client = scp
+            file_transfer_port = 22
+            guest_port_remote_shell = 22
+            guest_port_file_transfer = 23
+            test_patch_file = autotest.patch
+        autotest.iozone:
+            test_patch_file += " iozone.patch"
 
         variants:
             - Win2000:
diff --git a/client/tests/kvm/tests_base.cfg.sample.orig b/client/tests/kvm/tests_base.cfg.sample.orig
new file mode 100644
index 0000000..167e86d
--- /dev/null
+++ b/client/tests/kvm/tests_base.cfg.sample.orig
@@ -0,0 +1,1884 @@
+# Copy this file to tests_base.cfg and edit it.
+#
+# Define the objects we'll be using
+vms = vm1
+images = image1
+cdroms = cd1
+nics = nic1
+monitors = humanmonitor1
+
+# Choose the main VM and monitor
+main_vm = vm1
+main_monitor = humanmonitor1
+
+# Some preprocessor/postprocessor params
+start_vm = yes
+kill_vm = no
+kill_vm_gracefully = yes
+kill_unresponsive_vms = yes
+
+# Screendump specific stuff
+convert_ppm_files_to_png_on_error = yes
+#keep_ppm_files = yes
+#keep_ppm_files_on_error = yes
+take_regular_screendumps = yes
+keep_screendumps_on_error = yes
+screendump_delay = 5
+screendump_quality = 30
+screendump_temp_dir = /dev/shm
+screendump_verbose = no
+
+# Some default VM params
+qemu_binary = qemu
+qemu_img_binary = qemu-img
+smp = 1
+mem = 512
+image_size = 10G
+drive_index_image1 = 0
+shell_port = 22
+display = vnc
+drive_index_cd1 = 1
+
+# Monitor params
+monitor_type = human
+
+# Default scheduler params
+used_cpus = 1
+used_mem = 512
+
+# Port redirections
+redirs = remote_shell
+guest_port_remote_shell = 22
+
+# NIC parameters
+nic_mode = user
+#nic_mode = tap
+nic_script = scripts/qemu-ifup
+address_index = 0
+run_tcpdump = yes
+
+# Misc
+profilers = kvm_stat
+login_timeout = 360
+
+
+# Tests
+variants:
+    - install:
+        type = steps
+        fail_if_stuck_for = 300
+        stuck_detection_history = 2
+        keep_screendump_history = yes
+        force_create_image = yes
+        kill_vm = yes
+        kill_vm_timeout = 60
+        kill_vm_timeout_on_error = 0
+
+    - setup:        install
+        type = steps
+        fail_if_stuck_for = 300
+        stuck_detection_history = 2
+        kill_vm_on_error = yes
+        keep_screendump_history = yes
+
+    - unattended_install:
+        type = unattended_install
+        kill_vm = yes
+        kill_vm_gracefully = yes
+        kill_vm_on_error = yes
+        force_create_image = yes
+        pre_command += " scripts/unattended.py;"
+        extra_params += " -boot d"
+        guest_port_unattended_install = 12323
+        kernel = vmlinuz
+        initrd = initrd.img
+        nic_mode = tap
+        variants:
+            # Install guest from cdrom 
+            - cdrom:
+                medium = cdrom
+                nic_mode = user
+                redirs += " unattended_install"
+                kernel =
+                initrd = 
+            # Install guest from http/ftp url
+            - url:
+                medium = url
+                extra_params += " --append ks=floppy"
+                url = REPLACE_THIS_WITH_TREE_URL
+            # Install guest from nfs nfs_server:nfs_dir
+            - nfs:
+                medium = nfs
+                extra_params += " --append ks=floppy"
+                nfs_server = REPLACE_THIS_WITH_NFS_SERVER
+                nfs_dir = REPLACE_THIS_WITH_NFS_DIRECTORY
+            # Install guest with a remote kickstart
+            - remote_ks:
+                medium = url
+                extra_params += " --append ks=REPLACE_THIS_WITH_URL_OF_KS"
+                url = REPLACE_THIS_WITH_TREE_URL
+
+    - boot:         install setup unattended_install.cdrom
+        type = boot
+        restart_vm = yes
+        kill_vm_on_error = yes
+        login_timeout = 240
+
+    - reboot:       install setup unattended_install.cdrom
+        type = boot
+        reboot_method = shell
+        kill_vm_on_error = yes
+        login_timeout = 240
+
+    - migrate:      install setup unattended_install.cdrom
+        type = migration
+        migration_test_command = help
+        migration_bg_command = "cd /tmp; nohup tcpdump -q -t ip host localhost"
+        migration_bg_check_command = pgrep tcpdump
+        migration_bg_kill_command = pkill tcpdump
+        kill_vm_on_error = yes
+        iterations = 2
+        used_mem = 1024
+        mig_timeout = 3600
+        variants:
+            - tcp:
+                migration_protocol = "tcp"
+            - unix:
+                migration_protocol = "unix"
+            - exec:
+                migration_protocol = "exec"
+            - mig_cancel:
+                migration_protocol = "tcp"
+                mig_cancel = True
+
+    - boot_savevm: install setup unattended_install.cdrom
+        type = boot_savevm
+        savevm_delay = 0.3
+        savevm_login_delay = 120
+        savevm_timeout = 2000
+        kill_vm_on_error = yes
+        kill_vm_gracefully = yes
+        kill_vm = yes
+
+    - autotest:     install setup unattended_install.cdrom
+        type = autotest
+        test_timeout = 1800
+        variants:
+            - sleeptest:
+                test_timeout = 120
+                test_control_file = sleeptest.control
+            - dbench:
+                test_control_file = dbench.control
+            - bonnie:
+                test_control_file = bonnie.control
+            - ebizzy:
+                test_control_file = ebizzy.control
+            - stress:
+                test_control_file = stress.control
+            - disktest:
+                test_control_file = disktest.control
+            - ctcs2:
+                # If you think this is too lengthy, please change the cerberus
+                # control file and set this timeout appropriately.
+                test_timeout = 3900
+                test_control_file = cerberus.control
+            - npb:
+                test_control_file = npb.control
+            - hackbench:
+                test_control_file = hackbench.control
+            - cpu_hotplug:
+                test_control_file = cpu_hotplug.control
+            - monotonic_time:
+                test_control_file = monotonic_time.control
+            - tsc:
+                test_control_file = tsc.control
+            - scrashme:
+                test_control_file = scrashme.control
+            - hwclock:
+                test_control_file = hwclock.control
+            - rtc:
+                test_control_file = rtc.control
+
+    - linux_s3:     install setup unattended_install.cdrom
+        type = linux_s3
+
+    - timedrift:    install setup unattended_install.cdrom
+        variants:
+            - ntp:
+                variants:
+                    - with_load:
+                        type = timedrift
+                        # Pin the VM and host load to CPU #0
+                        cpu_mask = 0x1
+                        # Set the load and rest durations
+                        load_duration = 20
+                        rest_duration = 20
+                        # Fail if the drift after load is higher than 50%
+                        drift_threshold = 50
+                        # Fail if the drift after the rest period is higher than 10%
+                        drift_threshold_after_rest = 10
+                        # For now, make sure this test is executed alone
+                        used_cpus = 100
+                    - with_migration:
+                        type = timedrift_with_migration
+                        migration_iterations = 3
+                        drift_threshold = 10
+                        drift_threshold_single = 3
+                    - with_reboot:
+                        type = timedrift_with_reboot
+                        reboot_iterations = 1
+                        drift_threshold = 10
+                        drift_threshold_single = 3
+                    - with_stop:
+                        type = timedrift_with_stop
+                        stop_interations = 1
+                        drift_threshold = 10
+                        drift_threshold_single = 3
+            - date:
+                variants:
+                    - with_load:
+                        type = timedrift
+                        # Pin the VM and host load to CPU #0
+                        cpu_mask = 0x1
+                        # Set the load and rest durations
+                        load_duration = 20
+                        rest_duration = 20
+                        # Fail if the drift after load is higher than 50%
+                        drift_threshold = 50
+                        # Fail if the drift after the rest period is higher than 10%
+                        drift_threshold_after_rest = 10
+                        # For now, make sure this test is executed alone
+                        used_cpus = 100
+                    - with_migration:
+                        type = timedrift_with_migration
+                        migration_iterations = 3
+                        drift_threshold = 10
+                        drift_threshold_single = 3
+                    - with_reboot:
+                        type = timedrift_with_reboot
+                        reboot_iterations = 1
+                        drift_threshold = 10
+                        drift_threshold_single = 3
+                    - with_stop:
+                        type = timedrift_with_stop
+                        stop_interations = 1
+                        drift_threshold = 10
+                        drift_threshold_single = 3
+
+    - balloon_check:  install setup unattended_install.cdrom
+        type = balloon_check
+        extra_params += " -balloon virtio"
+        iterations = 5
+
+    - stress_boot:  install setup unattended_install.cdrom
+        type = stress_boot
+        max_vms = 5    
+        alive_test_cmd = uname -a
+        clone_address_index_base = 10
+        login_timeout = 240
+        kill_vm = yes
+        kill_vm_vm1 = no
+        kill_vm_gracefully = no
+        extra_params += " -snapshot"
+        used_cpus = 5
+        used_mem = 2560
+
+    - guest_test:       install setup unattended_install.cdrom
+        type = guest_test
+        login_timeout = 360
+        test_timeout = 600
+        script_params =
+        reboot = yes
+        variants:
+            - autoit:
+                interpreter = D:\AutoIt3.exe
+                variants:
+                    - notepad:
+                        guest_script = autoit/notepad1.au3
+                        dst_rsc_path = "C:\script.au3"
+                    - stub:
+                        download = yes
+                        download_cmd = "git clone"
+                        rsc_server = "git://the.resource.server/autoit"
+                        dst_rsc_dir = "C:\"
+                        dst_rsc_path = "C:\autoit\stub\stub.au3"
+            - powershell:
+                interpreter = "powershell.exe -File"
+                variants:
+                    - stub:
+                        download = yes
+                        download_cmd = "git clone"
+                        rsc_server = "git://the.resource.server/powershell"
+                        dst_rsc_dir = "C:\"
+                        dst_rsc_path = "C:\powershell\stub\stub.ps1"
+
+    - iozone_windows: unattended_install.cdrom
+        type = iozone_windows
+        iozone_cmd = "D:\IOzone\iozone.exe -a"
+        iozone_timeout = 3600
+
+    - @whql:         install setup unattended_install.cdrom
+        nic_mode = tap
+        # Replace this with the address of an installed DTM server
+        server_address = 10.20.30.40
+        # The server should run rss.exe like a regular Windows VM, preferably
+        # with administrator privileges (or at least with permission to write
+        # to the DTM studio directory)
+        server_shell_port = 10022
+        server_file_transfer_port = 10023
+        server_studio_path = %programfiles%\Microsoft Driver Test Manager\Studio
+        wtt_services = wttsvc
+        variants:
+            - whql_client_install:
+                type = whql_client_install
+                dsso_delete_machine_binary = deps/whql_delete_machine_15.exe
+                # The username and password are required for accessing the DTM client
+                # installer binary shared by the server
+                server_username = administrator
+                server_password = 1q2w3eP
+                # This path refers to a shared directory on the server
+                # (the final cmd will be something like \\servername\DTMInstall\...)
+                install_cmd = \DTMInstall\Client\Setup.exe /passive
+                install_timeout = 3600
+            - whql_submission:    whql_client_install
+                type = whql_submission
+                extra_params += " -snapshot"
+                dsso_test_binary = deps/whql_submission_15.exe
+                test_timeout = 3600
+                device_data = cat0 cat1 cat2 cat3 logoarch logoos whqlos whqlqual prog desc filter virt
+                descriptors = desc1 desc2 desc3
+                # DeviceData names
+                dd_name_cat0     = Category
+                dd_name_cat1     = Category
+                dd_name_cat2     = Category
+                dd_name_cat3     = Category
+                dd_name_logoarch = LogoProcessorArchitecture
+                dd_name_logoos   = LogoOperatingSystem
+                dd_name_whqlos   = WhqlOs
+                dd_name_whqlqual = WhqlQualification
+                dd_name_prog     = LogoProgramId
+                dd_name_desc     = LogoProgramDescription
+                dd_name_filter   = WDKFilterAttribute
+                dd_name_virt     = ParaVirtualizationDriver
+                # Common DeviceData data
+                dd_data_filter   = FilterIfNoInf
+                dd_data_virt     = True
+                variants:
+                    - keyboard:
+                        # test_device is a regular expression that should match a device's
+                        # name as it appears in device manager.  The first device that matches
+                        # is used.
+                        test_device = keyboard
+                        # Set timeout to 10 hours
+                        test_timeout = 36000
+                        dd_data_cat0 = Input\Keyboard
+                        dd_data_cat1 = Device Fundamentals
+                        dd_data_cat2 = System Fundamentals\Dynamic Partitioning
+                        dd_data_prog = InputKbd
+                        dd_data_desc = Input > Keyboard
+                    - hdd:
+                        test_device = qemu harddisk
+                        device_data += " ex0 ex1 ex2 ex3"
+                        dd_data_cat0 = Storage\Device Class\Disk\Disk
+                        dd_data_cat1 = Storage\Device Class\Disk\Fixed
+                        dd_data_cat2 = Storage\Device Class\Disk\Bus\ATA
+                        dd_data_cat3 = Device Fundamentals
+                        dd_data_prog = StorHDD
+                        dd_data_desc = Storage > Hard Disk Drive (HDD)
+                        dd_name_ex0 = Storage_bus_type
+                        dd_data_ex0 = ATA/ATAPI
+                        dd_name_ex1 = Hybrid_HDD_Support
+                        dd_data_ex1 = 0
+                        dd_name_ex2 = Non_Rotating_Media
+                        dd_data_ex2 = 0
+                        dd_name_ex3 = Secure_Storage
+                        dd_data_ex3 = 0
+                        variants:
+                            - full:
+                                # Yes, 100 hours, this is not a mistake
+                                test_timeout = 360000
+                            - syscache_test:
+                                job_filter = syscache test
+                                test_timeout = 7200
+
+    - guest_s4:     install setup unattended_install.cdrom
+        type = guest_s4
+        check_s4_support_cmd = grep -q disk /sys/power/state
+        test_s4_cmd = "cd /tmp; nohup tcpdump -q -t ip host localhost"
+        check_s4_cmd = pgrep tcpdump
+        set_s4_cmd = echo disk > /sys/power/state
+        kill_test_s4_cmd = pkill tcpdump
+        services_up_timeout = 30
+        relogin_timeout = 240
+
+    - nic_hotplug:  install setup unattended_install.cdrom
+        type = pci_hotplug
+        pci_type = nic
+        reference_cmd = lspci
+        find_pci_cmd = 'lspci | tail -n1'
+        pci_test_cmd = 'nslookup www.redhat.com'
+        wait_secs_for_hook_up = 3
+        variants:
+            - nic_8139:
+                pci_model = rtl8139
+                match_string = "8139"
+            - nic_virtio:
+                pci_model = virtio
+                match_string = "Virtio network device"
+            - nic_e1000:
+                pci_model = e1000
+                match_string = "Gigabit Ethernet Controller"
+
+    - block_hotplug: install setup unattended_install.cdrom
+        type = pci_hotplug
+        pci_type = block
+        reference_cmd = lspci
+        find_pci_cmd = 'lspci | tail -n1'
+        images += " stg"
+        boot_drive_stg = no
+        image_name_stg = storage
+        image_size_stg = 1G
+        remove_image_stg = yes
+        force_create_image_stg = yes
+        pci_test_cmd = "yes | mke2fs `fdisk -l 2>&1 | awk '/\/dev\/[sv]d[a-z] doesn/ {print $2}'`"
+        wait_secs_for_hook_up = 3
+        kill_vm_on_error = yes
+        variants:
+            - block_virtio:
+                pci_model = virtio
+                match_string = "Virtio block device"
+            - block_scsi:
+                pci_model = scsi
+                match_string = "SCSI"
+        variants:
+            - fmt_qcow2:
+                image_format_stg = qcow2
+            - fmt_raw:
+                image_format_stg = raw
+
+    - vlan_tag:  install setup unattended_install.cdrom
+        type = vlan_tag
+        # subnet should not be used by host
+        subnet = 192.168.123
+        vlans = "10 20"
+        nic_mode = tap
+        vms += " vm2"
+        extra_params_vm1 += " -snapshot"
+        extra_params_vm2 += " -snapshot"
+        kill_vm_gracefully_vm2 = no
+        address_index_vm2 = 1
+
+    - physical_resources_check: install setup unattended_install.cdrom
+        type = physical_resources_check
+        catch_uuid_cmd = dmidecode | awk -F: '/UUID/ {print $2}'
+
+    - ksm_overcommit:
+        # Don't preprocess any vms as we need to change its params
+        vms = ''
+        image_snapshot = yes
+        kill_vm_gracefully = no
+        type = ksm_overcommit
+        # Make host use swap (a value of 'no' will turn off host swap)
+        ksm_swap = yes
+        no hugepages
+        # Overcommit of host memmory
+        ksm_overcommit_ratio = 3
+        # Max paralel runs machine
+        ksm_parallel_ratio = 4
+        # Host memory reserve (default - best fit for used mem)
+        # ksm_host_reserve = 512
+        # ksm_guest_reserve = 1024
+        variants:
+            - ksm_serial:
+                ksm_mode = "serial"
+            - ksm_parallel:
+                ksm_mode = "parallel"
+
+    - iofuzz:
+        type = iofuzz
+
+    - virtio_console:
+        vms = ''
+        type = virtio_console
+        # smoke params - $console_type:data_string
+        # FIXME: test_smoke doesn't work with console yet (virtio_console bug)
+        # "serialport;console:Custom data"
+        virtio_console_smoke = "serialport"
+        # loopback params - '$source_console_type@buffer_length:$destination_console_type1@buffer_length:...:$loopback_buffer_length;...'
+        virtio_console_loopback = "serialport:serialport;serialport@1024:serialport@32:console@1024:console@8:16"
+        # perf params - $console_type@buffer_length:$test_duration
+        # FIXME: test_perf doesn't work with console yet (virtio_console bug)
+        # virtio_console_perf = "serialport;serialport@1000000:120;console@1024:60"
+        virtio_console_perf = "serialport;serialport@1000000:120"
+
+    # This unit test module is for older branches of KVM that use the
+    # kvmctl test harness (such as the code shipped with RHEL 5.x)
+    - unit_test_kvmctl:
+        type = unit_test
+        vms = ''
+        profilers = ''
+        variants:
+            - access:
+                case = access
+            - apic:
+                case = apic
+            - emulator:
+                case = emulator
+            - hypercall:
+                case = hypercall
+            - msr:
+                case = msr
+            - port80:
+                case = port80
+            - realmode:
+                case = realmode
+            - sieve:
+                case = sieve
+            - smptest:
+                case = smptest
+            - tsc:
+                case = tsc
+            - stringio:
+                case = stringio
+            - vmexit:
+                case = vmexit
+
+    - ioquit:
+        type = ioquit
+        background_cmd = "for i in 1 2 3 4; do (nohup dd if=/dev/urandom of=/tmp/file bs=102400 count=10000000 &) done"
+        check_cmd = ps -a |grep dd
+        login_timeout = 360
+
+    - qemu_img:
+        type = qemu_img
+        vms = ''
+        profilers = ''
+        take_regular_screendumps = no
+        variants:
+            - check:
+                subcommand = check
+                image_name_dd = dd_created_image
+                force_create_image_dd = no
+                remove_image_dd = yes
+                create_image_cmd = "dd if=/dev/zero of=%s bs=1G count=1"
+                # Test the convertion from 'dd_image_name' to specified format
+                supported_image_formats = qcow2 raw
+            - create:
+                subcommand = create
+                images += " large"
+                force_create_image_large = yes
+                image_size_large = 1G
+                image_name_large = create_large_image
+                remove_image_large = yes
+            - convert:
+                subcommand = convert
+                variants:
+                    - to_qcow2:
+                        dest_image_format = qcow2
+                        compressed = no
+                        encrypted = no
+                    - to_raw:
+                        dest_image_format = raw
+            - snapshot:
+                subcommand = snapshot
+            - commit:
+                subcommand = commit
+            - info:
+                subcommand = info
+            - rebase:
+                subcommand = rebase
+                rebase_mode = unsafe
+                image_name_snapshot1 = sn1
+                image_name_snapshot2 = sn2
+
+    # system_powerdown, system_reset and shutdown *must* be the last ones
+    # defined (in this order), since the effect of such tests can leave
+    # the VM on a bad state.
+    - system_powerdown: install setup unattended_install.cdrom
+        type = shutdown
+        shutdown_method = system_powerdown
+        sleep_before_powerdown = 20
+        kill_vm = yes
+
+    - system_reset: install setup unattended_install.cdrom
+        type = boot
+        reboot_method = system_reset
+        sleep_before_reset = 20
+        kill_vm_on_error = yes
+
+    - shutdown:     install setup unattended_install.cdrom
+        type = shutdown
+        shutdown_method = shell
+        kill_vm = yes
+        kill_vm_gracefully = no
+    # Do not define test variants below shutdown
+
+
+# NICs
+variants:
+    - @rtl8139:
+        nic_model = rtl8139
+    - e1000:
+        nic_model = e1000
+    - virtio_net:
+        nic_model = virtio
+
+
+# Guests
+variants:
+    # Linux section
+    - @Linux:
+        no autoit iozone_windows whql
+        shutdown_command = shutdown -h now
+        reboot_command = shutdown -r now
+        status_test_command = echo $?
+        username = root
+        password = 123456
+        shell_client = ssh
+        shell_port = 22
+        file_transfer_client = scp
+        file_transfer_port = 22
+        mem_chk_cmd = dmidecode -t 17 | awk -F: '/Size/ {print $2}'
+        mem_chk_cur_cmd = grep MemTotal /proc/meminfo
+        cpu_chk_cmd = grep -c processor /proc/cpuinfo
+        unattended_install.cdrom:
+            # If you want to use floppy to hold kickstarts,
+            # comment the 3 lines below
+            cdroms += " unattended"
+            drive_index_unattended = 1
+            drive_index_cd1 = 2
+        timedrift:
+            extra_params += " -no-kvm-pit-reinjection"
+            time_command = date +'TIME: %a %m/%d/%Y %H:%M:%S.%N'
+            time_filter_re = "(?:TIME: \w\w\w )(.{19})(?:\.\d\d)"
+            time_format = "%m/%d/%Y %H:%M:%S"
+            guest_load_command = "dd if=/dev/urandom of=/dev/null"
+            guest_load_instances = 2
+            guest_load_stop_command = "killall -9 dd"
+            host_load_command = "bzip2 -c --best /dev/urandom > /dev/null"
+            host_load_instances = 8
+            ntp:
+                time_command = "ntpdate -d -q ns1.nay.redhat.com"
+                time_filter_re = "originate timestamp:.*, (.\w+\s+\d+\s+\d+\s+\d+:\d+:\d+)\.(.\d+)"
+                time_format = "%b %d %Y %H:%M:%S"
+            date:
+                time_command = date +'TIME: %a %m/%d/%Y %H:%M:%S.%N'
+                time_filter_re = "(?:TIME: \w\w\w )(.{19})(?:\.\d\d)"
+                time_format = "%m/%d/%Y %H:%M:%S"
+
+        variants:
+            - Fedora:
+                no setup
+                shell_prompt = "^\[.*\][\#\$]\s*$"
+                unattended_install.cdrom:
+                    pxe_dir = "images/pxeboot"
+                    pxe_image = "vmlinuz"
+                    pxe_initrd = "initrd.img"
+                    tftp = "images/tftpboot"
+                    bootp = "/pxelinux.0"
+                    extra_params += " -boot cn"
+                    # You have to use ks=floppy if you want to use floppies to
+                    # hold your kickstart file
+                    #kernel_args = "ks=floppy nicdelay=60 console=ttyS0,115200 console=tty0"
+                    kernel_args = "ks=cdrom nicdelay=60 console=ttyS0,115200 console=tty0"
+
+                variants:
+                    - 8.32:
+                        no setup
+                        image_name = fc8-32
+                        cdrom_cd1 = linux/Fedora-8-i386-DVD.iso
+                        md5sum = dd6c79fddfff36d409d02242e7b10189
+                        md5sum_1m = dabae451bb69fbbad0e505b25144b1f9
+                        install:
+                            steps = Fedora-8-i386.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-8.ks
+                            tftp = images/f8-32/tftpboot
+                            #floppy = images/f8-32/ks.vfd
+                            cdrom_unattended = images/f8-32/ks.iso
+
+                    - 8.64:
+                        no setup
+                        image_name = f8-64
+                        cdrom_cd1 = linux/Fedora-8-x86_64-DVD.iso
+                        md5sum = 2cb231a86709dec413425fd2f8bf5295
+                        md5sum_1m = 145f6414e19492649a56c89f0a45e719
+                        install:
+                            steps = Fedora-8-64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-8.ks
+                            tftp = images/f8-64/tftpboot
+                            #floppy = images/f8-64/ks.vfd
+                            cdrom_unattended = images/f8-64/ks.iso
+
+                    - 9.32:
+                        image_name = f9-32
+                        cdrom_cd1 = linux/Fedora-9-i386-DVD.iso
+                        md5sum = 72601f685ea8c808c303353d8bf4d307
+                        md5sum_1m = f24fa25689e5863f1b99984c6feb787f
+                        install:
+                            steps = Fedora-9-i386.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-9.ks
+                            tftp = images/f9-32/tftpboot
+                            #floppy = images/f9-32/ks.vfd
+                            cdrom_unattended = images/f9-32/ks.iso
+
+                    - 9.64:
+                        image_name = f9-64
+                        cdrom_cd1 = linux/Fedora-9-x86_64-DVD.iso
+                        md5sum = 05b2ebeed273ec54d6f9ed3d61ea4c96
+                        md5sum_1m = 9822ab5097e37e8fe306ef2192727db4
+                        install:
+                            steps = Fedora-9-64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-9.ks
+                            tftp = images/f9-64/tftpboot
+                            #floppy = images/f9-64/ks.vfd
+                            cdrom_unattended = images/f9-64/ks.iso
+
+                    - 10.32:
+                        image_name = f10-32
+                        cdrom_cd1 = linux/Fedora-10-i386-DVD.iso
+                        md5sum = 27e581edb392728c4a07d00d3fc5ced0
+                        md5sum_1m = bd67c68bdf595e4ba7131ec702159181
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-10.ks
+                            tftp = images/f10-32/tftpboot
+                            #floppy = images/f10-32/ks.vfd
+                            cdrom_unattended = images/f10-32/ks.iso
+
+                    - 10.64:
+                        image_name = f10-64
+                        cdrom_cd1 = linux/Fedora-10-x86_64-DVD.iso
+                        sha1sum = f1e5ae7db6a1ba227de7294c4112385922388648
+                        md5sum_1m = 732857cbf40c80c34683e874601d982c
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-10.ks
+                            tftp = images/f10-64/tftpboot
+                            #floppy = images/f10-64/ks.vfd
+                            cdrom_unattended = images/f10-64/ks.iso
+
+                    - 11.32:
+                        image_name = f11-32
+                        cdrom_cd1 = linux/Fedora-11-i386-DVD.iso
+                        md5sum = e3b1e2d1ba42aa4705fa5f41771b3927
+                        md5sum_1m = dc8ddf90648c247339c721395aa49714
+                        install:
+                            steps = Fedora-11-32.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-11.ks
+                            tftp = images/f11-32/tftpboot
+                            #floppy = images/f11-32/ks.vfd
+                            cdrom_unattended = images/f11-32/ks.iso
+
+                    - 11.64:
+                        image_name = f11-64
+                        cdrom_cd1 = linux/Fedora-11-x86_64-DVD.iso
+                        md5sum = 9d419844adeb93120215fe7505c9bce8
+                        md5sum_1m = 405ee05e2387a2e4328b008d5bcbdd1e
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-11.ks
+                            tftp = images/f11-64/tftpboot
+                            #floppy = images/f11-64/ks.vfd
+                            cdrom_unattended = images/f11-64/ks.iso
+
+                    - 12.32:
+                        image_name = f12-32
+                        cdrom_cd1 = linux/Fedora-12-i386-DVD.iso
+                        md5sum = 2c4c1c0d09f2fbcfd8ee6a0c5542eeb2
+                        md5sum_1m = eee935d7f0cf2ef03f6ddce3a2a50050
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-12.ks
+                            tftp = images/f12-32/tftpboot
+                            #floppy = images/f12-32/ks.vfd
+                            cdrom_unattended = images/f12-32/ks.iso
+
+                    - 12.64:
+                        image_name = f12-64
+                        cdrom_cd1 = linux/Fedora-12-x86_64-DVD.iso
+                        md5sum = 6dd31e292cc2eb1140544e9b1ba61c56
+                        md5sum_1m = 514efbd7698b55ff6768c8605438bfc5
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-12.ks
+                            tftp = images/f12-64/tftpboot
+                            #floppy = images/f12-64/ks.vfd
+                            cdrom_unattended = images/f12-64/ks.iso
+
+                    - 13.32:
+                        image_name = f13-32
+                        cdrom_cd1 = linux/Fedora-13-i386-DVD.iso
+                        md5sum = 212fec517c2629b4b5eaf3662ac13136
+                        md5sum_1m = 4e1578a6ed5a6e7cd03b8fb074030746
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-13.ks
+                            tftp = images/f13-32/tftpboot
+                            #floppy = images/f13-32/ks.vfd
+                            cdrom_unattended = images/f13-32/ks.iso
+
+                    - 13.64:
+                        image_name = f13-64
+                        cdrom_cd1 = linux/Fedora-13-x86_64-DVD.iso
+                        md5sum = 6fbae6379cf27f36e1f2c7827ba7dc35
+                        md5sum_1m = 68821b9de4d3b5975d6634334e7f47a6
+                        unattended_install.cdrom:
+                            unattended_file = unattended/Fedora-13.ks
+                            tftp = images/f13-64/tftpboot
+                            #floppy = images/f13-64/ks.vfd
+                            cdrom_unattended = images/f13-64/ks.iso
+
+
+            - DSL-4.2.5:
+                no setup dbench bonnie linux_s3
+                image_name = dsl-4.2.5
+                install:
+                    steps = DSL-4.2.5.steps
+                    cdrom_cd1 = linux/dsl-4.2.5.iso
+                    md5sum = 61694888aede3e01229865b8e6acd4a1
+                    md5sum_1m = 527f2481bd25310f2e3a6e5345ff3d12
+
+            - Mandriva-One-2007:
+                only install
+                image_name = mandriva-one-2007
+                steps = Mandriva-One-2007-32.steps
+                cdrom_cd1 = linux/mandriva-one-2007-i386.iso
+                md5sum = 7e9e183dc11b9d39f480238e4e12bb05
+                md5sum_1m = dc7865a75db665efc86d59bca7c1fe07
+
+            - OpenSUSE:
+                no setup
+                shell_prompt = ".*:.*\s#"
+                unattended_install.cdrom:
+                    pxe_image = "linux"
+                    pxe_initrd = "initrd"
+                    tftp = "images/tftpboot"
+                    bootp = "/pxelinux.0"
+                    extra_params += " -boot cn"
+                    # You have to use autoyast=floppy if you want to use floppies to
+                    # hold your autoyast file
+                    #kernel_args = "autoyast=floppy console=ttyS0,115200 console=tty0"
+                    kernel_args = "autoyast=cdrom console=ttyS0,115200 console=tty0"
+                    post_install_delay = 10
+
+                variants:
+                    - 11.0.32:
+                        image_name = openSUSE-11.0-32
+                        cdrom_cd1 = linux/openSUSE-11.0-DVD-i386.iso
+                        md5sum = ed6a5b3feb668866df812b1c2aed9d7f
+                        md5sum_1m = c720b30557af758e69de450409516369
+                        install:
+                            steps = openSUSE-11.0-32.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-0-32/tftpboot
+                            floppy = images/opensuse-11-0-32/floppy.img
+                            pxe_dir = boot/i386/loader
+
+                    - 11.0.64:
+                        image_name = openSUSE-11.0-64
+                        cdrom_cd1 = linux/openSUSE-11.0-DVD-x86_64.iso
+                        md5sum = 512c8346b0f8eb35f28c4eb96454d391
+                        md5sum_1m = 661aa4cd031df2f25ea0102318a3f4d1
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-0-64/tftpboot
+                            #floppy = images/opensuse-11-0-64/autoyast.vfd
+                            cdrom_unattended = images/opensuse-11-0-64/autoyast.iso
+                            pxe_dir = boot/x86_64/loader
+
+                    - 11.1.32:
+                        image_name = openSUSE-11.1-32
+                        cdrom_cd1 = linux/openSUSE-11.1-DVD-i586.iso
+                        md5sum = 8f51b278c0415be28c5699e465444bd3
+                        md5sum_1m = b70217417468389083429f81ba7ce2bd
+                        install:
+                            steps=openSUSE-11.1-32-and-64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-1-32/tftpboot
+                            #floppy = images/opensuse-11-1-32/autoyast.vfd
+                            cdrom_unattended = images/opensuse-11-1-32/autoyast.iso
+                            pxe_dir = boot/i386/loader
+
+                    - 11.1.64:
+                        image_name = openSUSE-11.1-64
+                        cdrom_cd1 = linux/openSUSE-11.1-DVD-x86_64.iso
+                        md5sum = 2afee1b8a87175e6dee2b8dbbd1ad8e8
+                        md5sum_1m = 768ca32503ef92c28f2d144f2a87e4d0
+                        install:
+                            steps=openSUSE-11.1-32-and-64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-1-64/tftpboot
+                            #floppy = images/opensuse-11-1-64/autoyast.vfd
+                            cdrom_unattended = images/opensuse-11-1-64/autoyast.iso
+                            pxe_dir = boot/x86_64/loader
+
+                    - 11.2.32:
+                        image_name = openSUSE-11.2-32
+                        cdrom_cd1 = linux/openSUSE-11.2-DVD-i586.iso
+                        md5sum = 295d713314a30ad017948f0d542c6d92
+                        md5sum_1m = 1f8767d00acb492be5a5627c834e543f
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-2-32/tftpboot
+                            #floppy = images/opensuse-11-2-32/autoyast.vfd
+                            cdrom_unattended = images/opensuse-11-2-32/autoyast.iso
+                            pxe_dir = boot/i386/loader
+
+                    - 11.2.64:
+                        image_name = openSUSE-11.2-64
+                        cdrom_cd1 = linux/openSUSE-11.2-DVD-x86_64.iso
+                        md5sum = 6a09295e34dc030319d040f67f4742c6
+                        md5sum_1m = 11fd11d39744450b898f04c371dde2e7
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-2-64/tftpboot
+                            #floppy = images/opensuse11-2-64/autoyast.vfd
+                            cdrom_unattended = images/opensuse11-2-64/autoyast.iso
+                            pxe_dir = boot/x86_64/loader
+
+                    - 11.3.32:
+                        image_name = openSUSE-11.3-32
+                        cdrom_cd1 = linux/openSUSE-11.3-DVD-i586.iso
+                        md5sum = 1a1da28c84e3cdad750d5cfa21c4fd17
+                        md5sum_1m = 4dd26906ce6cb3946519cb0b0de4b0f8
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-3-32/tftpboot
+                            #floppy = images/opensuse-11-3-32/autoyast.vfd
+                            cdrom_unattended = images/opensuse-11-3-32/autoyast.iso
+                            pxe_dir = boot/i386/loader
+
+                    - 11.3.64:
+                        image_name = openSUSE-11.3-64
+                        cdrom_cd1 = linux/openSUSE-11.3-DVD-x86_64.iso
+                        md5sum = adf5d2a0a03c1e3aaf102fd6a4771b87
+                        md5sum_1m = e0dd12dac30d296417256775e1234c6e
+                        unattended_install.cdrom:
+                            unattended_file = unattended/OpenSUSE-11.xml
+                            tftp = images/opensuse-11-3-64/tftpboot
+                            #floppy = images/opensuse-11-3-64/autoyast.vfd
+                            cdrom_unattended = images/opensuse-11-3-64/autoyast.iso
+                            pxe_dir = boot/x86_64/loader
+
+            - SLES:
+                shell_prompt = "^root@.*[\#\$]\s*$|#"
+                unattended_install.cdrom:
+                    pxe_image = "linux"
+                    pxe_initrd = "initrd"
+                    bootp = "/pxelinux.0"
+                    extra_params += " -boot cn"
+                    # You have to use autoyast=floppy if you want to use floppies to
+                    # hold your autoyast file
+                    #kernel_args = "autoyast=floppy console=ttyS0,115200 console=tty0"
+                    kernel_args = "autoyast=cdrom console=ttyS0,115200 console=tty0"
+                    post_install_delay = 10
+
+                variants:
+                    - 11.0.32:
+                        image_name = sles11-32
+                        cdrom_cd1 = linux/SLES-11-DVD-i586-GM-DVD1.iso
+                        md5sum = 4958d4dde2575666355c8a1c5858bab0
+                        md5sum_1m = 1f19d4eff5bcead2a3e5b8b4212b6796
+                        unattended_install.cdrom:
+                            unattended_file = unattended/SLES-11.xml
+                            tftp = images/sles-11-0-32/tftpboot
+                            #floppy = images/sles-11-0-32/autoyast.vfd
+                            cdrom_unattended = images/sles-11-0-32/autoyast.iso
+                            pxe_dir = boot/i386/loader
+
+                    - 11.0.64:
+                        image_name = sles11-64
+                        cdrom_cd1 = linux/SLES-11-DVD-x86_64-GM-DVD1.iso
+                        md5sum = 50a2bd45cd12c3808c3ee48208e2586b
+                        md5sum_1m = 00000951cab7c32e332362fc424c1054
+                        unattended_install.cdrom:
+                            unattended_file = unattended/SLES-11.xml
+                            tftp = images/sles-11-0-64/tftpboot
+                            #floppy = images/sles-11-0-64/autoyast.vfd
+                            cdrom_unattended = images/sles-11-0-64/autoyast.iso
+                            pxe_dir = boot/x86_64/loader
+
+                    - 11.1.32:
+                        image_name = sles11sp1-32
+                        cdrom_cd1 = linux/SLES-11-SP1-DVD-i586-GM-DVD1.iso
+                        md5sum = 0dd6886858d93501c38854552b9b1b0d
+                        md5sum_1m = a626a3d50813410e3ac42794e05773bb
+                        unattended_install:
+                            unattended_file = unattended/SLES-11.xml
+                            tftp = images/sles-11-1-32/tftpboot
+                            #floppy = images/sles-11-1-32/autoyast.vfd
+                            cdrom_unattended = images/sles-11-1-32/autoyast.iso
+                            pxe_dir = boot/i386/loader
+
+                    - 11.1.64:
+                        image_name = sles11sp1-64
+                        cdrom_cd1 = linux/SLES-11-SP1-DVD-x86_64-GM-DVD1.iso
+                        md5sum = d2e10420f3689faa49a004b60fb396b7
+                        md5sum_1m = f7f67b5da46923a9f01da8a2b6909654
+                        unattended_install:
+                            unattended_file = unattended/SLES-11.xml
+                            tftp = images/sles-11-1-64/tftpboot
+                            #floppy = images/sles-11-1-64/autoyast.vfd
+                            cdrom_unattended = images/sles-11-1-64/autoyast.iso
+                            pxe_dir = boot/x86_64/loader
+
+            - @Ubuntu:
+                shell_prompt = "^root@.*[\#\$]\s*$"
+
+                variants:
+                    - Ubuntu-6.10-32:
+                        only install
+                        image_name = ubuntu-6.10-32
+                        steps = Ubuntu-6.10-32.steps
+                        cdrom_cd1 = linux/ubuntu-6.10-desktop-i386.iso
+                        md5sum = 17fb825641571ce5888a718329efd016
+                        md5sum_1m = 7531d0a84e7451d17c5d976f1c3f8509
+
+                    - Ubuntu-8.04-32:
+                        skip = yes
+                        image_name = ubuntu-8.04-32
+                        install:
+                            steps = Ubuntu-8.04-32.steps
+                            cdrom_cd1 = linux/ubuntu-8.04.1-desktop-i386.iso
+                        setup:
+                            steps = Ubuntu-8.04-32-setupssh.steps
+
+                    - Ubuntu-8.10-server-32:
+                        image_name = ubuntu-8.10-server-32
+                        install:
+                            steps = Ubuntu-8.10-server-32.steps
+                            cdrom_cd1 = linux/ubuntu-8.10-server-i386.iso
+                            md5sum = a2ec9975a91e1228c8292ed9799dc302
+                            md5sum_1m = ea493eb8ef7722ead693492fd9f8a13f
+                        setup:
+                            steps = Ubuntu-8.10-server-32-gcc.steps
+
+            - RHEL:
+                no setup
+                shell_prompt = "^\[.*\][\#\$]\s*$"
+                nic_hotplug:
+                    modprobe_module = acpiphp
+                block_hotplug:
+                    modprobe_module = acpiphp
+                unattended_install.cdrom:
+                    pxe_dir = "images/pxeboot"
+                    pxe_image = "vmlinuz"
+                    pxe_initrd = "initrd.img"
+                    tftp = "images/tftpboot"
+                    bootp = "/pxelinux.0"
+                    extra_params += " -boot cn"
+                    # You have to use ks=floppy if you want to use floppies to
+                    # hold your kickstart file
+                    #kernel_args = "ks=floppy nicdelay=60 console=ttyS0,115200 console=tty0"
+                    kernel_args = "ks=cdrom nicdelay=60 console=ttyS0,115200 console=tty0"
+
+                variants:
+                    - 3.9.i386:
+                        no setup autotest linux_s3 guest_s4 shutdown
+                        image_name = rhel3-32
+                        mem_chk_cmd = dmidecode | awk -F: '/Maximum Capacity/ {print $2}'
+                        cdrom_cd1 = linux/RHEL-3.9-i386-DVD.iso
+                        md5sum = ddd11a1cb104119039b0fa05df6d52b8
+                        md5sum_1m = 5f10c9417c7b8372b3456c1b5f3f9ed0
+                        install:
+                            steps=RHEL-3.9-i386.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-3-series.ks
+                            tftp = images/rhel39-32/tftpboot
+                            #floppy = images/rhel39-32/ks.vfd
+                            cdrom_unattended = images/rhel39-32/ks.iso
+
+                    - 3.9.x86_64:
+                        no setup autotest linux_s3 guest_s4 shutdown
+                        image_name = rhel3-64
+                        mem_chk_cmd = dmidecode | awk -F: '/Maximum Capacity/ {print $2}'
+                        cdrom_cd1 = linux/RHEL-3.9-x86_64-DVD.iso
+                        md5sum = bf4635e4a4bd3b43838e72bc8c329d55
+                        md5sum_1m = 18ecd37b639109f1b2af05cfb57dfeaf
+                        install:
+                            steps=RHEL-3.9-x86_64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-3-series.ks
+                            tftp = images/rhel39-64/tftpboot
+                            #floppy = images/rhel39-64/ks.vfd
+                            cdrom_unattended = images/rhel39-64/ks.iso
+
+                    - 4.7.i386:
+                        no setup autotest
+                        image_name = rhel4-32
+                        cdrom_cd1 = linux/RHEL-4.7-i386-DVD.iso
+                        md5sum = ee5092653732a88ddbaf8eef2484c500
+                        md5sum_1m = 127081cbed825d7232331a2083975528
+                        install:
+                            steps = RHEL-4.7-i386.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-4-series.ks
+                            tftp = images/rhel47-32/tftpboot
+                            #floppy = images/rhel47-32/ks.vfd
+                            cdrom_unattended = images/rhel47-32/ks.iso
+
+                    - 4.7.x86_64:
+                        no setup autotest
+                        image_name = rhel4-64
+                        cdrom_cd1 = linux/RHEL-4.7-x86_64-DVD.iso
+                        md5sum = ea9dae16dd86f7d94092d0e672333292
+                        md5sum_1m = 58fa63eaee68e269f4cb1d2edf479792
+                        install:
+                            steps = RHEL-4.7-x86_64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-4-series.ks
+                            tftp = images/rhel47-64/tftpboot
+                            #floppy = images/rhel47-64/ks.vfd
+                            cdrom_unattended = images/rhel47-64/ks.iso
+
+                    - 4.8.i386:
+                        no setup autotest
+                        image_name = rhel4-32
+                        cdrom_cd1 = linux/RHEL-4.8-i386-DVD.iso
+                        md5sum = b024f0af5079539d3ef51f71fed0b194
+                        md5sum_1m = 969c197402b9058f28a278c1f807d15b
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-4-series.ks
+                            tftp = images/rhel48-32/tftpboot
+                            #floppy = images/rhel48-32/ks.vfd
+                            cdrom_unattended = images/rhel48-32/ks.iso
+
+                    - 4.8.x86_64:
+                        no setup autotest
+                        image_name = rhel4-64
+                        cdrom_cd1 = linux/RHEL-4.8-x86_64-DVD.iso
+                        md5sum = 696bc877b0200cc942626673fcc3fc09
+                        md5sum_1m = b11ac0ef7fd345ad712966972db63886
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-4-series.ks
+                            tftp = images/rhel48-64/tftpboot
+                            #floppy = images/rhel48-64/ks.vfd
+                            cdrom_unattended = images/rhel48-64/ks.iso
+
+                    - 5.3.i386:
+                        no setup
+                        image_name = rhel5-32
+                        cdrom_cd1 = linux/RHEL-5.3-i386-DVD.iso
+                        md5sum = 371c62851611fd32ead440df6f24a296
+                        md5sum_1m = 242318dd44152210f6ff6cdda1bfbf51
+                        install:
+                            steps = RHEL-5.3-i386.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-5-series.ks
+                            tftp = images/rhel53-32/tftpboot
+                            #floppy = images/rhel53-32/ks.vfd
+                            cdrom_unattended = images/rhel53-32/ks.iso
+
+                    - 5.3.x86_64:
+                        no setup
+                        image_name = rhel5-64
+                        cdrom_cd1 = linux/RHEL-5.3-x86_64-DVD.iso
+                        md5sum = c5ed6b284410f4d8212cafc78fd7a8c5
+                        md5sum_1m = b999f437583098ea5bbd56fb1de1d011
+                        install:
+                            steps=RHEL-5.3-x86_64.steps
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-5-series.ks
+                            tftp = images/rhel53-64/tftpboot
+                            #floppy = images/rhel53-64/ks.vfd
+                            cdrom_unattended = images/rhel53-64/ks.iso
+
+                    - 5.4.i386:
+                        no setup
+                        image_name = rhel5-32
+                        cdrom_cd1 = linux/RHEL-5.4-i386-DVD.iso
+                        md5sum = 7a12ec6599527e4f3d1790b51eadbfed
+                        md5sum_1m = 0dbeb8f58d213752d8c029e8601abfbb
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-5-series.ks
+                            tftp = images/rhel54-32/tftpboot
+                            #floppy = images/rhel54-32/ks.vfd
+                            cdrom_unattended = images/rhel54-32/ks.iso
+
+                    - 5.4.x86_64:
+                        no setup
+                        image_name = rhel5-64
+                        cdrom_cd1 = linux/RHEL-5.4-x86_64-DVD.iso
+                        md5sum = 04fe3c10202402d7b389528d2bad0210
+                        md5sum_1m = 3e74112003e88a966754849dbb8f5c3f
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-5-series.ks
+                            tftp = images/rhel54-64/tftpboot
+                            #floppy = images/rhel54-64/ks.vfd
+                            cdrom_unattended = images/rhel54-64/ks.iso
+
+                    - 5.5.i386:
+                        no setup
+                        image_name = rhel5-32
+                        cdrom_cd1 = linux/RHEL-5.5-i386-DVD.iso
+                        md5sum = 148858b157f275d9153797efddfc83c3
+                        md5sum_1m = 2502cc7ddb9d0684fe08c4a83d247902
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-5-series.ks
+                            tftp = images/rhel55-32/tftpboot
+                            #floppy = images/rhel55-32/ks.vfd
+                            cdrom_unattended = images/rhel55-32/ks.iso
+
+                    - 5.5.x86_64:
+                        no setup
+                        image_name = rhel5-64
+                        cdrom_cd1 = linux/RHEL-5.5-x86_64-DVD.iso
+                        md5sum = f3119f883257ef9041234feda2f1cad0
+                        md5sum_1m = a744084a03f6a08627f71527fc107a1e
+                        unattended_install.cdrom:
+                            unattended_file = unattended/RHEL-5-series.ks
+                            tftp = images/rhel55-64/tftpboot
+                            #floppy = images/rhel55-64/ks.vfd
+                            cdrom_unattended = images/rhel55-64/ks.iso
+
+
+    # Windows section
+    - @Windows:
+        no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks)
+        shutdown_command = shutdown /s /f /t 0
+        reboot_command = shutdown /r /f /t 0
+        status_test_command = echo %errorlevel%
+        shell_prompt = "^\w:\\.*>\s*$"
+        username = Administrator
+        password = 123456
+        shell_linesep = "\r\n"
+        shell_client = nc
+        shell_port = 10022
+        file_transfer_client = rss
+        file_transfer_port = 10023
+        redirs += " file_transfer"
+        guest_port_remote_shell = 10022
+        guest_port_file_transfer = 10023
+
+        # This ISO will be used for all tests except install:
+        cdrom_cd1 = windows/winutils.iso
+
+        cpu_chk_cmd = echo %NUMBER_OF_PROCESSORS%
+        mem_chk_cmd = wmic memphysical
+        mem_chk_cur_cmd = wmic memphysical
+
+        unattended_install.cdrom:
+            timeout = 7200
+            finish_program = deps/finish.exe
+            cdroms += " winutils"
+            cdrom_winutils = windows/winutils.iso
+            drive_index_winutils = 2
+            # Turn install_virtio = yes if you want to install the
+            # Windows virtio drivers. It might be a lot of setup though :)
+            #install_virtio = no
+            #cdroms += " virtio"
+            #cdrom_virtio = windows/virtio-win.iso
+            #drive_index_virtio = 3
+            #virtio_floppy = /usr/share/virtio-win/virtio-drivers.vfd
+        migrate:
+            migration_test_command = ver && vol
+            migration_bg_command = start ping -t localhost
+            migration_bg_check_command = tasklist | find /I "ping.exe"
+            migration_bg_kill_command = taskkill /IM ping.exe /F
+        stress_boot:
+            alive_test_cmd = systeminfo
+        timedrift:
+            # Timedrift compensation on Windows with hpet does not happen
+            disable_hpet = yes
+            extra_params += " -rtc-td-hack"
+            time_command = "echo TIME: %date% %time%"
+            time_filter_re = "(?<=TIME: \w\w\w ).{19}(?=\.\d\d)"
+            time_format = "%m/%d/%Y %H:%M:%S"
+            # For this to work, the cdrom at d: should contain vlc (d:\vlc\vlc.exe) and a video (d:\ED_1024.avi)
+            guest_load_command = 'cmd /c "d:\vlc\vlc -f --loop --no-qt-privacy-ask --no-qt-system-tray d:\ED_1024.avi"'
+            # Alternative guest load:
+            #guest_load_command = "(dir /s && dir /s && dir /s && dir /s) > nul"
+            guest_load_stop_command = "taskkill /F /IM vlc.exe"
+            guest_load_instances = 2
+            host_load_command = "bzip2 -c --best /dev/urandom > /dev/null"
+            # Alternative host load:
+            #host_load_command = "dd if=/dev/urandom of=/dev/null"
+            host_load_instances = 8
+            ntp:
+                time_command = "w32tm /stripchart /samples:1 /computer:ns1.nay.redhat.com"
+                time_filter_re = "\d+/\d+/\d+\s\d+:\d+:\d+ [AP]M"
+                time_format = "%m/%d/%Y %H:%M:%S"
+            date:
+                time_command = "echo TIME: %date% %time%"
+                time_filter_re = "(?<=TIME: \w\w\w ).{19}(?=\.\d\d)"
+                time_format = "%m/%d/%Y %H:%M:%S"
+
+        guest_s4:
+            check_s4_support_cmd = powercfg /hibernate on
+            test_s4_cmd = start ping -t localhost
+            check_s4_cmd = tasklist | find /I "ping.exe"
+            set_s4_cmd = rundll32.exe PowrProf.dll, SetSuspendState
+            kill_test_s4_cmd = taskkill /IM ping.exe /F
+            services_up_timeout = 30
+        nic_hotplug:
+            reference_cmd = ipconfig /all
+            find_pci_cmd = ipconfig /all | find "Description"
+            wait_secs_for_hook_up = 10
+            nic_e1000:
+                match_string = "Intel(R) PRO/1000 MT Network Connection"
+            nic_virtio:
+                match_string = "VirtIO Ethernet"
+        block_hotplug:
+            wait_secs_for_hook_up = 10
+            reference_cmd = wmic diskdrive list brief
+            find_pci_cmd = wmic diskdrive list brief
+            pci_test_cmd = echo select disk 1 > dt && echo online >> dt && echo detail disk >> dt && echo exit >> dt && diskpart /s dt
+        physical_resources_check:
+            catch_uuid_cmd = 
+
+        variants:
+            - Win2000:
+                no reboot whql
+                image_name = win2000-32
+                kill_vm_gracefully = no
+                install:
+                    steps = Win2000-32.steps
+                    cdrom_cd1 = windows/Windows2000_sp4.iso
+                    md5sum = dda6039f3a9173f0f6bfae40f5efdfea
+                    md5sum_1m = dd28fba196d366d56fe774bd93df5527
+                    user = user
+                setup:
+                    steps = Win2000-32-rss.steps
+                unattended_install.cdrom:
+                    cdrom_cd1 = windows/Windows2000_sp4.iso
+                    md5sum = dda6039f3a9173f0f6bfae40f5efdfea
+                    md5sum_1m = dd28fba196d366d56fe774bd93df5527
+                    unattended_file = unattended/win2000-32.sif
+                    floppy = images/win2000-32/answer.vfd
+
+            - WinXP:
+                image_name = winXP
+                variants:
+                    - 32:
+                        image_name += -32
+                        install:
+                            cdrom_cd1 = windows/WindowsXP-sp2-vlk.iso
+                            md5sum = 743450644b1d9fe97b3cf379e22dceb0
+                            md5sum_1m = b473bf75af2d1269fec8958cf0202bfd
+                            user = user
+                            steps = WinXP-32.steps
+                        setup:
+                            steps = WinXP-32-rss.steps
+                        unattended_install.cdrom:
+                            cdrom_cd1 = windows/WindowsXP-sp2-vlk.iso
+                            md5sum = 743450644b1d9fe97b3cf379e22dceb0
+                            md5sum_1m = b473bf75af2d1269fec8958cf0202bfd
+                            unattended_file = unattended/winxp32.sif
+                            floppy = images/winXP-32/answer.vfd
+                            # Uncomment virtio_network_installer_path line if
+                            # you have an msi installer, also make sure the
+                            # paths are properly set in your virtio driver iso.
+                            virtio_oemsetup_id = WXP32
+                            virtio_network_path = 'F:\NetKVM\xp\x86'
+                            #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+                        whql_submission:
+                            desc_path_desc1 = $\WDK\Logo Type\Device Logo\Windows XP
+                            desc_path_desc2 = $\WDK\Logo Type\Systems Logo\Windows XP
+                            dd_data_logoarch = X86
+                            dd_data_logoos = Windows XP
+                            dd_data_whqlos = Windows XP
+                            dd_data_whqlqual = Basic
+
+                    - 64:
+                        image_name += -64
+                        install:
+                            cdrom_cd1 = windows/WindowsXP-64.iso
+                            md5sum = 8d3f007ec9c2060cec8a50ee7d7dc512
+                            md5sum_1m = e812363ff427effc512b7801ee70e513
+                            user = user
+                            steps = WinXP-64.steps
+                        setup:
+                            steps = WinXP-64-rss.steps
+                        unattended_install.cdrom:
+                            cdrom_cd1 = windows/WindowsXP-64.iso
+                            md5sum = 8d3f007ec9c2060cec8a50ee7d7dc512
+                            md5sum_1m = e812363ff427effc512b7801ee70e513
+                            unattended_file = unattended/winxp64.sif
+                            floppy = images/winXP-64/answer.vfd
+                            # Uncomment virtio_network_installer_path line if
+                            # you have an msi installer, also make sure the
+                            # paths are properly set in your virtio driver iso.
+                            virtio_oemsetup_id = WNET64
+                            virtio_network_path = 'F:\NetKVM\xp\amd64'
+                            #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+                        whql_submission:
+                            desc_path_desc1 = $\WDK\Logo Type\Device Logo\Windows XP
+                            desc_path_desc2 = $\WDK\Logo Type\Systems Logo\Windows XP
+                            dd_data_logoarch = AMD64
+                            dd_data_logoos = Windows XP 64-Bit Edition Version 2003
+                            dd_data_whqlos = Windows XP x64
+                            dd_data_whqlqual = Basic
+
+            - Win2003:
+                image_name = win2003
+                image_size = 20G
+
+                variants:
+                    - 32:
+                        image_name += -32
+                        install:
+                            cdrom_cd1 = windows/Windows2003_r2_VLK.iso
+                            md5sum = 03e921e9b4214773c21a39f5c3f42ef7
+                            md5sum_1m = 37c2fdec15ac4ec16aa10fdfdb338aa3
+                            user = user
+                            steps = Win2003-32.steps
+                        setup:
+                            steps = Win2003-32-rss.steps
+                        unattended_install.cdrom:
+                            cdrom_cd1 = windows/Windows2003_r2_VLK.iso
+                            md5sum = 03e921e9b4214773c21a39f5c3f42ef7
+                            md5sum_1m = 37c2fdec15ac4ec16aa10fdfdb338aa3
+                            unattended_file = unattended/win2003-32.sif
+                            floppy = images/win2003-32/answer.vfd
+                            # Uncomment virtio_network_installer_path line if
+                            # you have an msi installer, also make sure the
+                            # paths are properly set in your virtio driver iso.
+                            virtio_oemsetup_id = WNET32
+                            virtio_network_path = 'F:\NetKVM\2k3\x86'
+                            #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+                        whql_submission:
+                            desc_path_desc1 = $\WDK\Logo Type\Device Logo\Windows Server 2003
+                            dd_data_logoarch = X86
+                            dd_data_logoos = Windows Server 2003
+                            dd_data_whqlos = Windows Server 2003
+                            dd_data_whqlqual = Basic
+
+                    - 64:
+                        image_name += -64
+                        install:
+                            cdrom_cd1 = windows/Windows2003-x64.iso
+                            md5sum = 5703f87c9fd77d28c05ffadd3354dbbd
+                            md5sum_1m = 439393c384116aa09e08a0ad047dcea8
+                            user = user
+                            steps = Win2003-64.steps
+                        setup:
+                            steps = Win2003-64-rss.steps
+                        unattended_install.cdrom:
+                            cdrom_cd1 = windows/Windows2003-x64.iso
+                            md5sum = 5703f87c9fd77d28c05ffadd3354dbbd
+                            md5sum_1m = 439393c384116aa09e08a0ad047dcea8
+                            unattended_file = unattended/win2003-64.sif
+                            floppy = images/win2003-64/answer.vfd
+                            # Uncomment virtio_network_installer_path line if
+                            # you have an msi installer, also make sure the
+                            # paths are properly set in your virtio driver iso.
+                            virtio_oemsetup_id = WNET64
+                            virtio_network_path = 'F:\NetKVM\2k3\amd64'
+                            #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+
+                        whql_submission:
+                            desc_path_desc1 = $\WDK\Logo Type\Device Logo\Windows Server 2003
+                            dd_data_logoarch = AMD64
+                            dd_data_logoos = Windows Server 2003
+                            dd_data_whqlos = Windows Server 2003 x64
+                            dd_data_whqlqual = Basic
+
+            - WinVista:
+                image_name = winvista
+                image_size = 20G
+                whql_submission:
+                    desc_path_desc1 = $\WDK\Logo Type\Device Logo\Vista Client\Device Premium
+                    desc_path_desc2 = $\WDK\Logo Type\Device Logo\Vista Client\Device Standard
+                    desc_path_desc3 = $\WDK\Logo Type\Device Logo\Vista Client
+
+                variants:
+                    - 32:
+                        whql_submission:
+                            dd_data_logoarch = X86
+                            dd_data_logoos = Windows Vista
+                            dd_data_whqlos = Windows Vista Client
+                            dd_data_whqlqual = Premium
+                        variants:
+                            - sp1:
+                                image_name += -sp1-32
+                                install:
+                                    cdrom_cd1 = windows/WindowsVista-32.iso
+                                    md5sum = 1008f323d5170c8e614e52ccb85c0491
+                                    md5sum_1m = c724e9695da483bc0fd59e426eaefc72
+                                    steps = Win-Vista-32.steps
+                                setup:
+                                    steps = WinVista-32-rss.steps
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/WindowsVista-32.iso
+                                    md5sum = 1008f323d5170c8e614e52ccb85c0491
+                                    md5sum_1m = c724e9695da483bc0fd59e426eaefc72
+                                    unattended_file = unattended/winvista-32-autounattend.xml
+                                    floppy = images/winvista-sp1-32/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\w7\x86'
+                                    virtio_network_path = 'F:\NetKVM\w7\x86'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+
+                            - sp2:
+                                image_name += -sp2-32
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/en_windows_vista_with_sp2_x86_dvd_342266.iso
+                                    md5sum = 19ca90a425667812977bab6f4ce24175
+                                    md5sum_1m = 89c15020e0e6125be19acf7a2e5dc614
+                                    sha1sum = 25ad9a776503e6a583bec07879dbcc5dfd20cd6e
+                                    sha1sum_1m = a2afa4cffdc1c362dbf9e62942337f4f875a22cf
+                                    unattended_file = unattended/winvista-32-autounattend.xml
+                                    floppy = images/winvista-sp2-32/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\w7\x86'
+                                    virtio_network_path = 'F:\NetKVM\w7\x86'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+
+                    - 64:
+                        whql_submission:
+                            dd_data_logoarch = AMD64
+                            dd_data_logoos = Windows Vista
+                            dd_data_whqlos = Windows Vista Client x64
+                            dd_data_whqlqual = Premium
+                        variants:
+                            - sp1:
+                                image_name += -sp1-64
+                                install:
+                                    cdrom_cd1 = windows/WindowsVista-64.iso
+                                    md5sum = 11e2010d857fffc47813295e6be6d58d
+                                    md5sum_1m = 0947bcd5390546139e25f25217d6f165
+                                    steps = Win-Vista-64.steps
+                                setup:
+                                    steps = WinVista-64-rss.steps
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/WindowsVista-64.iso
+                                    md5sum = 11e2010d857fffc47813295e6be6d58d
+                                    md5sum_1m = 0947bcd5390546139e25f25217d6f165
+                                    unattended_file = unattended/winvista-64-autounattend.xml
+                                    floppy = images/winvista-sp1-64/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\w7\amd64'
+                                    virtio_network_path = 'F:\NetKVM\w7\amd64'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+                            - sp2:
+                                image_name += -sp2-64
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/en_windows_vista_sp2_x64_dvd_342267.iso
+                                    md5sum = a1c024d7abaf34bac3368e88efbc2574
+                                    md5sum_1m = 3d84911a80f3df71d1026f7adedc2181
+                                    sha1sum = aaee3c04533899f9f8c4ae0c4250ef5fafbe29a3
+                                    sha1sum_1m = 1fd21bd3ce2a4de8856c7b8fe6fdf80260f6d1c7
+                                    unattended_file = unattended/winvista-64-autounattend.xml
+                                    floppy = images/winvista-sp2-64/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\w7\amd64'
+                                    virtio_network_path = 'F:\NetKVM\w7\amd64'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+
+            - Win2008:
+                no whql
+                image_name = win2008
+                image_size = 20G
+
+                variants:
+                    - 32:
+                        variants:
+                            - sp1:
+                                image_name += -sp1-32
+                                install:
+                                    cdrom_cd1 = windows/Windows2008-x86.iso
+                                    #en_windows_server_2008_datacenter_enterprise_standard_x86_dvd_X14-26710.iso
+                                    md5sum=0bfca49f0164de0a8eba236ced47007d
+                                    md5sum_1m=07d7f5006393f74dc76e6e2e943e2440
+                                    sha1sum = 6ca018ff96f1e9b2b310a36546b6fded99a421e6
+                                    steps = Win2008-32.steps
+                                setup:
+                                    steps = Win2008-32-rss.steps
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/Windows2008-x86.iso
+                                    md5sum=0bfca49f0164de0a8eba236ced47007d
+                                    md5sum_1m=07d7f5006393f74dc76e6e2e943e2440
+                                    unattended_file = unattended/win2008-32-autounattend.xml
+                                    floppy = images/win2008-sp1-32/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\2k8\x86'
+                                    virtio_network_path = 'F:\NetKVM\2k8\x86'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+
+                            - sp2:
+                                image_name += -sp2-32
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/en_windows_server_2008_datacenter_enterprise_standard_sp2_x86_dvd_342333.iso
+                                    md5sum = b9201aeb6eef04a3c573d036a8780bdf
+                                    md5sum_1m = b7a9d42e55ea1e85105a3a6ad4da8e04
+                                    sha1sum = 49d0d6917c1256fe81048d414fa473bbc76a8724
+                                    sha1sum_1m = 9662ff7ed715faa00407e4befc484ea52a92a9fb
+                                    unattended_file = unattended/win2008-32-autounattend.xml
+                                    floppy = images/win2008-sp2-32/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\2k8\x86'
+                                    virtio_network_path = 'F:\NetKVM\2k8\x86'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+
+                    - 64:
+                        variants:
+                            -sp1:
+                                image_name += -sp1-64
+                                install:
+                                    steps = Win2008-64.steps
+                                    cdrom_cd1 = windows/Windows2008-x64.iso
+                                    #en_windows_server_2008_datacenter_enterprise_standard_x64_dvd_X14-26714.iso
+                                    md5sum=27c58cdb3d620f28c36333a5552f271c
+                                    md5sum_1m=efdcc11d485a1ef9afa739cb8e0ca766
+                                    sha1sum = bd000374709f67e9358814db6ec8f0ddaaa16f70
+                                    passwd = 1q2w3eP
+                                setup:
+                                    steps = Win2008-64-rss.steps
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/Windows2008-x64.iso
+                                    md5sum=27c58cdb3d620f28c36333a5552f271c
+                                    md5sum_1m=efdcc11d485a1ef9afa739cb8e0ca766
+                                    unattended_file = unattended/win2008-64-autounattend.xml
+                                    floppy = images/win2008-sp1-64/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\2k8\amd64'
+                                    virtio_network_path = 'F:\NetKVM\2k8\amd64'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+
+                            - sp2:
+                                image_name += -sp2-64
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/en_windows_server_2008_datacenter_enterprise_standard_sp2_x64_dvd_342336.iso
+                                    md5sum = e94943ef484035b3288d8db69599a6b5
+                                    md5sum_1m = ee55506823d0efffb5532ddd88a8e47b
+                                    sha1sum = 34c7d726c57b0f8b19ba3b40d1b4044c15fc2029
+                                    sha1sum_1m = 8fe08b03e3531906855a60a78020ac9577dff5ba
+                                    unattended_file = unattended/win2008-64-autounattend.xml
+                                    floppy = images/win2008-sp2-64/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\2k8\amd64'
+                                    virtio_network_path = 'F:\NetKVM\2k8\amd64'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+
+                            - r2:
+                                image_name += -r2-64
+                                unattended_install.cdrom:
+                                    cdrom_cd1 = windows/en_windows_server_2008_r2_standard_enterprise_datacenter_and_web_x64_dvd_x15-59754.iso
+                                    md5sum = 0207ef392c60efdda92071b0559ca0f9
+                                    md5sum_1m = a5a22ce25008bd7109f6d830d627e3ed
+                                    sha1sum = ad855ea913aaec3f1d0e1833c1aef7a0de326b0a
+                                    sha1sum_1m = 9194a3aabae25b36e5f73cad001314b2c8d07d14
+                                    unattended_file = unattended/win2008-r2-autounattend.xml
+                                    floppy = images/win2008-r2-64/answer.vfd
+                                    # Uncomment virtio_network_installer_path line if
+                                    # you have an msi installer, also make sure the
+                                    # paths are properly set in your virtio driver iso.
+                                    virtio_storage_path = 'F:\viostor\2k8\amd64'
+                                    virtio_network_path = 'F:\NetKVM\2k8\amd64'
+                                    #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+
+            - Win7:
+                image_name = win7
+                image_size = 20G
+                whql_submission:
+                    desc_path_desc1 = $\WDK\Logo Type\Device Logo\Windows 7 Client\Logo
+                    desc_path_desc2 = $\WDK\Logo Type\Device Logo\Windows 7 Client
+                    device_data += " adq"
+                    dd_name_adq = AdditionalQualificationGroup
+                    dd_data_adq = Windows 7
+
+                variants:
+                    - 32:
+                        image_name += -32
+                        unattended_install.cdrom:
+                            cdrom_cd1 = windows/en_windows_7_ultimate_x86_dvd_x15-65921.iso
+                            md5sum = d0b8b407e8a3d4b75ee9c10147266b89
+                            md5sum_1m = 2b0c2c22b1ae95065db08686bf83af93
+                            sha1sum = 5395dc4b38f7bdb1e005ff414deedfdb16dbf610
+                            sha1sum_1m = 9f9c3780aebeb28a9bf22188eed6bc15475dc9c5
+                            unattended_file = unattended/win7-32-autounattend.xml
+                            floppy = images/win7-32/answer.vfd
+                            # Uncomment virtio_network_installer_path line if
+                            # you have an msi installer, also make sure the
+                            # paths are properly set in your virtio driver iso.
+                            virtio_storage_path = 'F:\viostor\w7\x86'
+                            virtio_network_path = 'F:\NetKVM\w7\x86'
+                            #virtio_network_installer_path = 'F:\RHEV-Network32.msi'
+                        whql_submission:
+                            dd_data_logoarch = X86
+                            dd_data_logoos = Windows 7
+                            dd_data_whqlos = Windows 7 Client
+                            dd_data_whqlqual = Logo
+
+                    - 64:
+                        image_name += -64
+                        install:
+                            cdrom_cd1 = windows/en_windows_7_ultimate_x64_dvd_x15-65922.iso
+                            md5sum=f43d22e4fb07bf617d573acd8785c028
+                            md5sum_1m=b44d8cf99dbed2a5cb02765db8dfd48f
+                            passwd = 1q2w3eP
+                            steps = Win7-64.steps
+                        setup:
+                            steps = Win7-64-rss.steps
+                        unattended_install.cdrom:
+                            cdrom_cd1 = windows/en_windows_7_ultimate_x64_dvd_x15-65922.iso
+                            md5sum = f43d22e4fb07bf617d573acd8785c028
+                            md5sum_1m = b44d8cf99dbed2a5cb02765db8dfd48f
+                            sha1sum = 326327cc2ff9f05379f5058c41be6bc5e004baa7
+                            sha1sum_1m = 4a3903bd5157de54f0702e5263e0a683c5775515
+                            unattended_file = unattended/win7-64-autounattend.xml
+                            floppy = images/win7-64/answer.vfd
+                            # Uncomment virtio_network_installer_path line if
+                            # you have an msi installer, also make sure the
+                            # paths are properly set in your virtio driver iso.
+                            virtio_storage_path = 'F:\viostor\w7\amd64'
+                            virtio_network_path = 'F:\NetKVM\w7\amd64'
+                            #virtio_network_installer_path = 'F:\RHEV-Network64.msi'
+                        whql_submission:
+                            dd_data_logoarch = AMD64
+                            dd_data_logoos = Windows 7
+                            dd_data_whqlos = Windows 7 Client x64
+                            dd_data_whqlqual = Logo
+
+
+    # Unix/BSD section
+    - @Unix:
+        only install
+        kill_vm = yes
+        kill_vm_gracefully = no
+        kill_vm_timeout = 0
+
+        variants:
+            - NetBSD-1.6.2:
+                image_name = NetBSD-1.6.2
+                image_size = 4G
+                steps = NetBSD-1.6.2.steps
+                cdrom_cd1 = bsd/netbsd-1.6.2-i386.iso
+                md5sum=72eb680300f77d529bfbc880ba8208f3
+                md5sum_1m=f1a9e1e825c90adfb1be35c6177bd9ac
+
+            - OpenBSD-4.1:
+                image_name = OpenBSD-4.1
+                steps = OpenBSD-4.1-32.steps
+                cdrom_cd1 = unix/openbsd41-i386-07-05-06.iso
+                md5sum = 984790db10ebdd6fc7a9cf97abc7c967
+                md5sum_1m = 8fc234b4b0ecfe56843a32ac1d26ed55
+
+    # Live CD section
+    - @livecd:
+        only install
+        kill_vm = yes
+        kill_vm_gracefully = no
+        kill_vm_timeout = 0
+
+        variants:
+            - Belenix:
+                steps = Belenix-0.7.1.steps
+                cdrom_cd1 = unix/belenix_0.7.1.iso
+                md5sum = 29cea6160cf5250de138e2820e53e342
+                md5sum_1m = 427bbef1b85d6d051799b825d686ae94
+
+            - Slax:
+                steps = Slax-6.0.7.steps
+                cdrom_cd1 = linux/slax-6.0.7.iso
+                md5sum = cde0ecba3c8289d786e12c44666ded6e
+                md5sum_1m = ddf02bc7444f22d1160a6e5a8fc8723f
+
+            - FreeSBIE-2.0.1:
+                steps = FreeSBIE-2.0.1.steps
+                cdrom_cd1 = unix/FreeSBIE-2.0.1-RELEASE.iso
+                md5sum = b2f680d27c21bbfaf4fb90dce090a118
+                md5sum_1m = 4d81ee7fe0101b0a14225963bfff60c1
+
+            - memtest:
+                mem = 128
+                steps = memtest86+.steps
+                cdrom_cd1 = misc/memtest86+-2.01.iso
+                md5sum = 9fae22f2666369968a76ef59e9a81ced
+
+
+variants:
+    - @up:
+        no autotest.npb autotest.tsc
+    - smp2:
+        smp = 2
+        used_cpus = 2
+        stress_boot: used_cpus = 10
+        timedrift.with_load: used_cpus = 100
+
+
+variants:
+    - @ide:
+        drive_format=ide
+    - scsi:
+        drive_format=scsi
+    - virtio_blk:
+        drive_format=virtio
+        image_boot=yes
+
+
+virtio_net|virtio_blk|e1000|balloon_check:
+    only Fedora.11 Fedora.12 Fedora.13 RHEL.5 OpenSUSE.11 SLES.11 Ubuntu-8.10-server
+    # only WinXP Win2003 Win2008 WinVista Win7 Fedora.11 Fedora.12 Fedora.13 RHEL.5 OpenSUSE.11 SLES.11 Ubuntu-8.10-server
+
+
+variants:
+    - @qcow2:
+        image_format = qcow2
+        post_command += " python scripts/check_image.py;"
+        post_command_timeout = 600
+        post_command_noncritical = yes
+        ioquit:
+            post_command_noncritical = no
+    - vmdk:
+        no ioquit
+        only Fedora Ubuntu Windows
+        only smp2
+        only rtl8139
+        image_format = vmdk
+    - raw:
+        no ioquit
+        only Fedora Ubuntu Windows
+        only smp2
+        only rtl8139
+        image_format = raw
+
+
+variants:
+    - @smallpages:
+    - hugepages:
+        pre_command += " scripts/hugepage.py /mnt/kvm_hugepage;"
+        post_command += " umount /mnt/kvm_hugepage && echo 0 > /proc/sys/vm/nr_hugepages;"
+        extra_params += " -mem-path /mnt/kvm_hugepage"
+
+
+variants:
+    - @no_pci_assignable:
+        pci_assignable = no
+    - pf_assignable:
+        pci_assignable = pf
+        device_names = eth1
+    - vf_assignable:
+        pci_assignable = vf
+        # Driver (kernel module) that supports SR-IOV hardware.
+        # As of today (30-11-2009), we have 2 drivers for this type of hardware:
+        # Intel® 82576 Gigabit Ethernet Controller - igb
+        # Neterion® X3100™ - vxge
+        driver = igb
+        # Driver option to specify the maximum number of virtual functions
+        # (on vxge the option is , for example, is max_config_dev)
+        # the default below is for the igb driver
+        driver_option = "max_vfs=7"
+        # Number of devices that are going to be requested.
+        devices_requested = 7
+
+
+steps ?<= steps/
-- 
1.7.0.4


[-- Attachment #2: Type: text/plain, Size: 152 bytes --]

_______________________________________________
Autotest mailing list
Autotest@test.kernel.org
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] [PATCH V2] patch to enable installing cygwin and running autotest in windows guests
  2010-09-27 12:13 ` [PATCH] [PATCH V2] patch to enable installing cygwin and running autotest in windows guests Yogananth Subramanian
@ 2010-10-27 21:00   ` Lucas Meneghel Rodrigues
  0 siblings, 0 replies; 3+ messages in thread
From: Lucas Meneghel Rodrigues @ 2010-10-27 21:00 UTC (permalink / raw)
  To: Yogananth Subramanian; +Cc: autotest, kvm

On Mon, 2010-09-27 at 17:43 +0530, Yogananth Subramanian wrote:
> The patch creates two new files 'scripts/cyg_install.py' and
> 'tests/cyg_install'. 'scripts/cyg_install.py' is used to install cygwin in
> unattended mode. This patch also introduces a new parameter 'patch_file'to
> run_autotest() in kvm_test_utils.py file, to install patch for autotest to
> run in windows. The file 'autotest_control/autotest.patch' is base patch to
> run any autotest test cases in windows and file 'autotest_control/iozone.patch'
> is a patch to run iozone on windows.

Yoganath, I have some comments to make, would you please look into them
and provide me an updated patch? Thanks!

> [cyg_install]:
> 1)local install:
>    Folder denoted by 'cyg_path' should contain the cygwin setup file and a
>    dir called "repo" which would contain all the cygwin packages need to be
>    installed.
>   remote install:
>    'cyg_path' contains the link to download cygwin setup file
> 2)scripts/cyg_install.py creates  cyg.iso,which contains "cyg_install.cmd"
>    script needed to install cygwin and set of files pointed by the
>    'cyg_path'
> 3)login to guest using telnet and run "cyg_install.cmd" to install
>    cygwin
> 
> [cygwin autotest]
> 1)the param 'test_patch_file' contains the list of patches for autotest
> 2)scp autotest to windows guest, apply the patch and run autotest
> 
> Signed-off-by: Yogananth Subramanian <anantyog@linux.vnet.ibm.com>
> ---
>  client/tests/kvm/autotest_control/autotest.patch |   15 +
>  client/tests/kvm/autotest_control/iozone.patch   |   12 +
>  client/tests/kvm/kvm_test_utils.py               |   10 +-
>  client/tests/kvm/scripts/cyg_install.py          |   98 ++
>  client/tests/kvm/tests/autotest.py               |   21 +-
>  client/tests/kvm/tests/cyg_install.py            |   36 +
>  client/tests/kvm/tests_base.cfg.sample           |   45 +-
>  client/tests/kvm/tests_base.cfg.sample.orig      | 1884 ++++++++++++++++++++++
>  8 files changed, 2117 insertions(+), 4 deletions(-)
>  create mode 100644 client/tests/kvm/autotest_control/autotest.patch
>  create mode 100644 client/tests/kvm/autotest_control/iozone.patch
>  create mode 100644 client/tests/kvm/scripts/cyg_install.py
>  create mode 100644 client/tests/kvm/tests/cyg_install.py
>  create mode 100644 client/tests/kvm/tests_base.cfg.sample.orig
> 
> diff --git a/client/tests/kvm/autotest_control/autotest.patch b/client/tests/kvm/autotest_control/autotest.patch
> new file mode 100644
> index 0000000..f562f95
> --- /dev/null
> +++ b/client/tests/kvm/autotest_control/autotest.patch
> @@ -0,0 +1,15 @@
> +diff -aurpN client/bin/job.py client-new/bin/job.py
> +--- client/bin/job.py   2010-08-25 01:42:27.000000000 -0400
> ++++ client-new/bin/job.py       2010-09-07 09:54:30.000000000 -0400
> +@@ -296,7 +296,10 @@ class base_client_job(base_job.base_job)
> +
> +         # extract console= and other args from cmdline and add them into the
> +         # base args that we use for all kernels we install
> +-        cmdline = utils.read_one_line('/proc/cmdline')
> ++        if os.path.exists('/proc/cmdline'):
> ++            cmdline = utils.read_one_line('/proc/cmdline')
> ++        else:
> ++            return

^ I am happy and surprised that this is the only autotest modification
needed to run autotest under cygwin. However it's a more proper solution
to actually integrate it in autotest, in case this does not regress
functionality for existing clients (I tend to think it won't, since
every linux will have /proc/cmdline. Those could be my last words
though).

> +         kernel_args = []
> +         for karg in cmdline.split():
> +             for param in copy_cmdline:
> diff --git a/client/tests/kvm/autotest_control/iozone.patch b/client/tests/kvm/autotest_control/iozone.patch
> new file mode 100644
> index 0000000..6229205
> --- /dev/null
> +++ b/client/tests/kvm/autotest_control/iozone.patch
> @@ -0,0 +1,12 @@
> +diff -aurpN client/tests/iozone/iozone.py client-new/tests/iozone/iozone.py
> +--- client/tests/iozone/iozone.py       2010-08-25 01:42:27.000000000 -0400
> ++++ client-new/tests/iozone/iozone.py   2010-09-02 11:38:42.000000000 -0400
> +@@ -43,7 +43,7 @@ class iozone(test.test):
> +         elif (arch == 'x86_64'):
> +             utils.system('make linux-AMD64')
> +         else:
> +-            utils.system('make linux')
> ++            utils.system('make Windows')

^ IOzone has changed, now it uses utils.make (see
client/common_lib/utils.py), so need to take this into account. Perhaps
we could get rid of all the patching altogether somehow. Looking at the
current code of IOzone:

        arch = utils.get_current_kernel_arch()
        if (arch == 'ppc'):
            utils.make('linux-powerpc')
        elif (arch == 'ppc64'):
            utils.make('linux-powerpc64')
        elif (arch == 'x86_64'):
            utils.make('linux-AMD64')
        else:
            utils.make('linux')

^ If cygwin reports some different value for
utils.get_current_kernel_arch(), we could even code an additional else
clause that allows for executing

elif (arch =='cygwin-thing'):
    utils.make('windows')


Would you please look into that?

> + 
> + 
> +     def run_once(self, dir=None, args=None):
> diff --git a/client/tests/kvm/kvm_test_utils.py b/client/tests/kvm/kvm_test_utils.py
> index 5412aac..34bccb8 100644
> --- a/client/tests/kvm/kvm_test_utils.py
> +++ b/client/tests/kvm/kvm_test_utils.py
> @@ -336,7 +336,7 @@ def get_memory_info(lvms):
>      return meminfo
>  
> 
> -def run_autotest(vm, session, control_path, timeout, outputdir):
> +def run_autotest(vm, session, control_path, timeout, outputdir, patch_file):
>      """
>      Run an autotest control file inside a guest (linux only utility).
>  
> @@ -346,6 +346,7 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
>      @param timeout: Timeout under which the autotest control file must complete.
>      @param outputdir: Path on host where we should copy the guest autotest
>              results to.
> +    @param patch_file: A path to an autotest patch file.

^ I am really hoping to get rid of patch_file.

>      """
>      def copy_if_hash_differs(vm, local_path, remote_path):
>          """
> @@ -460,12 +461,19 @@ def run_autotest(vm, session, control_path, timeout, outputdir):
>                              os.path.join(autotest_path, 'control')):
>          raise error.TestFail("Could not copy the test control file to guest")
>  
> +    if not patch_file == "":
> +        if not vm.copy_files_to(patch_file,
> +                            os.path.join(autotest_path, '../test.patch')):
> +            raise error.TestFail("Could not copy the test patch file to guest")
> +
>      # Run the test
>      logging.info("Running autotest control file %s on guest, timeout %ss",
>                   os.path.basename(control_path), timeout)
>      session.get_command_output("cd %s" % autotest_path)
>      session.get_command_output("rm -f control.state")
>      session.get_command_output("rm -rf results/*")
> +    if not patch_file == "":
> +        session.get_command_output("patch -p1 <../test.patch")
>      logging.info("---------------- Test output ----------------")
>      status = session.get_command_status("bin/autotest control",
>                                          timeout=timeout,
> diff --git a/client/tests/kvm/scripts/cyg_install.py b/client/tests/kvm/scripts/cyg_install.py
> new file mode 100644
> index 0000000..7213b90
> --- /dev/null
> +++ b/client/tests/kvm/scripts/cyg_install.py
> @@ -0,0 +1,98 @@
> +#!/usr/bin/python
> +"""
> +Script to install cygwin  on KVM guests.
> +"""
> +# -*- coding: utf-8 -*-
> +import os, sys, shutil, tempfile, re, ConfigParser, glob
> +import common
> +from autotest_lib.client.bin import utils
> +
> +class CygInstall(object):
> +    """
> +    Creates an iso image that will contain cygwin setup file for unattended
> +    install. The setup and cygwin packages should be present on the host
> +    under the path specified by 'cyg_path' for local install. For remote 
> +    install the setup will be downloaded from 'cyg_path'  
> +    """
> +    def __init__(self):
> +        """
> +        Gets params from environment variables and sets class attributes.
> +        """
> +        script_dir = os.path.dirname(sys.modules[__name__].__file__)
> +        kvm_test_dir = os.path.abspath(os.path.join(script_dir, ".."))
> +        images_dir = os.path.join(kvm_test_dir, 'images')
> +        self.deps_dir = os.path.join(kvm_test_dir, 'deps')
> +        self.cachedir = os.path.join(kvm_test_dir, 'cyg_cache')
> +        self.unattended_dir = os.path.join(kvm_test_dir, 'unattended')
> +        self.cyg_type = os.environ.get('KVM_TEST_cyg_type')
> +        self.cyg_path = os.environ.get('KVM_TEST_cyg_path')
> +        self.cyg_param = os.environ.get('KVM_TEST_cyg_param')
> +        self.cyg_iso = os.environ.get('KVM_TEST_cdrom_cd1')
> +
> +
> +    def setup_local(self):
> +        """
> +        cygwin setup and packages are present locally.
> +        """
> +        self.cygsetup_file()
> +        mkiso_cmd = "mkisofs -L -l -allow-lowercase -allow-multidot -relaxed-"\
> +              "filenames  -N -v -d  -D  -o %s %s"%(self.cyg_iso, self.cyg_path)
> +        if os.system(mkiso_cmd):
> +            raise SetupError('Could not create iso')
> +
> +
> +    def setup_remote(self):
> +        """
> +        cygwin setup downloaded from 'cyg_path' 
> +        """
> +
> +        if not os.path.isdir(self.cachedir):
> +            os.makedirs(self.cachedir)
> +        self.cyg_md5 = os.environ.get('KVM_TEST_cyg_md5')
> +        dacapo_pkg = utils.unmap_url_cache(self.cachedir, self.cyg_path, self.cyg_md5)
> +        self.cyg_path = self.cachedir 
> +        self.cygsetup_file()
> +        mkiso_cmd = "mkisofs -L -l -allow-lowercase -allow-multidot -relaxed"\
> +             "-filenames  -N -v -d  -D  -o %s %s"%(self.cyg_iso,self.cachedir)
> +        if os.system(mkiso_cmd):
> +            raise SetupError('Could not create iso')
> +        shutil.rmtree(self.cachedir)
> +
> +    def cygsetup_file(self):
> +       cyg_config_file = os.path.join(self.cyg_path, 'cyg_install.cmd')
> +       cyg_config = open(cyg_config_file, 'w')
> +       cyg_config.write('d:setup.exe -q -R '
> +                              '"%systemdrive%\\cygwin"  '+self.cyg_param)
> +       cyg_config.write('\n')
> +       cyg_config.write('cd %systemdrive%\\cygwin\\bin\n')
> +       cyg_config.write("""for /f "delims=" %%A in ('cygpath.exe -u %tmp%')"""
> +                                                         """ do set a=%%A\n""")
> +       cyg_config.write('bash --login -i -c "chmod 777 %a%"\n')
> +       cyg_config.write('ash.exe /usr/bin/rebaseall \n')
> +       cyg_config.write('bash --login -i -c "ssh-host-config -y --pwd '
> +                                                              '1q2w3eP"\n')
> +       cyg_config.write('net start sshd\n')
> +       cyg_config.write('bash --login -i -c "ssh-user-config -y -p"\n')
> +       cyg_config.close()
> +
> +    def setup(self):
> +        print "Starting Cygwin install setup"
> +
> +        print "Variables set:"
> +        print "    cygwin instally type: " + str(self.cyg_type)
> +        print "    cygwin path: " + str(self.cyg_path)
> +        print "    cygwin iso: " + str(self.cyg_iso)
> +
> +        if self.cyg_type == "local":
> +            self.setup_local()
> +        elif self.cyg_type == "remote":
> +            self.setup_remote()
> +        else:
> +            raise SetupError("Unexpected installation method %s" %
> +                                   self.cyg_type)
> +        print "Cygwin install setup finished successfuly"
> +
> +
> +if __name__ == "__main__":
> +    os_install = CygInstall()
> +    os_install.setup()
> diff --git a/client/tests/kvm/tests/autotest.py b/client/tests/kvm/tests/autotest.py
> index 2916ebd..e40b26a 100644
> --- a/client/tests/kvm/tests/autotest.py
> +++ b/client/tests/kvm/tests/autotest.py
> @@ -1,4 +1,4 @@
> -import os, logging
> +import os, logging, tempfile
>  from autotest_lib.client.common_lib import error
>  from autotest_lib.client.bin import utils
>  import kvm_subprocess, kvm_utils, kvm_test_utils
> @@ -20,6 +20,23 @@ def run_autotest(test, params, env):
>      timeout = int(params.get("test_timeout", 300))
>      control_path = os.path.join(test.bindir, "autotest_control",
>                                  params.get("test_control_file"))
> +    if not params.get("test_patch_file"):
> +        patch_file = ""
> +    else:
> +        autotest_files = params.get("test_patch_file").split()
> +        temp = []
> +        for autotest_file in autotest_files:
> +            patch_path = os.path.join(test.bindir, "autotest_control",
> +                                autotest_file)
> +            f = open(patch_path, "r")
> +            temp.extend(f.readlines())
> +            f.close()
> +
> +        (fd,patch_file)=tempfile.mkstemp(prefix='patch_',dir='/tmp')
> +        f = open(patch_file, "w")
> +        f.writelines(temp)
> +        f.close()
>      outputdir = test.outputdir
>  
> -    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir)
> +    kvm_test_utils.run_autotest(vm, session, control_path, timeout, outputdir,
> +                                                                   patch_file)
> diff --git a/client/tests/kvm/tests/cyg_install.py b/client/tests/kvm/tests/cyg_install.py
> new file mode 100644
> index 0000000..f038b2d
> --- /dev/null
> +++ b/client/tests/kvm/tests/cyg_install.py
> @@ -0,0 +1,36 @@
> +import logging, time, os
> +from autotest_lib.client.common_lib import error
> +from autotest_lib.client.bin import utils
> +from autotest_lib.client.tests.iozone import postprocessing
> +import kvm_subprocess, kvm_test_utils, kvm_utils
> +
> +
> +def run_cyg_install(test, params, env):
> +    """
> +    Install cygwin on a windows guest:
> +    1) Log into a guest
> +    2) Install cygwin with the setup contained in the cyg.iso
> +
> +    @param test: kvm test object
> +    @param params: Dictionary with the test parameters
> +    @param env: Dictionary with test environment.
> +    """
> +    vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
> +    timeout = int(params.get("login_timeout", 360))
> +    session = kvm_test_utils.wait_for_login(vm, 0,timeout,0,2)
> +    results_path = os.path.join(test.resultsdir,
> +                                'raw_output_%s' % test.iteration)
> +
> +    c = params.get("cyg_cmd")
> +    t = int(params.get("cyg_timeout"))
> +    logging.info("Installing cygwin on guest, timeout %ss", t)
> +    results = session.get_command_output(command=c, timeout=t,
> +                                         print_func=logging.debug)
> +    utils.open_write_close(results_path, results)
> +
> +    logging.info("Installation succeed")
> +    session.sendline(vm.get_params().get("shutdown_command"))
> +    if not kvm_utils.wait_for(vm.is_dead, 240, 0, 1):
> +        raise error.TestFail("Guest refuses to go down")
> +    session.close()
> +
> diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
> index 167e86d..70ab947 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -130,6 +130,25 @@ variants:
>          kill_vm_on_error = yes
>          login_timeout = 240
>  
> +    -cyg_install:     install setup unattended_install.cdrom
> +        type = cyg_install
> +        pre_command = " scripts/cyg_install.py;"
> +        cyg_param = " -P make,patch,bash,vim,openssh,python,gcc,binutils "
> +        shutdown_method = shell
> +        cyg_cmd = "cmd /c D:\cyg_install.cmd"
> +        cyg_timeout = 3600
> +        shutdown_command = shutdown /s /f /t 0
> +        variants:
> +            - local:
> +                cyg_type = local
> +                cyg_param += " -L -l d:\\repo "
> +                cyg_path = "/root/sdb/images/cyg"
> +            - remote:
> +                cyg_type = remote
> +                cyg_param += " -s http://cygwin.basemirror.de "
> +                cyg_path = "http://www.cygwin.com/setup.exe"
> +                cyg_md5 = "a4f5eaaa1096891b9812b81f104fc4d9"
> +
>      - migrate:      install setup unattended_install.cdrom
>          type = migration
>          migration_test_command = help
> @@ -1236,7 +1255,7 @@ variants:
>  
>      # Windows section
>      - @Windows:
> -        no autotest linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks)
> +        no linux_s3 vlan_tag ioquit unattended_install.(url|nfs|remote_ks)
>          shutdown_command = shutdown /s /f /t 0
>          reboot_command = shutdown /r /f /t 0
>          status_test_command = echo %errorlevel%
> @@ -1327,6 +1346,30 @@ variants:
>              pci_test_cmd = echo select disk 1 > dt && echo online >> dt && echo detail disk >> dt && echo exit >> dt && diskpart /s dt
>          physical_resources_check:
>              catch_uuid_cmd = 
> +        cyg_install:
> +            cdrom_cd1 = windows/cyg.iso
> +            shell_prompt = "Administrator>$"
> +            username = Administrator
> +            password = 1q2w3eP
> +            shell_client = telnet
> +            shell_port = 23
> +            guest_port_remote_shell = 23
> +        autotest:
> +            shell_prompt = "Administrator>$"
> +            username = Administrator
> +            password = 1q2w3eP
> +            status_test_command = echo $?
> +            shell_prompt = "\$ "
> +            shell_client = ssh
> +            shell_linesep = "\n"
> +            shell_port = 22
> +            file_transfer_client = scp
> +            file_transfer_port = 22
> +            guest_port_remote_shell = 22
> +            guest_port_file_transfer = 23
> +            test_patch_file = autotest.patch
> +        autotest.iozone:
> +            test_patch_file += " iozone.patch"
>  
>          variants:
>              - Win2000:
> diff --git a/client/tests/kvm/tests_base.cfg.sample.orig b/client/tests/kvm/tests_base.cfg.sample.orig

^ Here, this file was added by accident. Would you please get rid of it
in a future patch? Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-10-27 21:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-27 12:13 [Autotest] [KVM-AUTOTEST][PATCH V2] Patch to install cygwin and run autotest in windows Yogananth Subramanian
2010-09-27 12:13 ` [PATCH] [PATCH V2] patch to enable installing cygwin and running autotest in windows guests Yogananth Subramanian
2010-10-27 21:00   ` Lucas Meneghel Rodrigues

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox