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@xxxxxxxxxx'
+__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@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list
--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list