<html><body>
<p>+1<br>
<br>
Looks good. I will test it once IBM BZ 65164 is fixed.<br>
<br>
Sharad Mishra<br>
Open Virtualization<br>
Linux Technology Center<br>
IBM<br>
<br>
<img width="16" height="16" src="cid:1__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt="Inactive hide details for "Deepti B. Kalakeri" ---07/16/2010 02:09:13 AM---# HG changeset patch"><font color="#424282">"Deepti B. Kalakeri" ---07/16/2010 02:09:13 AM---# HG changeset patch</font><br>
<br>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td style="background-image:url(cid:2__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com); background-repeat: no-repeat; " width="40%">
<ul>
<ul>
<ul>
<ul><b><font size="2">"Deepti B. Kalakeri" <deeptik@linux.vnet.ibm.com></font></b><font size="2"> </font><br>
<font size="2">Sent by: libvirt-cim-bounces@redhat.com</font>
<p><font size="2">07/16/2010 02:05 AM</font>
<table border="1">
<tr valign="top"><td width="168" bgcolor="#FFFFFF"><div align="center"><font size="2">Please respond to<br>
List for discussion and development of libvirt CIM      <libvirt-cim@redhat.com></font></div></td></tr>
</table>
</ul>
</ul>
</ul>
</ul>
</td><td width="60%">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="1%"><img width="58" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<div align="right"><font size="2">To</font></div></td><td width="100%"><img width="1" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">libvirt-cim@redhat.com</font></td></tr>

<tr valign="top"><td width="1%"><img width="58" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<div align="right"><font size="2">cc</font></div></td><td width="100%"><img width="1" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""><br>
</td></tr>

<tr valign="top"><td width="1%"><img width="58" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<div align="right"><font size="2">Subject</font></div></td><td width="100%"><img width="1" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""><br>
<font size="2">[Libvirt-cim] [PATCH] [TEST] Adding new tc to verify the VSI     Libvirt-CIM feature</font></td></tr>
</table>

