Re: [libvirt] [libvirt-test-api][PATCH 2/2] Add a new test case for fsinfo API

2015-09-24 Thread hongming


On 09/14/2015 11:43 AM, Luyao Huang wrote:

Signed-off-by: Luyao Huang 
---
  cases/linux_domain.conf |  10 +
  repos/domain/fsinfo.py  | 103 
  2 files changed, 113 insertions(+)
  create mode 100644 repos/domain/fsinfo.py

diff --git a/cases/linux_domain.conf b/cases/linux_domain.conf
index 19daded..faa9df9 100644
--- a/cases/linux_domain.conf
+++ b/cases/linux_domain.conf
@@ -299,6 +299,16 @@ domain:info_iothread
  conn
  qemu:///system
  
+domain:fsinfo

+guestname
+$defaultname
+username
+$username
+userpassword
+$password
+conn
+qemu:///system
+
  domain:destroy
  guestname
  $defaultname
diff --git a/repos/domain/fsinfo.py b/repos/domain/fsinfo.py
new file mode 100644
index 000..e6d1bf0
--- /dev/null
+++ b/repos/domain/fsinfo.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+
+import libvirt
+from libvirt import libvirtError
+import lxml
+import lxml.etree
+from utils import utils
+
+required_params = ('guestname', 'username', 'userpassword',)
+optional_params = {'conn': 'qemu:///system'}
+
+def get_guest_mac(vm):
+tree = lxml.etree.fromstring(vm.XMLDesc(0))
+set = tree.xpath("/domain/devices/interface/mac")
+
+for n in set:
+return n.attrib['address']
+
+return False
+
+
+def check_agent_status(vm):
+""" make sure agent is okay to use """
+
+tree = lxml.etree.fromstring(vm.XMLDesc(0))
+
+set = 
tree.xpath("//channel[@type='unix']/target[@name='org.qemu.guest_agent.0']")
+for n in set:
+if n.attrib['state'] == 'connected':
+return True
+
+return False
+
+def check_fsinfo(ipaddr, username, userpasswd, fsinfo, logger):
+""" equal the fsinfo from libvirt and we get in guest mountinfo """
+
+cmd = "cat /proc/self/mountinfo"
+ret, mounts_needparse = utils.remote_exec_pexpect(ipaddr, username, 
userpasswd, cmd)
+mounts = utils.parse_mountinfo(mounts_needparse)
+
+for n in fsinfo:
+mountdir = n[0]
+name = n[1]
+type1 = n[2]
+target = n[3][0]
+found = 0
+
+for i in mounts:
+if mountdir == i['mountdir']:
+found = 1
+if i['mounttype'] != type1:
+logger.error("Fail: mount type is not equal: libvirt: %s but we 
get: %s" % (type1, i['mounttype']))
+return False
+
+if found == 0:
+logger.error("Fail: cannot find %s in guest mount info" % mountdir)
+return False
+
+return True
+
+
+def fsinfo(params):
+"""
+   test API for fsInfo in class virDomain
+"""
+
+logger = params['logger']
+guest = params['guestname']
+username = params['username']
+userpasswd = params['userpassword']
+
+try:
+conn = libvirt.open(params['conn'])
+
+logger.info("get connection to libvirtd")
+vm = conn.lookupByName(guest)
+logger.info("test guest name: %s" % guest)
+
+if not check_agent_status(vm):
+logger.error("guest agent is not connected")
+return 1
+
+fsinfo = vm.fsInfo()
+logger.info("get geust filesystem information")
+
+mac = get_guest_mac(vm)
+if not mac:
+logger.error("cannot get guest interface mac")
+return 1
+
+ipaddr = utils.mac_to_ip(mac, 180)
+if not ipaddr:
+logger.error("cannot get guest IP")
+return 1
+
+if not check_fsinfo(ipaddr, username, userpasswd, fsinfo, logger):
+return 1
+
+except libvirtError, e:
+logger.error("API error message: %s" % e.message)
+return 1
+
+return 0


ACK  and Pushed

Thanks
Hongming

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-test-api][PATCH 2/2] Add a new test case for fsinfo API

