Yogananth Subramanian wrote:
# HG changeset patch
# User anantyog(a)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(a)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(a)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
+
+@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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-cim
--
Kaitlin Rupert
IBM Linux Technology Center
kaitlin(a)linux.vnet.ibm.com