[Libvirt-cim] [PATCH 2 of 2] [TEST] Added new tc to verify the RPCS error values

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Tue Sep 8 22:05:51 UTC 2009


Deepti B. Kalakeri wrote:
> # HG changeset patch
> # User Deepti B. Kalakeri <deeptik at linux.vnet.ibm.com>
> # Date 1252394401 25200
> # Node ID 465cfe3802c691e2315dc47eb07790df6c96fb77
> # Parent  fdc0d9aef3427500032bbd35caba0e5977be47f6
> [TEST] Added new tc to verify the RPCS error values.
> 
>  This test case verifies the creation of the StorageVol using the
>  CreateResourceInPool method of RPCS returns an error when invalid values
>  are passed.
>  The test case checks for the errors when:
>  1) FormatType field in the StoragePoolRASD set to value other than RAW_TYPE
>  2) Trying to create a Vol in a netfs storage pool
>  3) Trying to create 2 Vol in the same Path
> 
> Tested with KVM and current sources on SLES11.
> Signed-off-by: Deepti B. Kalakeri <deeptik at linux.vnet.ibm.com>
> 
> diff -r fdc0d9aef342 -r 465cfe3802c6 suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/11_create_storagevolume_errs.py
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/suites/libvirt-cim/cimtest/ResourcePoolConfigurationService/11_create_storagevolume_errs.py	Tue Sep 08 00:20:01 2009 -0700
> @@ -0,0 +1,226 @@
> +#!/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
> +#
> +#
> +# This test case verifies the creation of the StorageVol using the 
> +# CreateResourceInPool method of RPCS returns an error when invalid values
> +# are passed.
> +# The test case checks for the errors when:
> +# 1) FormatType field in the StoragePoolRASD set to value other than RAW_TYPE
> +# 2) Trying to create a Vol in a netfs storage pool
> +# 3) Trying to create 2 Vol in the same Path
> +#
> +#                                                   -Date: 04-09-2009
> +
> +import sys
> +import os
> +from VirtLib import utils
> +from random import randint
> +from pywbem.cim_types import Uint64
> +from pywbem import CIM_ERR_FAILED, CIMError
> +from CimTest.Globals import logger
> +from CimTest.ReturnCodes import FAIL, PASS, SKIP
> +from XenKvmLib.const import do_main, platform_sup, default_pool_name, \
> +                            get_provider_version
> +from XenKvmLib.rasd import libvirt_rasd_storagepool_changes
> +from XenKvmLib import rpcs_service
> +from XenKvmLib.assoc import Associators
> +from XenKvmLib.enumclass import GetInstance, EnumNames
> +from XenKvmLib.xm_virt_util import virsh_version
> +from XenKvmLib.classes import get_typed_class, inst_to_mof
> +from XenKvmLib.common_util import destroy_diskpool, nfs_netfs_setup, \
> +                                  netfs_cleanup
> +from XenKvmLib.pool import create_pool, undefine_diskpool, RAW_VOL_TYPE, \
> +                           DIR_POOL, NETFS_POOL,  \
> +                           get_stovol_rasd_from_sdc, get_stovol_default_settings
> +
> +dir_pool_attr = { "Path" : "/tmp" }
> +vol_name = "cimtest-vol.img"
> +
> +INVALID_FTYPE = RAW_VOL_TYPE + randint(20,100)
> +exp_err_no = CIM_ERR_FAILED
> +exp_err_values = { 'INVALID_FTYPE': { 'msg'   : "Unable to generate XML "\
> +                                                "for new resource" },
> +                   'NETFS_POOL'   : { 'msg'   : "This function does not "\
> +                                                "support this resource type"},
> +		   'DUP_VOL_PATH' : { 'msg' : "Unable to create storage volume"}

Can you line up the third entry with the other two?

> +                 }
> +

> +
> + at do_main(platform_sup)
> +def main():
> +    options = main.options
> +    server = options.ip
> +    virt = options.virt
> +
> +    libvirt_ver = virsh_version(server, virt)
> +    cim_rev, changeset = get_provider_version(virt, server)
> +    if libvirt_ver < "0.4.1" and cim_rev < libvirt_rasd_storagepool_changes:
> +        logger.info("Storage Volume creation support is available with Libvirt" 
> +                    "version >= 0.4.1 and Libvirt-CIM rev '%s'", 
> +                    libvirt_rasd_storagepool_changes)
> +        return SKIP
> +
> +    dp_types = { "NETFS_POOL" : NETFS_POOL }
> +    dp_types['DUP_VOL_PATH'] = dp_types['INVALID_FTYPE'] = DIR_POOL
> +    dp_cn = "DiskPool"
> +    exp_vol_path = "%s/%s" % (dir_pool_attr['Path'], vol_name)
> +    
> +    for pool_name, pool_type in dp_types.iteritems():
> +        status = FAIL     
> +        clean_pool=True
> +        try:
> +            status, pool_attr = get_pool_attr(server, pool_type, dp_types)
> +            if status != PASS:
> +                return status
> +
> +            # err_key will contain either INVALID_FTYPE/DUP_VOL_PATH/NETFS_POOL
> +            # to be able access the err mesg
> +            err_key = pool_name 
> +
> +            if pool_type == DIR_POOL:
> +                pool_name = default_pool_name
> +                clean_pool=False
> +            else:
> +                # Creating NETFS pool to verify RPCS error
> +                status = create_pool(server, virt, pool_name, pool_attr, 
> +                                     mode_type=pool_type, pool_type=dp_cn)

A netfs pool requires a nfsserver running on the system, and not all 
systems have nfs installed. So I wouldn't use the netfs type pool in 
this test.

> +
> +                if status != PASS:
> +                    logger.error("Failed to create pool '%s'", pool_name)
> +                    return status
> +
> +            sv_rasd = get_stovol_default_settings(virt, server, dp_cn, pool_name, 
> +                                                  exp_vol_path, vol_name)
> +            if sv_rasd == None:
> +                raise Exception("Failed to get the defualt StorageVolRASD info")
> +
> +            if err_key == "INVALID_FTYPE":
> +                sv_rasd['FormatType'] = Uint64(INVALID_FTYPE)
> +
> +            sv_settings = inst_to_mof(sv_rasd)

Looks like you don't use sv_settings elsewhere in the test, so include 
this line in verify_vol_err().

> +
> +            dp_inst = get_diskpool(server, virt, dp_cn, pool_name)
> +            if dp_inst == None:
> +                raise Exception("DiskPool instance for '%s' not found!" \
> +                                % pool_name)
> +
> +            status = verify_vol_err(server, virt, sv_settings, dp_inst, err_key)
> +            if status != PASS :
> +                raise Exception("Failed to verify the Invlaid '%s' ", err_key)
> +
> +            if err_key == 'NETFS_POOL':
> +                netfs_cleanup(server, pool_attr)
> +        
> +        except Exception, details:
> +            logger.error("Exception details: %s", details)
> +            status = FAIL
> +            if err_key == 'NETFS_POOL':
> +                netfs_cleanup(server, pool_attr)
> +            break

I would have the try / except block outside of the for loop so you don't 
need to break from the look.  Raising the exception should be enough to 
break you out of the loop.

> +
> +        cleanup_pool_vol(server, virt, pool_name, clean_pool, exp_vol_path)
> +        
> +    return status
> +if __name__ == "__main__":
> +    sys.exit(main())
> 
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim


-- 
Kaitlin Rupert
IBM Linux Technology Center
kaitlin at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list