Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
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 0000000..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[(a)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