From: Yiqiao Pu <[email protected]> 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/cfg/host-kernel.cfg | 49 +++++++++++++++++++ qemu/control.host-kernel | 125 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 qemu/cfg/host-kernel.cfg create mode 100644 qemu/control.host-kernel diff --git a/qemu/cfg/host-kernel.cfg b/qemu/cfg/host-kernel.cfg new file mode 100644 index 0000000..222dd11 --- /dev/null +++ b/qemu/cfg/host-kernel.cfg @@ -0,0 +1,49 @@ +# Host kernel related parameters +# Here will set up a set up parameters for the test based on the different +# kernel installed in RHEL system. You can also edit this to match other +# packages in the host under test. + +package_check_cmd_kernel = uname -r +package_version_pattern_kernel = [\.\-\_\w\d]+ + +# Host +variants: + - Host_Fedora: + pre_check_cmd = "grep 'Fedora' /etc/issue" + - 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"] diff --git a/qemu/control.host-kernel b/qemu/control.host-kernel new file mode 100644 index 0000000..822bf9c --- /dev/null +++ b/qemu/control.host-kernel @@ -0,0 +1,125 @@ +AUTHOR = """ [email protected] (Yiqiao Pu) +""" +TIME = 'MEDIUM' +NAME = 'QEMU (KVM) Test - Host autoconfig' +TEST_TYPE = 'client' +TEST_CLASS = 'Virtualization' +TEST_CATEGORY = 'Functional' + +DOC = """ +Executes the QEMU (accelerated via KVM) test framework on a given host, +adapting the tests executed to the host machine. + +Online docs: https://github.com/autotest/virt-test/wiki +""" + +import sys, os, logging, re, commands +from distutils import version +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 + +os.environ['LANG'] = 'en_US.UTF-8' + + +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) + package_version_pattern = dict_test.get("package_version_pattern_%s" % + package) + 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()) + print compare_str + 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 + +qemu_test_dir = os.path.join(os.environ['AUTODIR'],'tests/virt/qemu') +parser = cartesian_config.Parser() + +parser.parse_file(os.path.join(qemu_test_dir, "cfg", "tests-example.cfg")) +parser.parse_file(os.path.join(qemu_test_dir, "cfg", "host-kernel.cfg")) + +host_kernel_ver_str = "" +host_kernel_ver_file = "/tmp/host_kernel_version" + +filter_str = "" +for dict_test in parser.get_dicts(): + if (dict_test.get("packages_require") and not package_check(dict_test)): + filter_str += "no %s\n" % dict_test['name'] + logging.warning("Skip case '%s' due to package " + "missing." % dict_test['name']) + + if dict_test.get("requires_kernel") and not host_kernel_ver_str: + if dict_test.get("pre_check_cmd"): + s, o = commands.getstatusoutput(dict_test.get("pre_check_cmd")) + if s != 0: + 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 = dict_test.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) -- 1.8.1.4 _______________________________________________ Virt-test-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-test-devel
