[Libvirt-cim] [PATCH] [TEST] #2 Adding KVM and XenFV support to 41_cs_to_settingdefinestate.py

Deepti B. Kalakeri deeptik at linux.vnet.ibm.com
Tue Aug 12 05:48:20 UTC 2008


# HG changeset patch
# User Deepti B. Kalakeri <deeptik at linux.vnet.ibm.com>
# Date 1218520092 25200
# Node ID 20f581053105b42a48b5a13c09d0e193aa953051
# Parent  98f69895a4dcc3d314d41611cf67f51329e15a44
[TEST] #2 Adding KVM and XenFV support to 41_cs_to_settingdefinestate.py.

Changes:
--------
Patch 2:
-------
1) Modified the comments to make it more generic to Virt types.

Patch 1:
--------
1) Added support for XenFV, KVM.
2) Removed get_inst_from_list().
3) Used poll_for_state_change to get the CS instance and also verify the enabled state is set to 2
4) Also verifying that the RequestedState is set to 0 when the VS is created.

Tested with Xen, XenFV and KVM on latest sources.

Signed-off-by: Deepti B. Kalakeri <deeptik at linux.vnet.ibm.com>

diff -r 98f69895a4dc -r 20f581053105 suites/libvirt-cim/cimtest/ComputerSystem/41_cs_to_settingdefinestate.py
--- a/suites/libvirt-cim/cimtest/ComputerSystem/41_cs_to_settingdefinestate.py	Fri Aug 08 11:01:29 2008 -0700
+++ b/suites/libvirt-cim/cimtest/ComputerSystem/41_cs_to_settingdefinestate.py	Mon Aug 11 22:48:12 2008 -0700
@@ -37,9 +37,9 @@
 # Steps:
 # ------
 # 1) Create a guest domain.  
-# 2) Enumerate ComputerSystem.
-# 3) Select the guest domain from the output and create info list for the guest domain
-#    to be used later for comparison.
+# 2) Enumerate ComputerSystem and Select the guest domain from the output 
+#    and and verify the EnabledState is 2.
+# 3) Create info list for the guest domain to be used later for comparison.
 # 4) Get the various devices allocated to the domain by using the SystemDevice
 #    association and giving the ComputerSystem output from the previous enumeration 
 #    as inputs to the association. 
@@ -70,26 +70,31 @@ from XenKvmLib import rasd
 from XenKvmLib import rasd
 from XenKvmLib.rasd import verify_procrasd_values, verify_netrasd_values, \
 verify_diskrasd_values, verify_memrasd_values, rasd_init_list
+from XenKvmLib.common_util import poll_for_state_change
+from XenKvmLib.classes import get_typed_class
 
-sup_types = ['Xen']
+sup_types = ['Xen', 'XenFV', 'KVM']
 
 test_dom    = "CrossClass_GuestDom"
 test_vcpus  = 1
 test_mem    = 128
 test_mac    = "00:11:22:33:44:aa"
-test_disk = "xvda"
 
 def vssd_init_list(virt):
     """
         Creating the lists that will be used for comparisons.
     """
+    if virt == 'XenFV':
+        virt = 'Xen'
+
     vssd_values = { 
-                      'Caption'                 : "Virtual System", \
-                      'InstanceID'              : '%s:%s' % (virt, test_dom), \
-                      'ElementName'             : test_dom, \
-                      'VirtualSystemIdentifier' : test_dom, \
-                      'VirtualSystemType'       : virt, \
-                      'Classname'               : "Xen_VirtualSystemSettingData"
+                      'Caption'                 : "Virtual System", 
+                      'InstanceID'              : '%s:%s' % (virt, test_dom),
+                      'ElementName'             : test_dom, 
+                      'VirtualSystemIdentifier' : test_dom,
+                      'VirtualSystemType'       : virt, 
+                      'Classname'               : get_typed_class(virt, 
+                                                  "VirtualSystemSettingData")
                   } 
 
     return vssd_values
