[PATCH] [TEST]#2 Fixed the RASD/07_parent_disk_pool.py

# HG changeset patch # User Deepti B.Kalakeri <deeptik@linux.vnet.ibm.com> # Date 1248103418 25200 # Node ID fc0ce87139b4f1e8a1967e927bf28e442ca3175d # Parent 14b666e2a803048c1ce4e71b550a49c62915b3a3 [TEST]#2 Fixed the RASD/07_parent_disk_pool.py Patch 2: ------- 1) Improved the code Verified with KVM and current sources on F10 and SLES11. Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com> diff -r 14b666e2a803 -r fc0ce87139b4 suites/libvirt-cim/cimtest/RASD/07_parent_disk_pool.py --- a/suites/libvirt-cim/cimtest/RASD/07_parent_disk_pool.py Thu Jul 16 07:28:51 2009 -0700 +++ b/suites/libvirt-cim/cimtest/RASD/07_parent_disk_pool.py Mon Jul 20 08:23:38 2009 -0700 @@ -37,7 +37,7 @@ # -PoolID="DiskPool/0" # -Type=3 [ For Type 1 and 2 as well ] # -Path="/dev/null" -# -DevicePath= +# -DevicePaths= # -Host="host_sys.domain.com" # -SourceDirectory="/var/lib/images" # @@ -45,13 +45,51 @@ import sys from sets import Set +from copy import copy from CimTest.Globals import logger from XenKvmLib.const import do_main from CimTest.ReturnCodes import PASS, FAIL from XenKvmLib.pool import get_pool_rasds sup_types = ['KVM', 'Xen', 'XenFV'] -DISKPOOL_REC_LEN = 3 +DISKPOOL_REC_LEN = 7 + +def init_list(): + pval = "/dev/null" + ptype1 = { 'ResourceType' : 17, + 'PoolID' : "DiskPool/0", + 'Type' : 1L, 'DevicePaths': None, + 'Host' : None, 'SourceDirectory': None, + 'Path' : pval } + + ptype2 = ptype1.copy() + ptype2['Type'] = 2L + ptype2['DevicePaths'] = [u'/dev/sda100'] + + ptype3 = ptype1.copy() + ptype3['Type'] = 3L + ptype3['Host'] = u'host_sys.domain.com' + ptype3['SourceDirectory'] = u'/var/lib/images' + + ptype4 = ptype1.copy() + ptype4['Type'] = 4L + ptype4['DevicePaths'] = [u'/dev/VolGroup00/LogVol100'] + + ptype5 = ptype1.copy() + ptype5['Type'] = 5L + ptype5['DevicePaths'] = [u'iscsi-target'] + ptype3['Host'] = u'host_sys.domain.com' + + ptype6 = ptype1.copy() + ptype6['Type'] = 6L + + ptype7 = ptype1.copy() + ptype7['Type'] = 7L + ptype7['Path'] = '/dev/disk/by-id' + + exp_t_dp_h_sdir_path = [ ptype1, ptype2, ptype3, ptype4, + ptype5, ptype6, ptype7 ] + return exp_t_dp_h_sdir_path def get_rec(diskpool_rasd, inst_id='Default'): recs = [] @@ -70,16 +108,9 @@ if status != PASS: return status inst_list = [ 'Default', 'Minimum', 'Maximum', 'Increment' ] - n_rec_val = { 'ResourceType' : 17, - 'PoolID' : "DiskPool/0", - 'Path' : "/dev/null", - } - exp_type_path_host_dir = [('1', 'None', 'None', 'None'), - ('2', '/dev/sda100', 'None', 'None'), - ('3', 'None', 'host_sys.domain.com', - '/var/lib/images')] - - + + exp_t_dp_h_sdir_path = init_list() + for inst_type in inst_list: logger.info("Verifying '%s' records", inst_type) @@ -89,23 +120,30 @@ raise Exception("Got %s recs instead of %s" %(len(n_rec), DISKPOOL_REC_LEN)) - res_type_path_host_dir = [] for rec in n_rec: - l = (str(rec['Type']), str(rec['DevicePath']), - str(rec['Host']), str(rec['SourceDirectory'])) - res_type_path_host_dir.append(l) + found = False + for item in exp_t_dp_h_sdir_path: + if rec['Type'] == item['Type']: + found = True + for key, val in item.iteritems(): + exp_val = val + res_val = rec[key] + if type(val).__name__ == 'list': + cmp_exp = (len(Set(res_val) - \ + Set(exp_val)) != 0) + elif type(val).__name__ != 'NoneType': + cmp_exp = (exp_val != res_val) + elif type(val).__name__ == 'NoneType': + continue - if len(Set(exp_type_path_host_dir) & Set(res_type_path_host_dir)) \ - != DISKPOOL_REC_LEN : - raise Exception("Mismatching values, \nGot %s,\nExpected %s"\ - %(exp_type_path_host_dir, - res_type_path_host_dir)) + if cmp_exp: + raise Exception("Mismatching values, "\ + "\nGot %s, \nExpected %s"\ + % (res_val, exp_val)) - for key in n_rec_val.keys(): - for rec in n_rec: - if n_rec_val[key] != rec[key]: - raise Exception("'%s' Mismatch, Got %s, Expected %s" \ - % (key, rec[key], n_rec_val[key])) + if found == False: + raise Exception("Failed to get records for pooltype" \ + " %s" % rec['Type']) except Exception, details: logger.error("Exception details: %s", details)

