[Libvirt-cim] [PATCH] [TEST] Update FilterList tests and helper

Eduardo Lima (Etrunko) eblima at linux.vnet.ibm.com
Mon Jan 30 23:59:28 UTC 2012


From: "Eduardo Lima (Etrunko)" <eblima at br.ibm.com>

According to recent changes in FilterList and FilterEntry providers.

03_create.py:
 - Creation and deletion of AppliedFilterList instance
 - Deletion of NestedFilterList instance
 - Deletion of FilterList instance

helper.py:
 - Removed warning about Deprecated use of lxml functionality
 - New filter rule actions
 - Match protocol id

Signed-off-by: Eduardo Lima (Etrunko) <eblima at br.ibm.com>
---
 suites/libvirt-cim/cimtest/FilterList/03_create.py |   35 +++++++++++++---
 suites/libvirt-cim/cimtest/FilterList/helper.py    |   42 +++++++++++++++++---
 2 files changed, 64 insertions(+), 13 deletions(-)

diff --git a/suites/libvirt-cim/cimtest/FilterList/03_create.py b/suites/libvirt-cim/cimtest/FilterList/03_create.py
index e828e92..551a01f 100644
--- a/suites/libvirt-cim/cimtest/FilterList/03_create.py
+++ b/suites/libvirt-cim/cimtest/FilterList/03_create.py
@@ -38,6 +38,9 @@ from VirtLib.utils import run_remote
 sup_types = ["KVM",]
 
 domain = None
+flist_name = None
+nested_name = None
+applied_name = None
 
 def get_filter_inst_and_inst_name(name):
     try:
@@ -89,6 +92,7 @@ def create_filter_list(name):
 
     # A NestedFilterList instance will add the "clean-traffic" filter
     # as an entry of the newly created FilterList
+    global nested_name
     logger.info("Creating NestedFilterList instance")
     nested_name = test.CreateFilterListInstance(None, "KVM_NestedFilterList",
                                   {"Antecedent":flist_name,
@@ -125,8 +129,11 @@ def get_nwport_inst_and_inst_name(domain_name):
 
 def cleanup():
     try:
-        # Destroy filter list
-        test.wbem.DeleteInstance(flist_name)
+        # Destroy filter list instances
+        for n in [applied_name, nested_name, flist_name]:
+            if n is not None:
+                logger.info("Deleting instance %s", n)
+                test.wbem.DeleteInstance(n)
     except Exception, e:
         logger.error("Error deleting filter list: %s", e)
 
@@ -165,15 +172,29 @@ def main():
 
         # An AppliedFilterList Instance will apply the filter to the network
         # port of the defined domain
-        test.CreateFilterListInstance(None, "KVM_AppliedFilterList",
-                                      {"Antecedent":nwport_name,
-                                       "Dependent":flist_name})
+        global applied_name
+        logger.info ("Creating AppliedFilterList instance")
+        applied_name = test.CreateFilterListInstance(None, "KVM_AppliedFilterList",
+                                                     {"Antecedent":nwport_name,
+                                                      "Dependent":flist_name})
+        logger.info("Got AppliedFilterList name '%s'", applied_name)
+        #applied = test.GetInstance(applied_name)
+        #logger.info("Got AppliedFilterList '%s'", applied)
+
+        # Check results
+        filterref = test.libvirt_applied_filter_lists(domain_name)[0]
+        rule = helper.FilterRule(filterref)
+        if rule.filter != test_flist:
+            raise Exception("AppliedFilterList name '%s' does not match expected '%s'",
+                            rule.filter, test_flist)
+
+        test.cim_applied_filter_lists(domain_name)
+        logger.info("AppliedFilterList created succesfully")
+        result = PASS
     except Exception, e:
         logger.error("Caught exception: %s", e)
         result = FAIL
 
-    # Check results
-
     # Cleanup
     cleanup()
 
diff --git a/suites/libvirt-cim/cimtest/FilterList/helper.py b/suites/libvirt-cim/cimtest/FilterList/helper.py
index 9ae2f62..5202fa6 100644
--- a/suites/libvirt-cim/cimtest/FilterList/helper.py
+++ b/suites/libvirt-cim/cimtest/FilterList/helper.py
@@ -252,7 +252,7 @@ class FilterListTest(BaseTestObject):
         d = {}
         for f in filters:
             root = self.libvirt_filter_dumpxml(f[0])
-            if not root:
+            if root is None:
                 return None
 
             d[f] = root
@@ -307,6 +307,22 @@ class FilterListTest(BaseTestObject):
 
         return self.Associators(_inst_name, result_class="CIM_FilterEntryBase")
     # cim_entries_in_filter_list
+
+    def libvirt_applied_filter_lists(self, dom_name):
+        cmd = "virsh -q -c %s dumpxml %s 2>/dev/null" % (self.uri, dom_name)
+        ret, dom_xml = run_remote(self.server, cmd)
+        if ret:
+            logger.error("Error retrieving domain xml for %s", dom_name)
+            return None
+
+        xdoc = etree.fromstring(dom_xml)
+        filter_list = xdoc.xpath("/domain/devices/interface/filterref")
+        return filter_list
+    # libvirt_applied_filter_lists
+
+    def cim_applied_filter_lists(self, dom_name):
+        pass
+    # cim_applied_filter_lists
 # FilterListTest
 
 
@@ -319,9 +335,17 @@ class FilterRule(object):
     __versions = {"ip"  : "4",
                   "ipv6": "6",}
 
-    __actions = {"accept" : "1",
-                 "deny"   : "2",
-                 "drop"   : "2",}
+    __actions = {"accept"   : "1",
+                 "deny"     : "2",
+                 "drop"     : "2",
+                 "reject"   : "3",
+                 "return"   : "4",
+                 "continue" : "5",}
+
+    __protocolids = {"ipv4": "2048",
+                     "arp" : "2054",
+                     "rarp": "32821",
+                     "ipv6": "34525",}
 
     __baserule_map = {"action"      : "Action",
                       "direction"   : "Direction",
@@ -394,7 +418,7 @@ class FilterRule(object):
 
         for e in element:
             self.__dict = dict(self.__dict, **e.attrib)
-            if not self.__type:
+            if self.__type is None:
                 self.__type = e.tag
 
         try:
@@ -415,6 +439,12 @@ class FilterRule(object):
             return self.__actions[self.__dict[key]]
         elif key == "type":
             return self.__type
+        elif key == "protocolid":
+            value = self.__dict[key]
+            try:
+                return self.__protocolids[value]
+            except KeyError:
+                return value
 
         try:
             return self.__dict[key]
@@ -470,7 +500,7 @@ class FilterRule(object):
             # convert the property value to string
             prop = instance.properties[inst_key]
             val = self.__getattr__(key)
-            if val.startswith("0x"):
+            if isinstance(val, str) and val.startswith("0x"):
                 inst_val = hex(int(prop.value))
             else:
                 inst_val = str(prop.value)
-- 
1.7.7.6




More information about the Libvirt-cim mailing list