Kaitlin Rupert wrote:
Deepti B. Kalakeri wrote:
> # HG changeset patch
> # User Deepti B. Kalakeri <deeptik(a)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(a)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(a)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?
> + }
> +
> +
> +@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.
Other pool types would require user to give inputs. So I found netfs the
only option to verify the error.
Any suggestion for the pool types ?
> +
> + 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(a)redhat.com
>
https://www.redhat.com/mailman/listinfo/libvirt-cim
--
Thanks and Regards,
Deepti B. Kalakeri
IBM Linux Technology Center
deeptik(a)linux.vnet.ibm.com