+def init_list(): + pval = "/dev/null" + ptype1 = { 'ResourceType' : 17, + 'PoolID' : "DiskPool/0", + 'Type' : 1L, 'DevicePaths': None, + 'Host' : None, 'SourceDirectory': None, + 'Path' : pval } + + ptype2 = ptype1.copy() + ptype2['Type'] = 2L + ptype2['DevicePaths'] = [u'/dev/sda100'] + + ptype3 = ptype1.copy() + ptype3['Type'] = 3L + ptype3['Host'] = u'host_sys.domain.com' + ptype3['SourceDirectory'] = u'/var/lib/images' + + ptype4 = ptype1.copy() + ptype4['Type'] = 4L + ptype4['DevicePaths'] = [u'/dev/VolGroup00/LogVol100'] + + ptype5 = ptype1.copy() + ptype5['Type'] = 5L + ptype5['DevicePaths'] = [u'iscsi-target'] + ptype3['Host'] = u'host_sys.domain.com' + + ptype6 = ptype1.copy() + ptype6['Type'] = 6L + + ptype7 = ptype1.copy() + ptype7['Type'] = 7L + ptype7['Path'] = '/dev/disk/by-id'
Can you include some comments here? It's not clear which pool type has which values set. Instead of using comments, you could define the pool type values in pool.py. Then you could do something like: ptype6['Type'] = LOGICAL_POOL - this will make it easier to tell which type is which.
+ + exp_t_dp_h_sdir_path = [ ptype1, ptype2, ptype3, ptype4, + ptype5, ptype6, ptype7 ]
I would use more descriptive names... instead of ptype1, use something like dir, fs, etc - that'll also make it more clear which dictionary belongs to a given pool.
+ return exp_t_dp_h_sdir_path
def get_rec(diskpool_rasd, inst_id='Default'): recs = [] @@ -70,16 +108,9 @@ if status != PASS: return status inst_list = [ 'Default', 'Minimum', 'Maximum', 'Increment' ] - n_rec_val = { 'ResourceType' : 17, - 'PoolID' : "DiskPool/0", - 'Path' : "/dev/null", - } - exp_type_path_host_dir = [('1', 'None', 'None', 'None'), - ('2', '/dev/sda100', 'None', 'None'), - ('3', 'None', 'host_sys.domain.com', - '/var/lib/images')] - - + + exp_t_dp_h_sdir_path = init_list() + for inst_type in inst_list: logger.info("Verifying '%s' records", inst_type)
@@ -89,23 +120,30 @@ raise Exception("Got %s recs instead of %s" %(len(n_rec), DISKPOOL_REC_LEN))
- res_type_path_host_dir = [] for rec in n_rec: - l = (str(rec['Type']), str(rec['DevicePath']), - str(rec['Host']), str(rec['SourceDirectory'])) - res_type_path_host_dir.append(l) + found = False + for item in exp_t_dp_h_sdir_path: + if rec['Type'] == item['Type']: + found = True + for key, val in item.iteritems(): + exp_val = val + res_val = rec[key] + if type(val).__name__ == 'list': + cmp_exp = (len(Set(res_val) - \ + Set(exp_val)) != 0) + elif type(val).__name__ != 'NoneType': + cmp_exp = (exp_val != res_val) + elif type(val).__name__ == 'NoneType': + continue
This is a lot of indention. Can some of this be moved out to a helper function? -- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com
participants (2)
-
Deepti B. Kalakeri
-
Kaitlin Rupert