On 06/14/2012 09:52 AM, Eduardo Bacchi Kienetz wrote:
> On 06/13/2012 10:55 PM, guyanhua wrote:
>> Signed-off-by: Gu Yanhua<[email protected]>
>> ---
>>     client/tests/libvirt/tests/virsh_nodeinfo.py |  110 
>> ++++++++++++++++++++++++++
>>     1 files changed, 110 insertions(+), 0 deletions(-)
>>     create mode 100644 client/tests/libvirt/tests/virsh_nodeinfo.py
>>
>> diff --git a/client/tests/libvirt/tests/virsh_nodeinfo.py 
>> b/client/tests/libvirt/tests/virsh_nodeinfo.py
>> new file mode 100644
>> index 0000000..8de749f
>> --- /dev/null
>> +++ b/client/tests/libvirt/tests/virsh_nodeinfo.py
>> @@ -0,0 +1,110 @@
>> +import re, logging
>> +from autotest.client.shared import utils, error
>> +from autotest.client.virt import libvirt_vm
>> +from autotest.client import *
>> +
>> +def run_virsh_nodeinfo(test, params, env):
>> +    """
>> +    Test the command virsh nodeinfo
>> +
>> +    (1) Call virsh nodeinfo
>> +    (2) Call virsh nodeinfo with an unexpected option
>> +    (3) Call virsh nodeinfo with libvirtd service stop
>> +    """
>> +    def _check_nodeinfo(nodeinfo_output,verify_str, column):
>> +        cmd = "echo \"%s\" | grep \"%s\" | awk '{print $%s}'" % 
>> (nodeinfo_output, verify_str, column)
>> +        cmd_result = utils.run(cmd, ignore_status=True)
>> +        stdout = cmd_result.stdout.strip()
>> +        logging.debug("Info %s on nodeinfo output:%s" %  (verify_str, 
>> stdout))
>> +        return stdout
>> +
>> +
>> +    def output_check(nodeinfo_output):
>> +        # Check CPU model
>> +        cpu_model_nodeinfo = _check_nodeinfo(nodeinfo_output, "CPU model", 
>> 3)
>> +        cpu_model_os = base_utils.get_current_kernel_arch()
>> +        if not re.match(cpu_model_nodeinfo, cpu_model_os):
>> +            raise error.TestFail("Virsh nodeinfo output didn't match CPU 
>> model")
>> +
>> +        # Check number of CPUs
>> +        cpus_nodeinfo = _check_nodeinfo(nodeinfo_output, "CPU(s)", 2)
>> +        cpus_os = base_utils.count_cpus()
>> +        if  int(cpus_nodeinfo) != cpus_os:
>> +            raise error.TestFail("Virsh nodeinfo output didn't match number 
>> of "
>> +                                 "CPU(s)")
>> +
>> +        # Check CPU frequency
>> +        cpu_frequency_nodeinfo = _check_nodeinfo(nodeinfo_output, 'CPU 
>> frequency', 3)
>> +        cmd = ("cat /proc/cpuinfo | grep 'cpu MHz' | head -n1 | "
>
> grep 'cpu MHz' /proc/cpuinfo
> Just like you do below for 'physical id'? That way you avoid the cat :)
>
> You could even make it:
> grep -m 1 'cpu MHz' /proc/cpuinfo
> and also avoid the extra "head -n1", although -m could not be available
> on older distro versions? How far back to we care about? I guess virsh
> wouldn't be used on systems old enough not to have -m on grep...

In Red Hat, we only care about going back to oldest supported release, 
which is RHEL 5 for many more years.  I'm not sure how far back other 
people need to go with libvirt on other distros.  IIRC, grep -m has been 
around a lot longer than libvirt.

>
>> +               "awk '{print $4}' | awk -F. '{print $1}'")
>
> I wonder if cut wouldn't be less of a burden:
> cut -d" " -f3 | cut -d. -f1
>
>> +        cmd_result = utils.run(cmd, ignore_status=True)
>> +        cpu_frequency_os = cmd_result.stdout.strip()
>> +        print cpu_frequency_os
>> +        if not re.match(cpu_frequency_nodeinfo, cpu_frequency_os):
>> +            raise error.TestFail("Virsh nodeinfo output didn't match CPU "
>> +                                 "frequency")
>> +
>> +        # Check CPU socket(s)
>> +        cpu_sockets_nodeinfo = int(_check_nodeinfo(nodeinfo_output, 'CPU 
>> socket(s)', 3))
>> +        cmd = "grep 'physical id' /proc/cpuinfo | uniq | sort | uniq |wc -l"
>
> grep 'physical id' /proc/cpuinfo | sort | uniq | wc -l
> ?
>
>> +        cmd_result = utils.run(cmd, ignore_status=True)
>> +        cpu_NUMA_nodeinfo = _check_nodeinfo(nodeinfo_output, 'NUMA 
>> cell(s)', 3)
>> +        cpu_sockets_os = 
>> int(cmd_result.stdout.strip())/int(cpu_NUMA_nodeinfo)
>> +        if cpu_sockets_os != cpu_sockets_nodeinfo:
>> +            raise error.TestFail("Virsh nodeinfo output didn't match CPU "
>> +                                 "socket(s)")
>> +
>> +        # Check Core(s) per socket
>> +        cores_per_socket_nodeinfo = _check_nodeinfo(nodeinfo_output, 
>> 'Core(s) per socket', 4)
>> +        cmd = "grep 'cpu cores' /proc/cpuinfo | head -n1 | awk '{print $4}'"
>
> grep -m 1 'cpu cores' /proc/cpuinfo | cut -d" " -f3
> ?
>
>> +        cmd_result = utils.run(cmd, ignore_status=True)
>> +        cores_per_socket_os = cmd_result.stdout.strip()
>> +        if not re.match(cores_per_socket_nodeinfo, cores_per_socket_os):
>> +            raise error.TestFail("Virsh nodeinfo output didn't match 
>> Core(s) "
>> +                                 "per socket")
>> +
>> +        # Check Memory size
>> +        memory_size_nodeinfo = int(_check_nodeinfo(nodeinfo_output, 'Memory 
>> size', 3))
>> +        memory_size_os = base_utils.memtotal()
>> +        if memory_size_nodeinfo != memory_size_os:
>> +            raise error.TestFail("Virsh nodeinfo output didn't match "
>> +                                 "Memory size")
>> +
>> +
>> +    # Prepare libvirtd service
>> +    check_libvirtd = params.has_key("libvirtd")
>> +    if check_libvirtd:
>> +        libvirtd = params.get("libvirtd")
>> +        if libvirtd == "off":
>> +            libvirt_vm.service_libvirtd_control("stop")
>> +
>> +    # Run test case
>> +    option = params.get("virsh_node_options")
>> +    cmd_result = libvirt_vm.virsh_nodeinfo(ignore_status=True, extra=option)
>> +    logging.info("Output:\n%s", cmd_result.stdout.strip())
>> +    logging.info("Status: %d", cmd_result.exit_status)
>> +    logging.error("Error: %s", cmd_result.stderr.strip())
>> +    output = cmd_result.stdout.strip()
>> +    status = cmd_result.exit_status
>> +
>> +
>> +    # Recover libvirtd service start
>> +    if libvirtd == "off":
>> +        libvirt_vm.service_libvirtd_control("start")
>> +
>> +    # Check status_error
>> +    status_error = params.get("status_error")
>> +    if status_error == "yes":
>> +        if status == 0:
>> +            if libvirtd == "off":
>> +                raise error.TestFail("Command 'virsh nodeinfo' succeeded "
>> +                                     "with libvirtd service stopped, 
>> incorrect")
>> +            else:
>> +                raise error.TestFail("Command 'virsh nodeinfo %s' succeeded"
>> +                                     "(incorrect command)" % option)
>> +    elif status_error == "no":
>> +        output_check(output)
>> +        if status != 0:
>> +            raise error.TestFail("Command 'virsh nodeinfo %s' failed "
>> +                                 "(correct command)" % option)
>> +
>
> Regards,
>
> --
> Eduardo Bacchi Kienetz
> Staff Software Engineer
> IBM Linux Technology Center

Thanks for helping review!

-- 
Chris Evich, RHCA, RHCE, RHCDS, RHCSS
Quality Assurance Engineer
e-mail: cevich + `@' + redhat.com o: 1-888-RED-HAT1 x44214
_______________________________________________
Autotest mailing list
[email protected]
http://test.kernel.org/cgi-bin/mailman/listinfo/autotest

Reply via email to