diff mbox

KVM test: Add a subtest cpuflags

Message ID 1267687233-26740-1-git-send-email-sshang@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

sshang March 4, 2010, 7:20 a.m. UTC
None

Comments

Amos Jianjun Kong July 29, 2011, 5:27 a.m. UTC | #1
On Thu, Mar 4, 2010 at 3:20 PM, sshang <sshang@redhat.com> wrote:
>  This test mainly tests whether all guest cpu flags are supported by host machine.
>
> Signed-off-by: sshang <sshang@redhat.com>

Hi Lucas,
It seems that this patch[1]  was lost by us. Have confirmed with shuang,
this subtest needs to be refactored. So let's wait the new version!

[1] https://patchwork.kernel.org/patch/83543/

> ---
>  client/tests/kvm/tests/cpuflags.py     |   80 ++++++++++++++++++++++++++++++++
>  client/tests/kvm/tests_base.cfg.sample |    9 +++-
>  2 files changed, 88 insertions(+), 1 deletions(-)
>  create mode 100644 client/tests/kvm/tests/cpuflags.py
>
> diff --git a/client/tests/kvm/tests/cpuflags.py b/client/tests/kvm/tests/cpuflags.py
> new file mode 100644
> index 0000000..5f51d65
> --- /dev/null
> +++ b/client/tests/kvm/tests/cpuflags.py
> @@ -0,0 +1,80 @@
> +import logging,os,commands
> +from autotest_lib.client.common_lib import error
> +import kvm_test_utils
> +
> +def run_cpuflags(test,params,env):
> +    """
> +    Check guest cpu extension flags supported by host
> +    1) Log into  guest
> +    2) Get guest cpu information and host cpu information
> +    3) Compare with each other make sure host cpu extension flags
> +       bits contain guest
> +
> +    @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"))
> +    session = kvm_test_utils.wait_for_login(vm,
> +                  timeout=int(params.get("login_timeout", 360)))
> +
> +    get_cpuflags_cmd = params.get("getcpuflags")
> +    s, o = session.get_command_status_output(get_cpuflags_cmd)
> +    if s != 0:
> +        raise error.TestFail, "Could not read guest cpu flags"
> +    guest_cpuflags_list = o.splitlines()[0].split(':')[1].split()
> +    host_cpuflags_list = commands.getoutput(get_cpuflags_cmd).\
> +                         splitlines()[0].split(':')[1].split()
> +
> +    logging.debug("Host flags %s" % host_cpuflags_list)
> +    logging.debug("Guest flags %s" % guest_cpuflags_list)
> +
> +    # There are some special flags, for example 'hypervisor', 'sep',
> +    # present in guests but not in the hosts, exclude these flags from
> +    # comparison.
> +    ban_flags_list = params.get("ban_flags").split()
> +
> +    guest_cpuflags_set = set(guest_cpuflags_list)
> +    host_cpuflags_set = set(host_cpuflags_list)
> +
> +    # If the excluded flags provided by the config file that exist in the
> +    # host, remove them from the ban_flags_list, because we require kvm
> +    # virtualize/simulate the host.
> +    if params.get("strict_check") == "yes":
> +        for flag in ban_flags_list:
> +            if flag in host_cpuflags_list:
> +                ban_flags_list.remove(flag)
> +
> +    # exclude the banned flags from guest flags set.
> +    for flag in ban_flags_list:
> +        if flag in guest_cpuflags_set:
> +            guest_cpuflags_set.remove(flag)
> +
> +    if guest_cpuflags_set.issubset(host_cpuflags_set):
> +        logging.info("Guest cpu flags all supported by host")
> +    else:
> +        invalidflags_set = guest_cpuflags_set - host_cpuflags_set
> +        host_cpuflags_str = str(host_cpuflags_set)[4:-1]
> +        invalidflags_str = ''
> +        for i in invalidflags_set:
> +            if host_cpuflags_str.find(i.strip()) == -1:
> +                invalidflags_str = invalidflags_str + i + ','
> +
> +        if invalidflags_str.strip() != '':
> +            raise error.TestFail("Unsupported cpu flags by host: %s" % \
> +                                                invalidflags_str[0:-1])
> +
> +    # check the extra cpuflags in guest.
> +    extra_flags_set = set(params.get("extra_flags").split())
> +    if extra_flags_set.issubset(guest_cpuflags_set):
> +        logging.info("All extra flags are found in guest.")
> +    else:
> +        invalidflags_set = extra_flags_set - guest_cpuflags_set
> +        invalidflags_str = ''
> +        for i in invalidflags_set:
> +            invalidflags_str = invalidflags_str + i + ','
> +        raise error.TestFail("Unsupported extra flags by guest: %s" % \
> +                                                invalidflags_str[0:-1])
> +
> +    session.close()
> +
> diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
> index 040d0c3..f7dcbb6 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -300,6 +300,13 @@ variants:
>         shutdown_method = shell
>         kill_vm = yes
>         kill_vm_gracefully = no
> +
> +    - cpuflags:
> +        type = cpuflags
> +        getcpuflags = grep 'flags' /proc/cpuinfo
> +        ban_flags = "up sep hypervisor sep_good"
> +        extra_flags = ""
> +        strict_check = yes
>     # Do not define test variants below shutdown
>
>
> @@ -1001,7 +1008,7 @@ variants:
>                 md5sum = 9fae22f2666369968a76ef59e9a81ced
>
>
> -linux_s3:
> +linux_s3|cpuflags:
>     only Linux
>
>
> --
> 1.5.5.6
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/client/tests/kvm/tests/cpuflags.py b/client/tests/kvm/tests/cpuflags.py
new file mode 100644
index 0000000..5f51d65
--- /dev/null
+++ b/client/tests/kvm/tests/cpuflags.py
@@ -0,0 +1,80 @@ 
+import logging,os,commands
+from autotest_lib.client.common_lib import error
+import kvm_test_utils
+
+def run_cpuflags(test,params,env):
+    """
+    Check guest cpu extension flags supported by host
+    1) Log into  guest
+    2) Get guest cpu information and host cpu information 
+    3) Compare with each other make sure host cpu extension flags
+       bits contain guest
+
+    @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"))
+    session = kvm_test_utils.wait_for_login(vm,
+                  timeout=int(params.get("login_timeout", 360)))
+
+    get_cpuflags_cmd = params.get("getcpuflags")
+    s, o = session.get_command_status_output(get_cpuflags_cmd)
+    if s != 0:
+        raise error.TestFail, "Could not read guest cpu flags"
+    guest_cpuflags_list = o.splitlines()[0].split(':')[1].split()
+    host_cpuflags_list = commands.getoutput(get_cpuflags_cmd).\
+                         splitlines()[0].split(':')[1].split()
+
+    logging.debug("Host flags %s" % host_cpuflags_list)
+    logging.debug("Guest flags %s" % guest_cpuflags_list)
+    
+    # There are some special flags, for example 'hypervisor', 'sep',
+    # present in guests but not in the hosts, exclude these flags from
+    # comparison.
+    ban_flags_list = params.get("ban_flags").split()
+
+    guest_cpuflags_set = set(guest_cpuflags_list)
+    host_cpuflags_set = set(host_cpuflags_list)
+
+    # If the excluded flags provided by the config file that exist in the
+    # host, remove them from the ban_flags_list, because we require kvm
+    # virtualize/simulate the host.
+    if params.get("strict_check") == "yes":
+        for flag in ban_flags_list:
+            if flag in host_cpuflags_list:
+                ban_flags_list.remove(flag)
+
+    # exclude the banned flags from guest flags set.
+    for flag in ban_flags_list:
+        if flag in guest_cpuflags_set:
+            guest_cpuflags_set.remove(flag)
+
+    if guest_cpuflags_set.issubset(host_cpuflags_set):
+        logging.info("Guest cpu flags all supported by host")
+    else:
+        invalidflags_set = guest_cpuflags_set - host_cpuflags_set
+        host_cpuflags_str = str(host_cpuflags_set)[4:-1]
+        invalidflags_str = '' 
+        for i in invalidflags_set:
+            if host_cpuflags_str.find(i.strip()) == -1:
+                invalidflags_str = invalidflags_str + i + ','
+
+        if invalidflags_str.strip() != '':
+            raise error.TestFail("Unsupported cpu flags by host: %s" % \
+                                                invalidflags_str[0:-1])
+
+    # check the extra cpuflags in guest.
+    extra_flags_set = set(params.get("extra_flags").split())
+    if extra_flags_set.issubset(guest_cpuflags_set):
+        logging.info("All extra flags are found in guest.")
+    else:
+        invalidflags_set = extra_flags_set - guest_cpuflags_set
+        invalidflags_str = ''
+        for i in invalidflags_set:
+            invalidflags_str = invalidflags_str + i + ','
+        raise error.TestFail("Unsupported extra flags by guest: %s" % \
+                                                invalidflags_str[0:-1])
+
+    session.close()
+
diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample
index 040d0c3..f7dcbb6 100644
--- a/client/tests/kvm/tests_base.cfg.sample
+++ b/client/tests/kvm/tests_base.cfg.sample
@@ -300,6 +300,13 @@  variants:
         shutdown_method = shell
         kill_vm = yes
         kill_vm_gracefully = no
+
+    - cpuflags:
+        type = cpuflags
+        getcpuflags = grep 'flags' /proc/cpuinfo
+        ban_flags = "up sep hypervisor sep_good"
+        extra_flags = ""
+        strict_check = yes
     # Do not define test variants below shutdown
 
 
@@ -1001,7 +1008,7 @@  variants:
                 md5sum = 9fae22f2666369968a76ef59e9a81ced
 
 
-linux_s3:
+linux_s3|cpuflags:
     only Linux