This looks good to me, except that you could just fix spacing among
parameters passed to the functions.

On Thu, Jul 26, 2012 at 6:11 PM, Lucas Meneghel Rodrigues
<[email protected]> wrote:
> From: Satheesh Rajendran <[email protected]>
>
> Added a file to test virsh vcpupin testcase and modified subtests.cfg to add 
> the
> support for the same
>
> Signed-off-by: Satheesh Rajendran <[email protected]>
> ---
>  client/tests/libvirt/tests/virsh_vcpupin.py |  115 
> +++++++++++++++++++++++++++
>  client/virt/subtests.cfg.sample             |    3 +
>  2 files changed, 118 insertions(+)
>  create mode 100644 client/tests/libvirt/tests/virsh_vcpupin.py
>
> diff --git a/client/tests/libvirt/tests/virsh_vcpupin.py 
> b/client/tests/libvirt/tests/virsh_vcpupin.py
> new file mode 100644
> index 0000000..fdeb6df
> --- /dev/null
> +++ b/client/tests/libvirt/tests/virsh_vcpupin.py
> @@ -0,0 +1,115 @@
> +import logging, re, os, commands, string, math
> +from autotest.client.shared import utils, error
> +from autotest.client.virt import libvirt_vm
> +
> +
> +def run_virsh_vcpupin(test, params, env):
> +    """
> +    Test the command virsh vcpupin
> +
> +    (1) Get the host and guest cpu count
> +    (2) Call virsh vcpupin for each vcpu with pinning of each cpu
> +    (3) Check whether the virsh vcpupin has pinned the respective vcpu to cpu
> +    (4) TODO: Right now the testcase covers the pinning one cpu at a time
> +              this can be improved by a random number of cpus
> +    """
> +
> +    # Initialize the variables
> +    expected_affinity = []
> +    total_affinity = []
> +    actual_affinity = []
> +
> +    def build_actual_info(domname,vcpu):
> +        """
> +        This function returns list of the vcpu's affinity from
> +        virsh vcpuinfo output
> +
> +        @param: domname: VM Name to operate on
> +        @param: vcpu: vcpu number for which the affinity is required
> +        """
> +
> +        output = libvirt_vm.virsh_vcpuinfo(domname)
> +        cmd = re.findall('[^Affinity:][-y]+', str(output))
> +        total_affinity = cmd[vcpu].lstrip()
> +        actual_affinity = list(total_affinity)
> +        return actual_affinity
> +
> +
> +    def build_expected_info(vcpu,cpu):
> +        """
> +        This function returns the list of vcpu's expected affinity build
> +
> +        @param: vcpu: vcpu number for which the affinity is required
> +        @param: cpu: cpu details for the affinity
> +        """
> +
> +        expected_affinity = []
> +
> +        for i in range(int(host_cpu_count)):
> +            expected_affinity.append('y')
> +
> +        for i in range(int(host_cpu_count)):
> +            if cpu != i:
> +                expected_affinity[i] = '-'
> +
> +        expected_affinity_proc = int(math.pow(2,cpu))
> +        return expected_affinity,expected_affinity_proc
> +
> +
> +    def virsh_check_vcpupin(domname,vcpu,cpu,pid):
> +        """
> +        This function checks the actual and the expected affinity of given 
> vcpu
> +        and raises error if not matchs
> +
> +        @param: domname:  VM Name to operate on
> +        @param: vcpu: vcpu number for which the affinity is required
> +        @param: cpu: cpu details for the affinity
> +        """
> +
> +        expected_output,expected_output_proc = build_expected_info(vcpu,cpu)
> +        actual_output = build_actual_info(domname,vcpu)
> +
> +        # Get the vcpus pid
> +        vcpus_pid = vm.get_vcpus_pid()
> +        vcpu_pid=vcpus_pid[vcpu]
> +
> +        # Get the actual cpu affinity value in the proc entry
> +        output = utils.cpu_affinity_by_task(pid,vcpu_pid)
> +        actual_output_proc = int(output,16)
> +
> +        if expected_output == actual_output:
> +            logging.info("successfully pinned cpu: %s --> vcpu: %s", 
> cpu,vcpu)
> +        else:
> +            raise error.TestFail("Command 'virsh vcpupin %s %s %s'not 
> succeeded"
> +                                 ", cpu pinning details not updated properly 
> in"
> +                                 " virsh vcpuinfo command output"
> +                                                           % 
> (vm_name,vcpu,cpu))
> +
> +        if expected_output_proc == actual_output_proc:
> +            logging.info("successfully pinned cpu: %s --> vcpu: %s"
> +                         " in respective proc entry"
> +                                                  ,cpu,vcpu)
> +        else:
> +            raise error.TestFail("Command 'virsh vcpupin %s %s %s'not 
> succeeded"
> +                                 " cpu pinning details not updated properly 
> in"
> +                                 " /proc/%s/task/%s/status"
> +                                               
> %(vm_name,vcpu,cpu,pid,vcpu_pid))
> +
> +
> +    # Get the vm name, pid of vm and check for alive
> +    vm_name = params.get("main_vm")
> +    vm = env.get_vm(params["main_vm"])
> +    vm.verify_alive()
> +    pid = vm.get_pid()
> +
> +    # Get the host cpu count
> +    host_cpu_count = utils.count_cpu()
> +
> +    # Get the guest vcpu count
> +    guest_vcpu_count = libvirt_vm.virsh_vcpucount_live(vm_name)
> +
> +    # Run test case
> +    for vcpu in range(int(guest_vcpu_count)):
> +        for cpu in range(int(host_cpu_count)):
> +            vm.vcpupin(vcpu,cpu)
> +            virsh_check_vcpupin(vm_name,vcpu,cpu,pid)
> diff --git a/client/virt/subtests.cfg.sample b/client/virt/subtests.cfg.sample
> index c2aca1f..6b869d2 100644
> --- a/client/virt/subtests.cfg.sample
> +++ b/client/virt/subtests.cfg.sample
> @@ -212,6 +212,9 @@ variants:
>                  status_error = "yes"
>                  libvirtd = "off"
>
> +    - virsh_vcpupin: install setup image_copy unattended_install.cdrom
> +        type = virsh_vcpupin
> +
>      - virsh_version: install setup image_copy unattended_install.cdrom
>          type = virsh_version
>          vms = ''
> --
> 1.7.10.4
>
> _______________________________________________
> Autotest-kernel mailing list
> [email protected]
> https://www.redhat.com/mailman/listinfo/autotest-kernel



-- 
Lucas

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to