[libvirt] [test-API PATCH 2/2] rewrite env_inspect.py and setup shared conn obj via sharedmod

Guannan Ren gren at redhat.com
Fri Apr 6 09:14:17 UTC 2012


    dist/redhat/env_inspect.py: initialize shared conn obj for
                                use in all testcases
    generator.py: make use of sharedmod
---
 dist/redhat/env_inspect.py |  173 +++++++++++++++++++++++---------------------
 generator.py               |   15 +---
 2 files changed, 93 insertions(+), 95 deletions(-)

diff --git a/dist/redhat/env_inspect.py b/dist/redhat/env_inspect.py
index 8cff106..5a63866 100644
--- a/dist/redhat/env_inspect.py
+++ b/dist/redhat/env_inspect.py
@@ -19,104 +19,109 @@
 #              from each testcase to the corresponding testcase's
 #              argument in the order of testcase running
 
-import subprocess
-
-def childprocess(pcmd, acmd):
-    P1 = subprocess.Popen(pcmd, stdout = subprocess.PIPE)
-    P2 = subprocess.Popen(acmd, stdin = P1.stdout, stdout =subprocess.PIPE)
-    out = P2.communicate()[0].strip()
-    rc = P2.returncode
-
-    if rc == 0:
-        return out
-    else:
-        return ""
-
-def get_libvirt_ver():
-    ver = childprocess(['rpm', '-qa'], ['egrep', "^libvirt-[0-9]"])
-    if ver == "":
-        return 100, "No libvirt installed"
-    else:
-        return 0, ver
-
-def get_libvirt_pyth_ver():
-    ver = childprocess(['rpm', '-qa'], ['egrep', "^libvirt-python-[0-9]"])
-    if ver == "":
-        return 100, "No libvirt-python installed"
+import commands
+import libvirt
+import sharedmod
+
+def check_libvirt(logger):
+    virsh = 'virsh -v'
+    status, output = commands.getstatusoutput(virsh)
+    if status:
+        logger.error(output)
+        return 1
     else:
-        return 0, ver
-
-def get_libvirt_cli_ver():
-    ver = childprocess(['rpm', '-qa'], ['egrep', "^libvirt-client-[0-9]"])
-    if ver == "":
-        return 100, "No libvirt-client installed"
+        logger.info("    Virsh command line tool of libvirt: %s" % output)
+
+    libvirtd = 'libvirtd --version'
+    status, output = commands.getstatusoutput(libvirtd)
+    logger.info("    %s" % output)
+    if status:
+        return 1
+
+    default_uri = 'virsh uri'
+    status, output = commands.getstatusoutput(default_uri)
+    if status:
+        logger.error(output)
+        return 1
     else:
-        return 0, ver
-
-def get_qemu_kvm_ver():
-    ver = childprocess(['rpm', '-qa'], ['egrep', "qemu-kvm-[0-9]"])
-    if ver == "":
-        return 150, "No qemu-kvm installed"
-    else:
-        return 0, ver
+        logger.info("    default uri: %s" % output.strip())
+
+    if 'qemu' in output:
+        qemu = 'qemu --version'
+        status, output = commands.getstatusoutput(qemu)
+        logger.info("    %s" % output)
+        if status:
+            return 1
+    elif 'xen' in output:
+        #TODO need to get xen hypervisor info here
+        pass
+
+    return 0
+
+def hostinfo(logger):
+    command = 'uname -a'
+    status, output = commands.getstatusoutput(command)
+    logger.info("    %s" % output)
+    if status:
+        return 1
+    return 0
+
+def request_credentials(credentials, user_data):
+    for credential in credentials:
+        if credential[0] == libvirt.VIR_CRED_AUTHNAME:
+            credential[4] = user_data[0]
+
+            if len(credential[4]) == 0:
+                credential[4] = credential[3]
+        elif credential[0] == libvirt.VIR_CRED_PASSPHRASE:
+            credential[4] = user_data[1]
+        else:
+            return -1
 
-def get_kernel_ver():
-    ver = childprocess(['rpm', '-qa'], ['egrep', "^kernel-[0-9]"])
-    if ver == "":
-        return 100, "No kernel installed"
-    else:
-        return 0, ver
+    return 0
 
