[Libvirt-cim] [PATCH] [TEST] Adding new tc to verify Libvirt-CIM profile advertisement via slp

Deepti B. Kalakeri deeptik at linux.vnet.ibm.com
Fri Nov 20 19:08:28 UTC 2009


# HG changeset patch
# User Deepti B. Kalakeri<deeptik at linux.vnet.ibm.com>
# Date 1258744084 28800
# Node ID b4b4e5f9b7efad90d37e06a2583d2a426b291d8e
# Parent  c7561bf6112633f00d6bfb2ba1871ef63855d529
[TEST] Adding new tc to verify Libvirt-CIM profile advertisement via slp.


Tested with KVM and current sources on rhel5.4.
Signed-off-by: Deepti B. Kalakeri <deeptik at linux.vnet.ibm.com>

diff -r c7561bf61126 -r b4b4e5f9b7ef suites/libvirt-cim/cimtest/Profile/04_verify_libvirt_cim_slp_profiles.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/suites/libvirt-cim/cimtest/Profile/04_verify_libvirt_cim_slp_profiles.py	Fri Nov 20 11:08:04 2009 -0800
@@ -0,0 +1,188 @@
+#! /usr/bin/python
+#
+# Copyright 2009 IBM Corp.
+#
+# Authors:
+#    Deepti B. Kalakeri <dkalaker at in.ibm.com>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
+#
+# The following test case is used to verify the profiles registered by 
+# Libvirt-CIM  are advertised via slp tool.
+#  
+#                                          Date : 20-10-2009 
+
+import sys
+import os
+import string
+from sets import Set
+from socket import gethostbyaddr
+from VirtLib.utils import run_remote
+from XenKvmLib import enumclass
+from XenKvmLib.classes import get_typed_class
+from CimTest import Globals
+from CimTest.Globals import logger
+from XenKvmLib.const import do_main
+from CimTest.ReturnCodes import PASS, FAIL, SKIP
+
+sup_types = ['Xen', 'KVM', 'XenFV', 'LXC']
+slp_path="/usr/bin/slptool"
+
+def  get_slp_info(server):
+
+    if not os.path.exists(slp_path):
+        logger.error("Slp tool does not exist on the machine ")
+        return SKIP
+
+    logger.info("Slp tool found on the machine ....")
+
+    # The test is written to work with Pegasus for now.
+    # In future we can include sfcb support as well
+    # When sfcb support will be planned then replace the following check 
+    # with check_cimom() fn of common_util.py lib
+    cmd = "ps -ef | grep -v grep | grep cimserver"
+    rc, out = run_remote(server, cmd)
+    if rc != 0:
+        logger.error("cimserver not found on '%s'", server)
+        return FAIL
+
+    cmd = "cimconfig -l -p | grep slp"
+    rc, out = run_remote(server, cmd)
+    if rc != 0:
+        logger.error("slp is not enabled in the cimserver on '%s'", server)
+        return FAIL
+
+    return PASS
+
+def get_slp_attrs(server):
+    slp_attrs = None
+    status = FAIL
+
+    cmd = "%s findsrvs service:wbem  | grep -w http | "\
+          "grep -e '%s'" % (slp_path, server)
+    rc, out = run_remote(server, cmd)
+    if rc != 0:
+        logger.error("Failed to find slp service on '%s'", server)
+        return status, slp_attrs
+
+    attrs_in = out.rsplit(",")
+    slp_query = attrs_in[0]
+    cmd = "%s findattrs %s" % (slp_path, slp_query)
+    rc, slp_attrs = run_remote(server, cmd)
+    if len(slp_attrs) == 0:
+        # Getting the query and the port details
+        slp_query_info = slp_query.rsplit(":", 1)
+        slp_service_query = slp_query_info[0]
+        port_used = slp_query_info[1]
+        logger.info("Did not get the profile information for '%s'", slp_query)
+        logger.info("Trying with ports other than '%s'....", port_used)
+
+        # Remove the already used port information 
+        ports = attrs_in.remove(slp_query)
+        for port in attrs_in:
+            new_slp_query = slp_service_query + ":" +  port
+            cmd = "%s findattrs %s" % (slp_path, new_slp_query)
+            rc, slp_attrs = run_remote(server, cmd)
+            if len(slp_attrs) != 0:    
+                break
+
+    if len(slp_attrs) != 0:
+        status = PASS
+
+    return status, slp_attrs
+
+def filter_reg_name_from_slp(slp_attrs):
+    slp_profile_list = []
+
+    for line in slp_attrs.split('\n'):
+        lines=line.split("RegisteredProfilesSupported")
+        dmtf_profiles=lines[1].split("DMTF")
+        for profile in dmtf_profiles:
+            temp_reg_ele =  profile.rsplit(":", 1)[1].rstrip(",")
+            reg_prof_name = temp_reg_ele.rstrip(")")
+            slp_profile_list.append(reg_prof_name)
+
+    slp_profile_list = Set(slp_profile_list)
+
+    return slp_profile_list
+
+def get_libvirt_cim_profile_info(server, virt):
+    libvirt_cim_reg_list = None
+    status = FAIL
+    prev_namespace = Globals.CIM_NS
+    Globals.CIM_NS = 'root/interop'
+    cn = get_typed_class(virt, 'RegisteredProfile')
+
+    try: 
+        proflist = enumclass.EnumInstances(server, cn)
+    except Exception, detail:
+        logger.error(CIM_ERROR_ENUMERATE, get_typed_class(virt, cn))
+        logger.error("Exception: %s", detail)
+        Globals.CIM_NS = prev_namespace
+        return status, libvirt_cim_reg_list
+    
+    Globals.CIM_NS = prev_namespace
+
+    libvirt_cim_reg_list = Set([str(x.RegisteredName) for x in proflist])
+    if len(libvirt_cim_reg_list) != 0:
+        status = PASS
+        
+    return status, libvirt_cim_reg_list
+   
+
+ at do_main(sup_types)
+def main():
+    options = main.options
+    server = options.ip
+    virt = options.virt
+    status = FAIL
+
+    # Making sure that the server information passed is 
+    # hostname or ip address
+    if server == "localhost":
+        logger.error("Please specify hostname or ip address, than '%s'", 
+                      server)
+        return SKIP
+   
+    status = get_slp_info(server)
+    if status != PASS:
+        return status 
+
+    ip_addr = gethostbyaddr(server)[2][0]
+    status, slp_attrs = get_slp_attrs(ip_addr)
+    if status != PASS:
+        logger.error("Failed to get slp attributes on %s", server)
+        return status
+
+    slp_profile_list = filter_reg_name_from_slp(slp_attrs)
+
+    status, libvirt_cim_reg_list = get_libvirt_cim_profile_info(server, virt)
+    if status != PASS:
+        logger.error("Failed to enumerate profile information on %s", server)
+        return status
+
+    # Make sure all the Libvirt-CIM profiles are advertised via slp
+    if (libvirt_cim_reg_list) <= (slp_profile_list):
+        logger.info("Successfully verified the Libvirt-CIM profiles")
+        return PASS
+    else:
+        logger.error("Mismatch in the profiles registered")
+        logger.error("Slp returned profile --> %s,\n Libvirt-CIM expected "
+                     "profiles %s", slp_profile_list, libvirt_cim_reg_list)
+        return FAIL
+
+if __name__=="__main__":
+    sys.exit(main())
+




More information about the Libvirt-cim mailing list