[libvirt] [test-API][PATCH 1/2] Add test case get_cpu_shares.py for cpu scheduler info testing

Guannan Ren gren at redhat.com
Wed Dec 14 08:20:21 UTC 2011


On 12/14/2011 02:59 PM, Wayne Sun wrote:
> On 12/13/2011 11:45 AM, Nan Zhang wrote:
>> * repos/domain/get_cpu_shares.py: get the value of cpu_shares
>>    property of the guest.
>> ---
>>   lib/domainAPI.py               |    2 +-
>>   repos/domain/get_cpu_shares.py |  117 
>> ++++++++++++++++++++++++++++++++++++++++
>>   2 files changed, 118 insertions(+), 1 deletions(-)
>>   create mode 100644 repos/domain/get_cpu_shares.py
>>
>> diff --git a/lib/domainAPI.py b/lib/domainAPI.py
>> index a6efab7..0058254 100644
>> --- a/lib/domainAPI.py
>> +++ b/lib/domainAPI.py
>> @@ -546,7 +546,7 @@ class DomainAPI(object):
>>       def set_sched_params_flags(self, domname, params, flags):
>>           try:
>>               dom_obj = self.get_domain_by_name(domname)
>> -            retval = dom_obj.setSchedulerParameters(params, flags)
>> +            retval = dom_obj.setSchedulerParametersFlags(params, flags)
>>               return retval
>>           except libvirt.libvirtError, e:
>>               message = e.get_error_message()
>> diff --git a/repos/domain/get_cpu_shares.py 
>> b/repos/domain/get_cpu_shares.py
>> new file mode 100644
>> index 0000000..5d26e82
>> --- /dev/null
>> +++ b/repos/domain/get_cpu_shares.py
>> @@ -0,0 +1,117 @@
>> +#!/usr/bin/env python
>> +"""Get the value of cpu_shares property of the guest
>> +   domain:get_cpu_shares
>> +       guestname
>> +           xxx
>> +       flags
>> +           current|live|config
>> +"""
>> +
>> +__author__ = 'Nan Zhang: nzhang at redhat.com'
>> +__date__ = 'Tue Sep 27, 2011'
>> +__version__ = '0.1.0'
>> +__credits__ = 'Copyright (C) 2011 Red Hat, Inc.'
>> +__all__ = ['check_params', 'check_cpu_shares', 'get_cpu_shares']
>> +
>> +import os
>> +import re
>> +import sys
>> +import time
> time module is not used
>> +from xml.dom import minidom
>> +
>> +
>> +def append_path(path):
>> +    """Append root path of package"""
>> +    if path in sys.path:
>> +        pass
>> +    else:
>> +        sys.path.append(path)
>> +
>> +pwd = os.getcwd()
>> +result = re.search('(.*)libvirt-test-API', pwd)
>> +append_path(result.group(0))
>> +
>> +from lib import connectAPI
>> +from lib import domainAPI
>> +from utils.Python import utils
>> +from utils.Python import xmlbuilder
>> +from exception import LibvirtAPI
>> +
>> +def check_params(params):
>> +    """Verify inputing parameter dictionary"""
>> +    logger = params['logger']
>> +    keys = ['guestname', 'flags']
>> +    for key in keys:
>> +        if key not in params:
>> +            logger.error("%s is required" %key)
>> +            return 1
>> +    return 0
>> +
>> +def check_cpu_shares(params, util, guestname, cpu_shares, flags):
>> +    """Check the value of cpu_shares"""
>> +    logger = params['logger']
>> +    cmd = "cat /cgroup/cpu/libvirt/qemu/%s/cpu.shares" % guestname
>> +    ret, out = util.exec_cmd(cmd, shell=True)
>> +    if ret:
>> +        logger.error("fail to get the value of cpu_shares: %s" % 
>> out[0])
>> +    else:
>> +        logger.info("from cgroup, the value of cpu_shares: %s" % 
>> out[0])
>> +
>> +    if flags == domainAPI.VIR_DOMAIN_AFFECT_CONFIG:
>> +        return 0
>> +
>> +    if cmp(int(out[0]), cpu_shares):
>> +        return 1
>> +    else:
>> +        logger.info("the value of cpu_shares does match the original \
>> +cpu scheduler information.")
>> +        return 0
>> +
>> +def get_cpu_shares(params):
>> +    """Get the cpu scheduler information"""
>> +    # Initiate and check parameters
>> +    params_check_result = check_params(params)
>> +    if params_check_result:
>> +        return 1
>> +    logger = params['logger']
>> +    guestname = params['guestname']
>> +

               I think we need to do the check to the state of guestname 
before doing the test.
               The test is related to the state of guest as the flags said:

               VIR_DOMAIN_AFFECT_CURRENT = 0: Affect current domain state.
               VIR_DOMAIN_AFFECT_LIVE = 1: Affect running domain state.
               VIR_DOMAIN_AFFECT_CONFIG = 2: Affect persistent domain state

               When the guest is inactive, running the scripts get the 
following result:

               "  File 
"/libvirt-test-API/repos/domain/get_cpu_shares.py", line 56, in 
check_cpu_shares
                  logger.error("fail to get the value of cpu_shares: %s" 
% out[0])
                  IndexError: list index out of range
               "

               "  File 
"/libvirt-test-API/repos/domain/get_cpu_shares.py", line 98, in 
get_cpu_shares
                   cpu_shares = sched_info['cpu_shares']
                  TypeError: 'NoneType' object is unsubscriptable
               "


>> +    if params['flags'] == 'current':
>> +        flags = domainAPI.VIR_DOMAIN_AFFECT_CURRENT
>> +    elif params['flags'] == 'live':
>> +        flags = domainAPI.VIR_DOMAIN_AFFECT_LIVE
>> +    elif params['flags'] == 'config':
>> +        flags = domainAPI.VIR_DOMAIN_AFFECT_CONFIG
>> +    else:
>> +        logger.error("Invalid flag was specified.")
>> +        return 1
>> +
>> +    # Connect to local hypervisor connection URI
>> +    util = utils.Utils()
>> +    uri = util.get_uri('127.0.0.1')
>> +    conn = connectAPI.ConnectAPI()
>> +    virconn = conn.open(uri)
>> +
>> +    domobj = domainAPI.DomainAPI(virconn)
>> +    try:
>> +        sched_info = domobj.get_sched_params_flags(guestname, flags)
>> +        cpu_shares = sched_info['cpu_shares']
>> +        logger.debug("the value of cpu_shares is %s" % cpu_shares)
>> +    except LibvirtAPI, e:
>> +        logger.error("API error message: %s, error code is %s" %
>> +                     (e.response()['message'], e.response()['code']))

               add conn.close();

>> +        return 1
>> +
>> +    check_result = check_cpu_shares(params, util, guestname, 
>> cpu_shares, flags)
>> +    if check_result:
>> +        logger.error("cpu_shares does not match.")
>> +        conn.close()
>> +        return 1
>> +
>> +    logger.info("success to get scheduler parameters.")
>> +    conn.close()
>> +    return 0
>> +
>> +def get_cpu_shares_clean():
>> +    """Clean testing environment"""
>> +    pass
> Ack, left is fine.
>
> -- 
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list




More information about the libvir-list mailing list