+def sharemod_init(env_parser, logger):
+    """ get connection object from libvirt module
+        initialize sharemod for use by testcases
+    """
+    uri = env_parser.get_value('variables', 'defaulturi')
+    username = env_parser.get_value('variables', 'username')
+    password = env_parser.get_value('variables', 'password')
+    user_data = [username, password]
+    auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_PASSPHRASE], request_credentials, user_data]
+    conn = libvirt.openAuth(uri, auth, 0)
+    if not conn:
+        logger.error("Failed to setup libvirt connection");
+        return 1
+
+    # initialize conn object in sharedmod
+    sharedmod.conn = conn
+    return 0
 
 class EnvInspect(object):
     """to check and collect the testing enviroment infomation
        before performing testing
     """
 
-    def __init__(self, logger):
+    def __init__(self, env_parser, logger):
         self.logger = logger
+        self.env_parser = env_parser
 
     def env_checking(self):
-        flag = 0
-        result = ""
-        if get_libvirt_ver()[0] == 100:
-            result = NOTOK
-            flag = 1
-        else:
-            result = OK
-        self.logger.info("    %-36s%-6s" % (get_libvirt_ver()[1], result))
-
-        if get_libvirt_pyth_ver()[0] == 100:
-            result = NOTOK
-            flag = 1
-        else:
-            result = OK
-        self.logger.info("    %-36s%-6s" % (get_libvirt_pyth_ver()[1], result))
+        if hostinfo(self.logger):
+            return 1
 
-        if get_libvirt_cli_ver()[0] == 100:
-            result = NOTOK
-            flag = 1
-        else:
-            result = OK
-        self.logger.info("    %-36s%-6s" % (get_libvirt_cli_ver()[1], result))
-
-        if get_qemu_kvm_ver()[0] == 150 and flag == 0:
-            flag = 0
-        elif get_qemu_kvm_ver()[0] == 150 and flag == 1:
-            flag = 1
-        else:
-            pass
-        self.logger.info("    %-36s%-6s" % (get_qemu_kvm_ver()[1], OK))
-
-        if get_kernel_ver()[0] == 100:
-            result = NOTOK
-            flag = 1
-        else:
-            result = OK
-        self.logger.info("    %-36s%-6s" % (get_kernel_ver()[1], result))
+        if check_libvirt(self.logger):
+            return 1
 
-        return flag
+        if sharemod_init(self.env_parser, self.logger):
+            return 1
 
+        return 0
 
-OK = "ok"
-NOTOK = "not ok"
+    def close_hypervisor_connection(self):
+        shared_conn = sharedmod.conn
+        if shared_conn:
+            shared_conn.close()
+            shared_conn = None
+        return 0
diff --git a/generator.py b/generator.py
index 0af4227..d7cd985 100644
--- a/generator.py
+++ b/generator.py
@@ -20,6 +20,7 @@
 import time
 import fcntl
 import sys
+import os
 import traceback
 
 import mapper
@@ -30,7 +31,6 @@ from utils.Python import env_parser
 # Import of distribution-specific code.  If this is needed somewhere
 # else in the future, please don't copy-paste this, but create some
 # sensible distribution-specific package
-import os
 for dist in os.listdir('dist'):
     if os.path.exists('/etc/%s-release' % dist):
         exec('from dist.%s import env_inspect' % dist)
@@ -119,7 +119,7 @@ class FuncGen(object):
         start_time = time.strftime("%Y-%m-%d %H:%M:%S")
 
         env_logger.info("Checking Testing Environment... ")
-        envck = env_inspect.EnvInspect(env_logger)
+        envck = env_inspect.EnvInspect(self.env, env_logger)
 
         if envck.env_checking() == 1:
             sys.exit(1)
@@ -157,15 +157,6 @@ class FuncGen(object):
             clean_ret = -1
             try:
                 try:
-                    # Get default uri from env.cfg, if the uri is defined in
-                    # case config file, the value will be overrode.
-                    if 'uri' not in case_params:
-                        case_params['uri'] = self.env.get_value("variables", "defaulturi")
-                    if 'username' not in case_params:
-                        case_params['username'] = self.env.get_value("variables", "username")
-                    if 'password' not in case_params:
-                        case_params['password'] = self.env.get_value("variables", "password")
-
                     if case_ref_name != 'sleep':
                         case_params['logger'] = case_logger
 
@@ -211,6 +202,8 @@ class FuncGen(object):
                     else:
                         self.fmt.print_string(21*" " + "Fail", env_logger)
 
+        # close hypervisor connection
+        envck.close_hypervisor_connection()
         end_time = time.strftime("%Y-%m-%d %H:%M:%S")
 
         env_logger.info("\nSummary:")
-- 
1.7.7.5




More information about the libvir-list mailing list