[Libvirt-cim] [PATCH] [Test](#3)Testcase to check for duplicate UUID

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Wed Aug 19 21:16:41 UTC 2009


Yogananth Subramanian wrote:
> # HG changeset patch
> # User anantyog at in.ibm.com
> # Date 1250681088 25200
> # Node ID 1d4ded063ea6b2fa3437b09e4cee6e71303a5723
> # Parent  5c08aeea7fa147dea06d6b1f0c75c2de70b4b0ae
> [Test](#3)Testcase to check for duplicate UUID
> Made changes based on comments from Deepti Kalakeri, renamed the test case to
> 06_duplicate_uuid.py.
> Thx
> yogi
> 
> Signed-off-by: Yogananth Subramanian <anantyog at linux.vnet.ibm.com>
> 
> diff -r 5c08aeea7fa1 -r 1d4ded063ea6 suites/libvirt-cim/cimtest/VSSD/06_duplicate_uuid.py
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/suites/libvirt-cim/cimtest/VSSD/06_duplicate_uuid.py	Wed Aug 19 04:24:48 2009 -0700
> @@ -0,0 +1,116 @@
> +#!/usr/bin/python
> +#
> +# Copyright 2009 IBM Corp.
> +#
> +# Authors:
> +#    Yogananth Subramanian <anantyog at linux.vnet.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
> +#
> +#Steps:
> +#1) Define 2 domains,'default' and 'test', both with random UUID
> +#2) Reset the uuid of the second domain, 'test', to the uuid of the
> +#   first domain, using ModifySystemSettings
> +#
> +
> +import sys
> +import time
> +from XenKvmLib import vsms
> +from XenKvmLib import vxml
> +from CimTest.Globals import logger
> +from CimTest.ReturnCodes import PASS, FAIL
> +from XenKvmLib.const import do_main
> +from XenKvmLib.classes import get_typed_class, inst_to_mof
> +from XenKvmLib.enumclass import GetInstance 
> +
> +sup_types = ['Xen', 'KVM', 'XenFV', 'LXC']
> +default_dom = 'uuid_domain'
> +test_dom = 'test_domain'
> +nmac = '99:aa:bb:cc:ee:ff'
> +
> +def get_vssd(ip, virt, default_dom):
> +    cn = get_typed_class(virt, "VirtualSystemSettingData") 
> +    inst = None
> +
> +    try:
> +        if virt == "XenFV": 
> +            virt = "Xen"
> +
> +        key_list = {"InstanceID" : "%s:%s" % (virt, default_dom) }
> +        inst = GetInstance(ip, cn, key_list, True)
> +
> +    except Exception, details:
> +        logger.error(details)
> +        return FAIL, inst
> +
> +    if inst is None:
> +        return FAIL, inst
> +
> +    return PASS, inst
> +
> + at do_main(sup_types)
> +def main():
> +    options = main.options 
> +
> +    service = vsms.get_vsms_class(options.virt)(options.ip)
> +
> +    cxml = vxml.get_class(options.virt)(default_dom)
> +    ret = cxml.cim_define(options.ip)
> +    if not ret:
> +        logger.error("Failed to define the dom: %s", default_dom)
> +        return FAIL
> +
> +    try:
> +        status, inst = get_vssd(options.ip, options.virt, default_dom)
> +        if status != PASS:
> +            raise Exception("Failed to get the VSSD instance for %s" % 
> +                             default_dom)
> +
> +        uuid_defaultdom = inst['UUID']

Older versions of the providers don't return the UUID.  So instead of 
getting the UUID from the VSSD, you can get the UUID from Virt_CS in 
older provider versions.

I think it's good to have the check for both to make sure both work.

> +
> +        sxml = vxml.get_class(options.virt)(test_dom, mac=nmac)
> +        ret = sxml.cim_define(options.ip)
> +        if not ret:
> +            raise Exception("Failed to define the dom: %s" % test_dom)
> +
> +        status, inst = get_vssd(options.ip, options.virt, test_dom)
> +        if status != PASS:
> +            raise Exception("Failed to get the VSSD instance for %s" %
> +                             test_dom)
> +
> +        inst['UUID'] = uuid_defaultdom
> +        vssd = inst_to_mof(inst)
> +        ret = service.ModifySystemSettings(SystemSettings=vssd)
> +        if ret[0] ==0:
> +            raise Exception("Was able to assign duplicate UUID to domain %s"
> +                             % test_dom)
> +
> +    except Exception, details:
> +        err_no   = details[0]
> +        err_desc = details[1]

If you hit an expected exception, details may or may not have two 
elements.  So check the len before indexing details.  If it doesn't have 
two elements, then it's an unexpected exception and the test should fail.

> +        if err_desc.find("domain 'uuid_domain' is already defined"):
> +            logger.info('Got expected error desc')
> +            status = PASS
> +        else:
> +             logger.error(details)
> +             status = FAIL 
> +
> +    sxml.undefine(options.ip)


It's possible to hit an exception before sxml is defined.  You should 
assign sxml to NONE before the try block.  Then check here to make sure 
it's not equal to None before calling undefine().

> +    cxml.undefine(options.ip)
> +    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