@@ -99,19 +104,20 @@ def cs_init_list(cs_dom):
         Creating the lists that will be used for comparisons.
     """
     cs_values =  {
-                       'Caption'              : cs_dom.Caption,        \
-                       'EnabledState'         : cs_dom.EnabledState,   \
-                       'RequestedState'       : cs_dom.RequestedState, \
-                       'CreationClassName'    : cs_dom.CreationClassName, \
+                       'Caption'              : cs_dom.Caption,        
+                       'EnabledState'         : cs_dom.EnabledState,   
+                       'RequestedState'       : cs_dom.RequestedState, 
+                       'CreationClassName'    : cs_dom.CreationClassName, 
                        'Name'                 : cs_dom.Name
                  }
     return cs_values 
 
-def setup_env(server, virt):
+def setup_env(server, virt, test_disk):
     vsxml_info = None
     status = PASS
     destroy_and_undefine_all(server)
     virt_xml =  get_class(virt)
+
     vsxml_info = virt_xml(test_dom, mem = test_mem,
                           vcpus=test_vcpus,
                           mac = test_mac,
@@ -137,23 +143,7 @@ def vssd_sds_err( an, fieldname, ret_val
     logger.error(err)
     logger.error(detail)
 
-def get_inst_from_list(server, vsxml, cn, cs_list, exp_val):
-    status = PASS
-    ret = -1
-    inst = None 
-    for inst in cs_list:
-        if inst.Name == exp_val:
-            ret = PASS
-            break
-
-    if ret != PASS:
-        logger.error("%s with %s was not returned" % (cn, exp_val))
-        vsxml.destroy(server)
-        status = FAIL
-
-    return status, inst
-
-def get_associatornames_info(server, vsxml, cn, an, qcn, name):
+def get_associatornames_info(server, virt, vsxml, cn, an, qcn, name):
     status = PASS
     assoc_info = []
     try:
@@ -161,7 +151,8 @@ def get_associatornames_info(server, vsx
                                          an,
                                          cn,
                        CreationClassName=cn,
-                                Name = name)
+                                Name = name,
+                                  virt=virt)
         if len(assoc_info) < 1:
             logger.error("%s returned %i %s objects" % (an, len(assoc_info), qcn))
             status = FAIL
@@ -174,14 +165,15 @@ def get_associatornames_info(server, vsx
 
     return status, assoc_info
 
-def get_associators_info(server, vsxml, cn, an, qcn, instid):
+def get_associators_info(server, virt, vsxml, cn, an, qcn, instid):
     status = PASS
     assoc_info = []
     try:
         assoc_info = Associators(server,
                                      an,
                                      cn,
-                    InstanceID = instid)
+                    InstanceID = instid,
+                              virt=virt)
         if len(assoc_info) < 1:
             logger.error("%s returned %i %s objects" % 
                          (an, len(assoc_info), qcn))
@@ -208,31 +200,39 @@ def get_SDS_verify_RASD_build_vssdc_inpu
     status = PASS
     in_setting_define_state = {} 
     in_vssdc = {}
+    prasd = get_typed_class(virt, 'ProcResourceAllocationSettingData')
+    mrasd = get_typed_class(virt, 'MemResourceAllocationSettingData')
+    nrasd = get_typed_class(virt, 'NetResourceAllocationSettingData')
+    drasd = get_typed_class(virt, 'DiskResourceAllocationSettingData') 
+
     try:
-# Building the input for Xen_SettingsDefineState association.
+
+        # Building the input for SettingsDefineState association.
         for i in range(len(sd_assoc_info)):
             if sd_assoc_info[i]['SystemName'] == test_dom:
                 classname_keyvalue = sd_assoc_info[i]['CreationClassName']
                 deviceid =  sd_assoc_info[i]['DeviceID']
                 in_setting_define_state[classname_keyvalue] = deviceid
-# Expect the Xen_SystemDevice to return 4 logical device records.
-# one each for memory, network, disk and processor and hence 4.
-# and hence expect the in_setting_define_state to contain just 4 entries.
-        an  = "Xen_SystemDevice"
+
+        # Expect the SystemDevice to return 4 logical device records.
+        # one each for memory, network, disk and processor and hence 4.
+        # and hence expect the in_setting_define_state to contain just 4 entries.
+        an  = get_typed_class(virt, "SystemDevice")
         qcn = "Logical Devices"
         exp_len = 4
         if check_len(an, in_setting_define_state, qcn, exp_len) != PASS:
             return FAIL, in_setting_define_state
-# Get the rasd values that will be used to compare with the Xen_SettingsDefineState
-# output.
+
+        # Get the rasd values that will be used to compare with the SettingsDefineState
+        # output.
         status, rasd_values, in_list = rasd_init_list(vsxml, virt, test_disk, 
                                                       test_dom, test_mac, 
                                                       test_mem)
         if status != PASS:
-            return status
-
-        sccn = "Xen_ComputerSystem"
-        an = "Xen_SettingsDefineState"
+            return status, rasd_values
+        
+        sccn =  get_typed_class(virt,"ComputerSystem")
+        an   =  get_typed_class(virt,"SettingsDefineState")
         for cn, devid in sorted(in_setting_define_state.items()):
             assoc_info = Associators(server,
                                      an, 
@@ -240,10 +240,11 @@ def get_SDS_verify_RASD_build_vssdc_inpu
                                      DeviceID = devid,
                                      CreationClassName = cn,
                                      SystemName = test_dom,
-                                     SystemCreationClassName = sccn)
+                                     SystemCreationClassName = sccn,
+                                     virt=virt)
 
-# we expect only one RASD record to be returned for each device that is used to 
-# query with the Xen_SettingsDefineState association.
+            # we expect only one RASD record to be returned for each device that is used to 
+            # query with the SettingsDefineState association.
             if len(assoc_info) != 1:
                 logger.error("%s returned %i %s objects" % (an, len(assoc_info), cn))
                 status = FAIL
@@ -251,13 +252,13 @@ def get_SDS_verify_RASD_build_vssdc_inpu
             index = (len(assoc_info) - 1)
             rasd  = rasd_values[cn]
             CCName = assoc_info[index].classname
-            if  CCName == 'Xen_ProcResourceAllocationSettingData':
+            if  CCName == prasd:
                 status = verify_procrasd_values(assoc_info[index], rasd)
-            elif CCName == 'Xen_NetResourceAllocationSettingData':
+            elif CCName == nrasd:
                 status  = verify_netrasd_values(assoc_info[index], rasd)
-            elif CCName == 'Xen_DiskResourceAllocationSettingData':
+            elif CCName == drasd:
                 status = verify_diskrasd_values(assoc_info[index], rasd)
-            elif CCName == 'Xen_MemResourceAllocationSettingData':
+            elif CCName == mrasd:
                 status  = verify_memrasd_values(assoc_info[index], rasd)
             else:
                 status = FAIL
@@ -283,10 +284,11 @@ def verify_fields(an, field_name, vssd_c
 
 
 def verify_VSSD_values(assoc_info, vssd_values, an, qcn):
-# We expect that Xen_VirtualSystemSettingDataComponent returns only one 
-# Xen_VirtualSystemSettingData object when queried with disk, processor,
-# network and memory rasd's and all of them return the same output.
+    # We expect that VirtualSystemSettingDataComponent returns only one 
+    # VirtualSystemSettingData object when queried with disk, processor,
+    # network and memory rasd's and all of them return the same output.
     exp_len = 1
+
     if check_len(an, assoc_info, qcn, exp_len) != PASS:
         return FAIL
     vssd_assoc = assoc_info[0]
@@ -301,13 +303,14 @@ def verify_VSSD_values(assoc_info, vssd_
     if verify_fields(an, 'VirtualSystemType', vssd_assoc, vssd_values) != PASS:
         return FAIL
     if vssd_assoc.classname != vssd_values['Classname']:
-        vssd_sds_err(an, 'Classname', vssd_assoc.classname, \
-                                     vssd_values['Classname'])
+        vssd_sds_err(an, 'Classname', vssd_assoc.classname, 
+                     vssd_values['Classname'])
         return FAIL
     return PASS
 
 def verify_CS_values(assoc_info, cs_values, an, qcn):
     exp_len = 1
+
     if check_len(an, assoc_info, qcn, exp_len) != PASS:
         return FAIL
     cs_assoc = assoc_info[0]
@@ -327,60 +330,56 @@ def main():
 def main():
     server = main.options.ip
     virt   = main.options.virt
-    status, vsxml = setup_env(server, virt)
+    if virt == 'Xen':
+        test_disk = "xvda"
+    else:
+        test_disk = "hda"
+
+    status, vsxml = setup_env(server, virt, test_disk)
     if status != PASS:
         return status
 
-    cs_enum = computersystem.enumerate(server)
-    if len(cs_enum) == 0:
+    status, cs_dom  = poll_for_state_change(server, virt, test_dom, 2, 
+                                            timeout=10)
+    if status != PASS and cs_dom.RequestedState != 0:
         vsxml.destroy(server)
-        return status
-    cn = cs_enum[0].CreationClassName
-    status, cs_dom = get_inst_from_list(server,
-                                         vsxml,
-                                            cn,
-                                       cs_enum,
-                                      test_dom)
-    if status != PASS:
-        vsxml.destroy(server)
-        return status
+        return FAIL
 
-# Creating the cs info list which will be used later for comparison.
+    # Creating the cs info list which will be used later for comparison.
     cs_values = cs_init_list(cs_dom)
-    if cs_values['EnabledState'] != 2 :
-        logger.error("Improper EnabledState value set for domain %s", test_dom)
-        logger.error("Should have been 2 instead of %s", cs_values['EnabledState'])
-        vsxml.destroy(server)
-        return FAIL 
     
     cn        = cs_dom.CreationClassName
-    an        = 'Xen_SystemDevice'
+    an        = get_typed_class(virt, 'SystemDevice')
     qcn       = 'Logical Devices'
     name      = test_dom
-    status, sd_assoc_info = get_associatornames_info(server, vsxml, 
+    status, sd_assoc_info = get_associatornames_info(server, virt, vsxml, 
                                                      cn, an, qcn, name)
     if status != PASS or len(sd_assoc_info) == 0:
         return status
+
     status, in_vssdc_list = get_SDS_verify_RASD_build_vssdc_input(server, virt,
                                                                   vsxml, test_disk,
                                                                   sd_assoc_info)
     if status != PASS or len(in_vssdc_list) == 0 :
         vsxml.destroy(server)
         return status
-# Verifying that the in_vssdc_list contains 4 entries one each for mem rasd,
-# network rasd, processor rasd and disk rasd.
+
+    # Verifying that the in_vssdc_list contains 4 entries one each for mem rasd,
+    # network rasd, processor rasd and disk rasd.
     exp_len = 4
     if check_len(an, in_vssdc_list, qcn, exp_len) != PASS:
         vsxml.destroy(server)
         return FAIL 
-# Get the vssd values which will be used for verifying the Xen_VirtualSystemSettingData 
-# output from the Xen_VirtualSystemSettingDataComponent results.
+
+    # Get the vssd values which will be used for verifying the 
+    # VirtualSystemSettingData output from the 
+    # VirtualSystemSettingDataComponent results.
     vssd_values = vssd_init_list(virt)
-    an  = 'Xen_VirtualSystemSettingDataComponent'
-    qcn = 'Xen_VirtualSystemSettingData'
+    an  = get_typed_class(virt, 'VirtualSystemSettingDataComponent')
+    qcn = get_typed_class(virt, 'VirtualSystemSettingData')
     for cn, instid in sorted((in_vssdc_list.items())):
-        status, vssd_assoc_info = get_associators_info(server, vsxml, cn, an, qcn,
-                                                       instid)
+        status, vssd_assoc_info = get_associators_info(server, virt, vsxml, cn, 
+                                                       an, qcn, instid)
         if status != PASS or len(vssd_assoc_info) == 0:
             break 
         status = verify_VSSD_values(vssd_assoc_info, vssd_values, an, qcn)    
@@ -389,18 +388,22 @@ def main():
     if status != PASS:
         vsxml.destroy(server)
         return status
-# Since the Xen_VirtualSystemSettingDataComponent returns similar output when queried with 
-# every RASD, we are taking the output of the last associtaion query as inputs for 
-# querying Xen_SettingsDefineState.
+
+    # Since the VirtualSystemSettingDataComponent returns similar 
+    # output when queried with every RASD, we are taking the output of 
+    # the last associtaion query as inputs for 
+    # querying SettingsDefineState.
     cn     = vssd_assoc_info[0].classname
-    an     = 'Xen_SettingsDefineState'
-    qcn    = 'Xen_ComputerSystem'
+    an     = get_typed_class(virt, 'SettingsDefineState')
+    qcn    = get_typed_class(virt, 'ComputerSystem')
     instid = vssd_assoc_info[0]['InstanceID']
-    status, cs_assoc_info = get_associators_info(server, vsxml, cn, an, qcn, instid)
+    status, cs_assoc_info = get_associators_info(server, virt, vsxml, cn, 
+                                                 an, qcn, instid)
     if status != PASS or len(cs_assoc_info) == 0:
         return status
-# verify the results of Xen_SettingsDefineState with the cs_values list that was 
-# built using the output of the enumeration on Xen_ComputerSystem.
+
+    # verify the results of SettingsDefineState with the cs_values list that was 
+    # built using the output of the enumeration on ComputerSystem.
     status = verify_CS_values(cs_assoc_info, cs_values, an, qcn)
     vsxml.destroy(server)
     return status




More information about the Libvirt-cim mailing list