[libvirt] [test-API][PATCH] Add new testcase for libvirtd connection with tcp socket and with SASL authentication

Guannan Ren gren at redhat.com
Sun Aug 7 09:46:45 UTC 2011


---
 repos/remoteAccess/tcp_setup.py |  242 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 242 insertions(+), 0 deletions(-)
 create mode 100644 repos/remoteAccess/tcp_setup.py

diff --git a/repos/remoteAccess/tcp_setup.py b/repos/remoteAccess/tcp_setup.py
new file mode 100644
index 0000000..8f88810
--- /dev/null
+++ b/repos/remoteAccess/tcp_setup.py
@@ -0,0 +1,242 @@
+#!/usr/bin/env python
+""" Configure and test libvirt tcp connection
+    remoteAccess:tcp_setup
+        target_machine
+            xx.xx.xx.xx
+        username
+            root
+        password
+            xxxxxx
+        listen_tcp
+            enable|disable
+        auth_tcp
+            none|sasl
+"""
+
+__author__ = 'Guannan Ren: gren at redhat.com'
+__date__ = 'Sun Aug 7, 2011'
+__version__ = '0.1.0'
+__credits__ = 'Copyright (C) 2011 Red Hat, Inc.'
+__all__ = ['tcp_setup', 'tcp_libvirtd_set', 'hypervisor_connecting_test']
+
+import os
+import re
+import sys
+
+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 utils.Python import utils
+from exception import LibvirtAPI
+
+SASLPASSWD2 = "/usr/sbin/saslpasswd2"
+LIBVIRTD_CONF = "/etc/libvirt/libvirtd.conf"
+SYSCONFIG_LIBVIRTD = "/etc/sysconfig/libvirtd"
+
+def check_params(params):
+    """check out the arguments requried for this testcases"""
+    logger = params['logger']
+    keys = ['target_machine', 'username', 'password', 'listen_tcp', 'auth_tcp']
+    for key in keys:
+        if key not in params:
+            logger.error("Argument %s is required" % key)
+            return 1
+    return 0
+
+def sasl_user_add(target_machine, username, password, util, logger):
+    """ execute saslpasswd2 to add sasl user """
+    logger.info("add sasl user on server side")
+    saslpasswd2_add = "echo %s | %s -a libvirt %s" % (password, SASLPASSWD2, username)
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                    password, saslpasswd2_add)
+    if ret:
+        logger.error("failed to add sasl user")
+        return 1
+
+    return 0
+
+def tcp_libvirtd_set(target_machine, username, password,
+                      listen_tcp, auth_tcp, util, logger):
+    """ configure libvirtd.conf on libvirt server """
+    logger.info("setting libvirtd.conf on libvirt server")
+    # open libvirtd --listen option
+    listen_open_cmd = "echo 'LIBVIRTD_ARGS=\"--listen\"' >> %s" % SYSCONFIG_LIBVIRTD
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                    password, listen_open_cmd)
+    if ret:
+        logger.error("failed to uncomment --listen in %s" % SYSCONFIG_LIBVIRTD)
+        return 1
+
+    # set listen_tls
+    logger.info("set listen_tls to 0 in %s" % LIBVIRTD_CONF)
+    listen_tls_disable = "echo \"listen_tls = 0\" >> %s" % LIBVIRTD_CONF
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                    password, listen_tls_disable)
+    if ret:
+        logger.error("failed to set listen_tls to 0 in %s" % LIBVIRTD_CONF)
+        return 1
+
+    # set listen_tcp
+    if listen_tcp == 'enable':
+        logger.info("enable listen_tcp = 1 in %s" % LIBVIRTD_CONF)
+        listen_tcp_set = "echo 'listen_tcp = 1' >> %s" % LIBVIRTD_CONF
+        ret = util.remote_exec_pexpect(target_machine, username,
+                                        password, listen_tcp_set)
+        if ret:
+            logger.error("failed to set listen_tcp in %s" % LIBVIRTD_CONF)
+            return 1
+
+    # set auth_tcp
+    logger.info("set auth_tcp to \"%s\" in %s" % (auth_tcp, LIBVIRTD_CONF))
+    auth_tcp_set = "echo 'auth_tcp = \"%s\"' >> %s" % (auth_tcp, LIBVIRTD_CONF)
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                       password, auth_tcp_set)
+    if ret:
+        logger.error("failed to set auth_tcp in %s" % LIBVIRTD_CONF)
+        return 1
+
+    # restart remote libvirtd service
+    libvirtd_restart_cmd = "service libvirtd restart"
+    logger.info("libvirtd restart")
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                    password, libvirtd_restart_cmd)
+    if ret:
+        logger.error("failed to restart libvirtd service")
+        return 1
+
+    logger.info("done to libvirtd configuration")
+    return 0
+
+def request_credentials(credentials, user_data):
+    for credential in credentials:
+        if credential[0] == connectAPI.VIR_CRED_AUTHNAME:
+            credential[4] = user_data[0]
+
+            if len(credential[4]) == 0:
+                credential[4] = credential[3]
+        elif credential[0] == connectAPI.VIR_CRED_PASSPHRASE:
+            credential[4] = user_data[1]
+        else:
+            return -1
+
+    return 0
+
+def hypervisor_connecting_test(uri, auth_tcp, username,
+                                password, logger, expected_result):
+    """ connect remote server """
+    ret = 1
+    try:
+        conn = connectAPI.ConnectAPI()
+        if auth_tcp == 'none':
+            virconn = conn.open(uri)
+        elif auth_tcp == 'sasl':
+            user_data = [username, password]
+            auth = [[connectAPI.VIR_CRED_AUTHNAME, connectAPI.VIR_CRED_PASSPHRASE], request_credentials, user_data]
+            virconn = conn.openAuth(uri, auth, 0)
+
+        ret = 0
+        conn.close()
+    except LibvirtAPI, e:
+        logger.error("API error message: %s, error code is %s" % \
+                     (e.response()['message'], e.response()['code']))
+
+        ret = 1
+        conn.close()
+
+    if ret == 0 and expected_result == 'success':
+        logger.info("tcp connnection success")
+        return 0
+    elif ret == 1 and expected_result == 'fail':
+        logger.info("tcp connection failed, but that is expected")
+        return 0
+    elif ret == 0 and expected_result == 'fail':
+        logger.error("tcp connection success, but we hope the reverse")
+        return 1
+    elif ret == 1 and expected_result == 'success':
+        logger.error("tcp connection failed")
+        return 1
+
+    return 0
+
+def tcp_setup(params):
+    """ configure libvirt and connect to it through TCP socket"""
+    logger = params['logger']
+    params_check_result = check_params(params)
+    if params_check_result:
+        return 1
+
+    target_machine = params['target_machine']
+    username = params['username']
+    password = params['password']
+    listen_tcp = params['listen_tcp']
+    auth_tcp = params['auth_tcp']
+
+    uri = "qemu+tcp://%s/system" % target_machine
+
+    util = utils.Utils()
+
+    logger.info("the hostname of server is %s" % target_machine)
+    logger.info("the value of listen_tcp is %s" % listen_tcp)
+    logger.info("the value of auth_tcp is %s" % auth_tcp)
+
+    if not util.do_ping(target_machine, 0):
+        logger.error("failed to ping host %s" % target_machine)
+        return 1
+
+    if auth_tcp == 'sasl':
+        if sasl_user_add(target_machine, username, password, util, logger):
+            return 1
+
+    if tcp_libvirtd_set(target_machine, username, password,
+                         listen_tcp, auth_tcp, util, logger):
+        return 1
+
+    if listen_tcp == 'disable':
+        if hypervisor_connecting_test(uri, auth_tcp, username,
+                                       password, logger, 'fail'):
+            return 1
+    elif listen_tcp == 'enable':
+        if hypervisor_connecting_test(uri, auth_tcp, username,
+                                       password, logger, 'success'):
+            return 1
+
+    return 0
+
+def tcp_setup_clean(params):
+    """cleanup testing environment"""
+
+    logger = params['logger']
+    target_machine = params['target_machine']
+    username = params['username']
+    password = params['password']
+    listen_tcp = params['listen_tcp']
+    auth_tcp = params['auth_tcp']
+
+    util = utils.Utils()
+
+    if auth_tcp == 'sasl':
+        saslpasswd2_delete = "%s -a libvirt -d %s" % (SASLPASSWD2, username)
+        ret = util.remote_exec_pexpect(target_machine, username,
+                                        password, saslpasswd2_delete)
+        if ret:
+            logger.error("failed to delete sasl user")
+    libvirtd_conf_retore = "sed -i -n '/^[ #]/p' %s" % LIBVIRTD_CONF
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                    password, libvirtd_conf_retore)
+    if ret:
+        logger.error("failed to restore %s" % LIBVIRTD_CONF)
+
+    sysconfig_libvirtd_restore = "sed -i -n '/^[ #]/p' %s" % SYSCONFIG_LIBVIRTD
+    ret = util.remote_exec_pexpect(target_machine, username,
+                                    password, sysconfig_libvirtd_restore)
+    if ret:
+        logger.error("failed to restore %s" % SYSCONFIG_LIBVIRTD)
-- 
1.7.1




More information about the libvir-list mailing list