The problem with this example is that it hasn't been fully pruned and tested, there are import errors and undefined variable errors everywhere. I did try to clean up the file, but now I can't seem to get the test list to be filtered appropriately, that is, all dicts from all hosts are generated by default. I've sent the version I tried to clean up to the ML, so please pick it up and make it work the way you intended.
Cheers, Lucas On Thu, Feb 21, 2013 at 9:38 AM, Yiqiao Pu <[email protected]> wrote: > This is an example for set up params based on kernel version defined > in a cfg file named host-kernel.cfg. The main function for package > check(package_check) is in the control.kernel-version. Take > this as an example as kernel is a very important part in kvm test > and will decide a set of common parameters using in the cases. You > can also setup yourself host-package.cfg for different type of tests > in the same way. > > Signed-off-by: Yiqiao Pu <[email protected]> > --- > qemu/contrib/control.kernel-version | 166 > +++++++++++++++++++++++++++++++++++ > qemu/contrib/host-kernel.cfg | 50 +++++++++++ > 2 files changed, 216 insertions(+), 0 deletions(-) > create mode 100644 qemu/contrib/control.kernel-version > create mode 100644 qemu/contrib/host-kernel.cfg > > diff --git a/qemu/contrib/control.kernel-version > b/qemu/contrib/control.kernel-version > new file mode 100644 > index 0000000..fd05d41 > --- /dev/null > +++ b/qemu/contrib/control.kernel-version > @@ -0,0 +1,166 @@ > +# This file can be used for the cases have requirements for host kernel > +# version and packages installed. > + > + > +def package_check(dict_test): > + """ > + Check if the package request in case installed in host. > + > + @dict_test: dict for test case > + @return: Boolean value for have the packages or not > + """ > + failed_message = "" > + for package in dict_test.get("required_packages", "").split(): > + package_check_cmd = dict_test.get("package_check_cmd_%s" % package, > + "rpm -q --provides PACKNAME") > + package_version_pattern = dict_test.get("package_version_pattern_%s" > % package, > + "PACKNAME\s+=.*:(.*)") > + package_check_cmd = re.sub("PACKNAME", package, package_check_cmd) > + s, o = commands.getstatusoutput(package_check_cmd) > + if s != 0: > + failed_message += "%s not installed.\n" % package > + continue > + > + version_pattern = re.sub("PACKNAME", package, > package_version_pattern) > + packge_version = re.findall(version_pattern, o) > + if packge_version: > + packge_version = packge_version[0].strip() > + else: > + failed_message += "Can not get version info." > + failed_message += " Please check your pattern and command." > + continue > + > + > + if dict_test.get("requires_%s" % package): > + package_requires = eval(dict_test.get("requires_%s" % package)) > + if isinstance(package_requires, list): > + package_requires = (package_requires,) > + for requires in package_requires: > + pass_flag = False > + for require in requires: > + op = re.findall("[>=<!]+", require)[0] > + ver = re.sub(op, "", require) > + compare_str = "version.LooseVersion('%s') " % > packge_version > + compare_str += "%s " % op > + compare_str += "version.LooseVersion('%s')" % ver.strip() > + if not eval(compare_str): > + break > + else: > + pass_flag = True > + > + if not pass_flag: > + failed_message += "%s in system is" % package > + failed_message += " not fit the requires for test.\n" > + failed_message += "require is: %s\n" % str(package_requires) > + failed_message += "system is: %s\n" % packge_version > + > + if failed_message: > + print failed_message > + return False > + > + return True > + > + > +AUTHOR = """ > [email protected] (Uri Lublin) > [email protected] (Dror Russo) > [email protected] (Michael Goldish) > [email protected] (David Huff) > [email protected] (Alexey Eromenko) > [email protected] (Mike Burns) > +""" > +TIME = 'MEDIUM' > +NAME = 'QEMU (KVM) Test' > +TEST_TYPE = 'client' > +TEST_CLASS = 'Virtualization' > +TEST_CATEGORY = 'Functional' > + > +DOC = """ > +Executes the QEMU (accelerated via KVM) test framework on a given host. > +This module is separated in minor functions, that execute different tests for > +doing Quality Assurance on KVM (both kernelspace and userspace) code. > + > +Online docs: https://github.com/autotest/virt-test/wiki > +""" > + > +import sys, os, logging > +virt_test_dir = os.path.join(os.environ['AUTODIR'],'tests/virt') > +sys.path.insert(0, virt_test_dir) > +from virttest import utils_misc, cartesian_config > + > +# set English environment (command output might be localized, need to be > safe) > +os.environ['LANG'] = 'en_US.UTF-8' > + > +filter_str = """ > +# This string will be parsed after build.cfg. Make any desired changes to > the > +# build configuration here. For example (to install from koji/brew): > +# installers = koji_qemu_kvm > +""" > + > +parser = cartesian_config.Parser() > +qemu_test_dir = os.path.join(os.environ['AUTODIR'],'tests/virt/qemu') > +parser.parse_file(os.path.join(qemu_test_dir, "cfg", "build.cfg")) > +parser.parse_string(filter_str) > +if not utils_misc.run_tests(parser, job): > + logging.error("QEMU build step failed, exiting.") > + sys.exit(1) > + > +filter_str = """ > +# This string will be parsed after tests.cfg. Make any desired changes to > the > +# test configuration here. For example: > +#display = sdl > +#install, setup: timeout_multiplier = 3 > +""" > + > +parser = cartesian_config.Parser() > +parser.parse_file(os.path.join(qemu_test_dir, "cfg", "tests.cfg")) > + > +if args: > + # We get test parameters from command line > + for arg in args: > + try: > + (key, value) = re.findall("^(\w+)=(.*)", arg)[0] > + if key == "only": > + filter_str += "only %s\n" % value > + elif key == "no": > + filter_str += "no %s\n" % value > + else: > + filter_str += "%s = %s\n" % (key, value) > + except IndexError: > + pass > + > +#Get the kernel version and package requirements filter strings > +host_kernel_ver_str = "" > +host_kernel_ver_file = "/tmp/host_kernel_version" > +for i in parser.get_dicts(): > + if (i.get("packages_require") and not package_check(i)): > + filter_str += "no %s\n" % dict_test['name'] > + logging.warning("Skip case '%s' for package " > + "missing." % dict_test['name']) > + > + if i.get("requires_kernel") and not host_kernel_ver_str: > + if i.get("pre_check_cmd"): > + s, o = commands.getstatusoutput(i.get("pre_check_cmd")) > + if s != 0: > + print "Prepare check failed for %s" % i.get("kernel_ver_str") > + continue > + if os.path.isfile(host_kernel_ver_file): > + kervel_version = open(host_kernel_ver_file, "r") > + host_kernel_ver_str = kervel_version.read() > + kervel_version.close() > + else: > + host_dict = i.copy() > + host_dict["required_packages"] = "kernel" > + if package_check(host_dict): > + host_kernel_ver_str = "only %s\n" %\ > + host_dict.get("kernel_ver_str") > + kervel_version = open(host_kernel_ver_file, "w") > + kervel_version.write(host_kernel_ver_str) > + kervel_version.close() > + > +filter_str += host_kernel_ver_str > + > +parser.parse_string(filter_str) > + > + > +utils_misc.run_tests(parser, job) > diff --git a/qemu/contrib/host-kernel.cfg b/qemu/contrib/host-kernel.cfg > new file mode 100644 > index 0000000..169c4a6 > --- /dev/null > +++ b/qemu/contrib/host-kernel.cfg > @@ -0,0 +1,50 @@ > +# Host kernel related parameters > +# Here will set up a set up prameters for the test based on the different > +# kerenl installed in RHEL system. You can also make different one like this > +# based on other packages in the system in your test. > + > +package_check_cmd_kernel = uname -r > +package_version_pattern_kernel = [\.\-\_\w\d]+ > + > +# Host > +variants: > + - @Host_default: > + host_ver_str = Host_default > + requires_kernel = ["< 2.6.18-274"], [">2.6.19", "<2.6.32-131"], > [">2.6.33", "<3.2.1-0.8"] > + - Host_RHEL: > + pre_check_cmd = "grep 'Red Hat Enterprise Linux' /etc/redhat-release" > + host_ver_str = Host_RHEL > + variants: > + - 5: > + monitor_type = human > + monitors = humanmonitor1 > + main_monitor = humanmonitor1 > + variants: > + - 7: > + host_ver_str += ".7" > + requires_kernel = [">= 2.6.18-274", "< 2.6.18-308"] > + - 8: > + host_ver_str += ".8" > + requires_kernel = [">= 2.6.18-308", "< 2.6.18-309"] > + - 9: > + host_ver_str += ".9" > + requires_kernel = [">= 2.6.18-309", "< 2.6.19"] > + - 6: > + # RHEL-6 pointer > + netdev_peer_re = "\s{2,}(.*?):.*?peer=(.*?)\s" > + ksm_base: > + status_query_cmd = "cat /sys/kernel/mm/ksm/run" > + setup_cmd = "echo 1 > /sys/kernel/mm/ksm/run" > + query_cmd = "cat /sys/kernel/mm/ksm/pages_sharing" > + virtio_net: > + vhost = "vhost=on" > + variants: > + - 1: > + host_ver_str += ".1" > + requires_kernel = [">= 2.6.32-131", "< 2.6.32-220"] > + - 2: > + host_ver_str += ".2" > + requires_kernel = [">= 2.6.32-220", "< 2.6.32-279"] > + - 3: > + host_ver_str += ".3" > + requires_kernel = [">= 2.6.32-279", "< 2.6.32-280"] > -- > 1.7.7.6 > > _______________________________________________ > Virt-test-devel mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/virt-test-devel -- Lucas _______________________________________________ Virt-test-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-test-devel