2015-09-13 Thread Luyao Huang
Signed-off-by: Luyao Huang 
---
 cases/linux_domain.conf |  10 +
 repos/domain/fsinfo.py  | 103 
 2 files changed, 113 insertions(+)
 create mode 100644 repos/domain/fsinfo.py

diff --git a/cases/linux_domain.conf b/cases/linux_domain.conf
index 19daded..faa9df9 100644
--- a/cases/linux_domain.conf
+++ b/cases/linux_domain.conf
@@ -299,6 +299,16 @@ domain:info_iothread
 conn
 qemu:///system
 
+domain:fsinfo
+guestname
+$defaultname
+username
+$username
+userpassword
+$password
+conn
+qemu:///system
+
 domain:destroy
 guestname
 $defaultname
diff --git a/repos/domain/fsinfo.py b/repos/domain/fsinfo.py
new file mode 100644
index 000..e6d1bf0
--- /dev/null
+++ b/repos/domain/fsinfo.py
@@ -0,0 +1,103 @@
+#!/usr/bin/env python
+
+import libvirt
+from libvirt import libvirtError
+import lxml
+import lxml.etree
+from utils import utils
+
+required_params = ('guestname', 'username', 'userpassword',)
+optional_params = {'conn': 'qemu:///system'}
+
+def get_guest_mac(vm):
+tree = lxml.etree.fromstring(vm.XMLDesc(0))
+set = tree.xpath("/domain/devices/interface/mac")
+
+for n in set:
+return n.attrib['address']
+
+return False
+
+
+def check_agent_status(vm):
+""" make sure agent is okay to use """
+
+tree = lxml.etree.fromstring(vm.XMLDesc(0))
+
+set = 
tree.xpath("//channel[@type='unix']/target[@name='org.qemu.guest_agent.0']")
+for n in set:
+if n.attrib['state'] == 'connected':
+return True
+
+return False
+
+def check_fsinfo(ipaddr, username, userpasswd, fsinfo, logger):
+""" equal the fsinfo from libvirt and we get in guest mountinfo """
+
+cmd = "cat /proc/self/mountinfo"
+ret, mounts_needparse = utils.remote_exec_pexpect(ipaddr, username, 
userpasswd, cmd)
+mounts = utils.parse_mountinfo(mounts_needparse)
+
+for n in fsinfo:
+mountdir = n[0]
+name = n[1]
+type1 = n[2]
+target = n[3][0]
+found = 0
+
+for i in mounts:
+if mountdir == i['mountdir']:
+found = 1
+if i['mounttype'] != type1:
+logger.error("Fail: mount type is not equal: libvirt: %s 
but we get: %s" % (type1, i['mounttype']))
+return False
+
+if found == 0:
+logger.error("Fail: cannot find %s in guest mount info" % mountdir)
+return False
+
+return True
+
+
+def fsinfo(params):
+"""
+   test API for fsInfo in class virDomain
+"""
+
+logger = params['logger']
+guest = params['guestname']
+username = params['username']
+userpasswd = params['userpassword']
+
+try:
+conn = libvirt.open(params['conn'])
+
+logger.info("get connection to libvirtd")
+vm = conn.lookupByName(guest)
+logger.info("test guest name: %s" % guest)
+
+if not check_agent_status(vm):
+logger.error("guest agent is not connected")
+return 1
+
+fsinfo = vm.fsInfo()
+logger.info("get geust filesystem information")
+
+mac = get_guest_mac(vm)
+if not mac:
+logger.error("cannot get guest interface mac")
+return 1
+
+ipaddr = utils.mac_to_ip(mac, 180)
+if not ipaddr:
+logger.error("cannot get guest IP")
+return 1
+
+if not check_fsinfo(ipaddr, username, userpasswd, fsinfo, logger):
+return 1
+
+except libvirtError, e:
+logger.error("API error message: %s" % e.message)
+return 1
+
+return 0
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list