<table border="0" cellspacing="0" cellpadding="0">
<tr valign="top"><td width="58"><img width="1" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""></td><td width="336"><img width="1" height="1" src="cid:3__=07BBFDF1DFCE6CF98f9e8a93df938@us.ibm.com" border="0" alt=""></td></tr>
</table>
</td></tr>
</table>
<br>
<tt># HG changeset patch<br>
# User Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com><br>
# Date 1279271077 25200<br>
# Node ID ae6e83c18a8490fc0c583f7d0b8568ae4b8d1efc<br>
# Parent  f14d55353dd10846428b5b818e478eb6f8a0431e<br>
[TEST] Adding new tc to verify the VSI Libvirt-CIM feature.<br>
<br>
Tested with KVM on RHEL with latest sources.<br>
The test now checks with the 'VSIType' --> "802.1Qbg", we can improve the test case<br>
to verify with 'VSIType' --> "802.1Qbh"<br>
<br>
<br>
Signed-off-by: Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com><br>
<br>
diff -r f14d55353dd1 -r ae6e83c18a84 suites/libvirt-cim/cimtest/VirtualSystemManagementService/28_definesystem_with_vsi_profile.py<br>
--- /dev/null            Thu Jan 01 00:00:00 1970 +0000<br>
+++ b/suites/libvirt-cim/cimtest/VirtualSystemManagementService/28_definesystem_with_vsi_profile.py              Fri Jul 16 02:04:37 2010 -0700<br>
@@ -0,0 +1,213 @@<br>
+#!/usr/bin/python<br>
+#<br>
+# Copyright 2010 IBM Corp.<br>
+#<br>
+# Authors:<br>
+#    Deepti B. Kalakeri <deeptik@linux.vnet.ibm.com><br>
+#<br>
+# This library is free software; you can redistribute it and/or<br>
+# modify it under the terms of the GNU General Public<br>
+# License as published by the Free Software Foundation; either<br>
+# version 2.1 of the License, or (at your option) any later version.<br>
+#<br>
+# This library is distributed in the hope that it will be useful,<br>
+# but WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU<br>
+# General Public License for more details.<br>
+#<br>
+# You should have received a copy of the GNU General Public<br>
+# License along with this library; if not, write to the Free Software<br>
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA<br>
+#    <br>
+# Purpose:<br>
+#   Verify provider's VSI support.<br>
+#<br>
+# Steps:<br>
+#  1) Build RASD parameters, making sure to specify macvtap mode for network<br>
+#     interface and vsi values.<br>
+#  2) Create guest<br>
+#  3) Verify guest is defined properly and the vsi values assgined to the guest<br>
+#     are reflected in the NetRASD.<br>
+#<br>
+#                                               Date: 16-07-2010<br>
+#<br>
+<br>
+import sys<br>
+from CimTest.Globals import logger<br>
+from CimTest.ReturnCodes import FAIL, PASS, SKIP, XFAIL_RC, XFAIL<br>
+from XenKvmLib.classes import get_typed_class, inst_to_mof<br>
+from XenKvmLib.rasd import get_default_rasds<br>
+from XenKvmLib.const import do_main, get_provider_version<br>
+from XenKvmLib.vxml import get_class<br>
+from XenKvmLib.common_util import parse_instance_id<br>
+from XenKvmLib.enumclass import EnumInstances<br>
+<br>
+sup_types = ['Xen', 'XenFV', 'KVM']<br>
+test_dom = 'vsi_guest'<br>
+bug_no = "00016" <br>
+<br>
+libvirt_cim_vsi_support = 1042 <br>
+<br>
+def get_rasd_list(ip, virt, vsi_defaults, nrasd_cn):<br>
+    rasds = get_default_rasds(ip, virt)<br>
+    rasd_list = {} <br>
+<br>
+    for rasd in rasds:<br>
+        if rasd.classname == nrasd_cn and "Default" in rasd['InstanceID']:<br>
+<br>
+            rasd['NetworkMode'] = vsi_defaults['NetworkMode']<br>
+            rasd['NetworkType'] = vsi_defaults['NetworkType']<br>
+            rasd['SourceDevice'] = vsi_defaults['SourceDevice']<br>
+            rasd['VSIType'] = vsi_defaults['VSIType']<br>
+            rasd['VSIManagerID'] = vsi_defaults['VSIManagerID']<br>
+            rasd['VSITypeID'] = vsi_defaults['VSITypeID']<br>
+            rasd['VSITypeIDVersion'] = vsi_defaults['VSITypeIDVersion']<br>
+        # Currently Libvirt throws error when passing Profile id, <br>
+        # add it when supported<br>
+        #    rasd['ProfileID'] = vsi_defaults['ProfileID']<br>
+            rasd_list[rasd.classname] = inst_to_mof(rasd)<br>
+            break<br>
+<br>
+    return rasd_list <br>
+<br>
+def get_net_inst(ip, nrasd_cn, guest_name):<br>
+    inst = None<br>
+    enum_list = EnumInstances(ip, nrasd_cn)<br>
+<br>
+    if enum_list < 1:<br>
+        logger.error("No %s instances returned", nrasd_cn)<br>
+        return FAIL, inst<br>
+<br>
+    for rasd in enum_list:<br>
+        guest, dev, status = parse_instance_id(rasd.InstanceID)<br>
+        if status != PASS:<br>
+            logger.error("Unable to parse InstanceID: %s", rasd.InstanceID)<br>
+            return FAIL, inst<br>
+<br>
+        if guest == guest_name:<br>
+            inst = rasd <br>
+            break<br>
+<br>
+    if inst is None:<br>
+        logger.error("%s instance for %s not found", nrasd_cn, guest_name)<br>
+        return FAIL, inst<br>
+    else:<br>
+        return PASS, inst<br>
+   <br>
+<br>
+def verify_net_rasd(ip, virt, vsi_defaults, inst):<br>
+    try:<br>
+        if inst.NetworkMode != vsi_defaults['NetworkMode']:<br>
+            raise Exception("%s" % "NetworkMode", \<br>
+                            "%s" % inst.NetworkMode, \<br>
+                            "%s" % vsi_defaults['NetworkMode'],\<br>
+                            "%s" % FAIL)<br>
+<br>
+        if inst.SourceDevice != vsi_defaults['SourceDevice']:<br>
+            raise Exception("%s" % "SourceDevice", \<br>
+                            "%s" % inst.SourceDevice, "%s" \<br>
+                            % vsi_defaults['SourceDevice'],\<br>
+                            "%s" % FAIL)<br>
+<br>
+        if inst.VSIType != vsi_defaults['VSIType']:<br>
+            raise Exception("%s" % "VSIType", \<br>
+                             "%s" % inst.VSIType, "%s" \<br>
+                             % vsi_defaults['VSIType'], \<br>
+                             "%s" % FAIL)<br>
+<br>
+        # Once the bug is fixed change the status value from XFAIL to FAIL<br>
+        if inst.VSIInstanceID == None:<br>
+            raise Exception("%s" % "VSIInstanceID", \<br>
+                            "%s" % inst.VSIInstanceID, \<br>
+                            "%s" % "a value",\<br>
+                            "%s" % XFAIL)<br>
+       <br>
+        if inst.VSITypeIDVersion != vsi_defaults['VSITypeIDVersion']:<br>
+            raise Exception("%s" % "VSITypeIDVersion", <br>
+                            "%s" % inst.VSITypeIDVersion, \<br>
+                            "%s" % vsi_defaults['VSITypeIDVersion'],\<br>
+                            "%s" % XFAIL)<br>
+<br>
+        if inst.VSITypeID != vsi_defaults['VSITypeID']:<br>
+            raise Exception("%s" % "VSITypeID", \<br>
+                            "%s" % inst.VSITypeID, \<br>
+                            "%s" % vsi_defaults['VSITypeID'], \<br>
+                            "%s" % XFAIL)<br>
+<br>
+    except Exception, (field, ret_val, exp_val, status):<br>
+        logger.error("Mismatch in '%s' values", field)<br>
+        logger.error("Got %s, Expected %s", ret_val, exp_val)<br>
+        if status == "3":<br>
+             return XFAIL_RC(bug_no)<br>
+        return status<br>
+<br>
+    return PASS <br>
+<br>
+@do_main(sup_types)<br>
+def main():<br>
+    options = main.options<br>
+    server = options.ip<br>
+    virt = options.virt<br>
+<br>
+    status = FAIL<br>
+<br>
+    curr_cim_rev, changeset = get_provider_version(virt, server)<br>
+    if curr_cim_rev < libvirt_cim_vsi_support:<br>
+        logger.error("VSI support is available in rev >= %s", <br>
+                      libvirt_cim_vsi_support)<br>
+        return SKIP<br>
+<br>
+<br>
+    # Currently Libvirt throws error when passing Profile id, <br>
+    # add it when supported<br>
+    #    'ProfileID' : "vsi_profile"<br>
+    # Also, Libvirt returns error when 'VSIType' is 802.1Qbh <br>
+    # The tc can be modified to loop for the different VSIType, <br>
+    # when supported.<br>
+    vsi_defaults = { 'NetworkMode'  : "vepa",<br>
+                     'NetworkType'  : "direct",<br>
+                     'SourceDevice' : "eth1",<br>
+                     'VSIType'      : "802.1Qbg",<br>
+                     'VSIManagerID' : "12",<br>
+                     'VSITypeID'    : "0x12345",<br>
+                     'VSITypeIDVersion' : "1"<br>
+                   } <br>
+<br>
+    nrasd_cn = get_typed_class(virt, 'NetResourceAllocationSettingData')<br>
+    status  = FAIL<br>
+<br>
+    try:<br>
+        rasd_list = get_rasd_list(server, virt, vsi_defaults, nrasd_cn)<br>
+        if len(rasd_list) < 1:<br>
+            raise Exception("Unable to get template RASDs for %s" % test_dom)<br>
+<br>
+        cxml = get_class(virt)(test_dom)<br>
+        cxml.set_res_settings(rasd_list)<br>
+        ret = cxml.cim_define(server)<br>
+        if not ret:<br>
+            raise Exception("Unable to define guest %s" % test_dom)<br>
+                <br>
+        status = cxml.cim_start(server)<br>
+        if status != PASS:<br>
+            raise Exception("Unable to start %s" % test_dom)<br>
+<br>
+        status, inst = get_net_inst(server, nrasd_cn, test_dom)<br>
+        if status != PASS:<br>
+            raise Exception("Failed to get net interface for %s" % test_dom)<br>
+<br>
+        status = verify_net_rasd(server, virt, vsi_defaults, inst)<br>
+        if status != PASS:<br>
+            logger.error("Failed to verify net interface for %s", test_dom)<br>
+<br>
+    except Exception, details:<br>
+        logger.error(details)<br>
+        status = FAIL<br>
+<br>
+    cxml.cim_destroy(server)<br>
+    cxml.undefine(server)<br>
+<br>
+    return status <br>
+<br>
+if __name__ == "__main__":<br>
+    sys.exit(main())<br>
+    <br>
<br>
_______________________________________________<br>
Libvirt-cim mailing list<br>
Libvirt-cim@redhat.com<br>
</tt><tt><a href="https://www.redhat.com/mailman/listinfo/libvirt-cim">https://www.redhat.com/mailman/listinfo/libvirt-cim</a></tt><tt><br>
</tt><br>
</body></html>