On 22/04/15 21:00, Luyao Huang wrote:
It is hard to check if the free memory for each node is right,
because
memory change too fast in most machine (even machine in low load).
Get this free memory 1000 times and get the Standard Deviation via
get_standard_deviation().
177 is a expectations get from 1000 times test in a low load machine,
so this case may still get fail in some big machine.
Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
cases/test_connection.conf | 4 ++
repos/virconn/connection_getCellsFreeMemory.py | 53 ++++++++++++++++++++++++++
2 files changed, 57 insertions(+)
create mode 100644 repos/virconn/connection_getCellsFreeMemory.py
diff --git a/cases/test_connection.conf b/cases/test_connection.conf
index 5719937..1dc98e7 100644
--- a/cases/test_connection.conf
+++ b/cases/test_connection.conf
@@ -57,3 +57,7 @@ virconn:connection_getDomainCapabilities
pc-i440fx-rhel7.0.0
virttype
kvm
+
+virconn:connection_getCellsFreeMemory
+ conn
+ qemu:///system
diff --git a/repos/virconn/connection_getCellsFreeMemory.py
b/repos/virconn/connection_getCellsFreeMemory.py
new file mode 100644
index 0000000..a14e5aa
--- /dev/null
+++ b/repos/virconn/connection_getCellsFreeMemory.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+import libvirt
+from libvirt import libvirtError
+from utils import utils
+
+required_params = ()
+optional_params = {'conn': ''}
+
+NODE_ONLINE = '/sys/devices/system/node/online'
+
+def getnodemem(path):
+ return open(path).read().splitlines()[1].split()[3]
+
+def virtgetmem(a):
+ return a[0].getCellsFreeMemory(a[1], a[1] + 1)[0]/1024
+
+def connection_getCellsFreeMemory(params):
+ """
+ test API for getCellsFreeMemory in class virConnect
+ """
+ logger = params['logger']
+ fail=0
+
+ nodeset = utils.file_read(NODE_ONLINE)
+ logger.info("host exist node is %s" % nodeset)
+
+ node_tuple = utils.param_to_tuple_nolength(nodeset)
+ if not node_tuple:
+ logger.info("error in function param_to_tuple_nolength")
+ return 1
+
+ try:
+ conn=libvirt.open(params['conn'])
+
+ logger.info("get connection cells free memory")
+ for n in range(len(node_tuple)):
+ if not node_tuple[n]:
+ continue
+
+ D = utils.get_standard_deviation(getnodemem, virtgetmem, \
+ '/sys/devices/system/node/node%d/meminfo' % n, [conn,n])
+ logger.info("Standard Deviation for node %d is %d" % (n, D))
+
+ """ expectations 177 is a average collected in a x86_64 low
load machine"""
+ if D > 177*5:
+ fail=1
+ logger.info("FAIL: Standard Deviation is too big \
+ (biger than %d) for node %d" % (177*5, n))
I
don't think a const 177 is here, could you generate a** value
**dynamically based on a specified machine? And percent is recommended.*//*
+
+ except libvirtError, e:
+ logger.error("API error message: %s" % e.message)
+ fail=1
+ return fail