CSIT-405: Honeycomb test update and cleanup
[csit.git] / resources / libraries / python / topology.py
index a5c67d3..c02991f 100644 (file)
@@ -278,11 +278,12 @@ class Topology(object):
         :return: Interface name of the interface connected to the given link.
         :rtype: str
         """
         :return: Interface name of the interface connected to the given link.
         :rtype: str
         """
-        return Topology._get_interface_by_key_value(node, "vpp_sw_index", sw_index)
+        return Topology._get_interface_by_key_value(node, "vpp_sw_index",
+                                                    sw_index)
 
     @staticmethod
     def get_interface_sw_index(node, iface_key):
 
     @staticmethod
     def get_interface_sw_index(node, iface_key):
-        """Get VPP sw_if_index for the interface.
+        """Get VPP sw_if_index for the interface using interface key.
 
         :param node: Node to get interface sw_if_index on.
         :param iface_key: Interface key from topology file, or sw_index.
 
         :param node: Node to get interface sw_if_index on.
         :param iface_key: Interface key from topology file, or sw_index.
@@ -299,6 +300,26 @@ class Topology(object):
         except (KeyError, ValueError):
             return None
 
         except (KeyError, ValueError):
             return None
 
+    @staticmethod
+    def get_interface_sw_index_by_name(node, iface_name):
+        """Get VPP sw_if_index for the interface using interface name.
+
+        :param node: Node to get interface sw_if_index on.
+        :param iface_name: Interface name.
+        :type node: dict
+        :type iface_name: str
+        :return: Return sw_if_index or None if not found.
+        :raises TypeError: If provided interface name is not a string.
+        """
+        try:
+            if isinstance(iface_name, basestring):
+                iface_key = Topology.get_interface_by_name(node, iface_name)
+                return node['interfaces'][iface_key].get('vpp_sw_index')
+            else:
+                raise TypeError("Interface name must be a string.")
+        except (KeyError, ValueError):
+            return None
+
     @staticmethod
     def get_interface_mtu(node, iface_key):
         """Get interface MTU.
     @staticmethod
     def get_interface_mtu(node, iface_key):
         """Get interface MTU.
@@ -514,7 +535,7 @@ class Topology(object):
                         if filt == interface['model']:
                             link_names.append(interface['link'])
                 elif (filter_list is not None) and ('model' not in interface):
                         if filt == interface['model']:
                             link_names.append(interface['link'])
                 elif (filter_list is not None) and ('model' not in interface):
-                    logger.trace("Cannot apply filter on interface: {}" \
+                    logger.trace("Cannot apply filter on interface: {}"
                                  .format(str(interface)))
                 else:
                     link_names.append(interface['link'])
                                  .format(str(interface)))
                 else:
                     link_names.append(interface['link'])
@@ -534,8 +555,8 @@ class Topology(object):
         :param filter_list_node2: Link filter criteria for node2.
         :type node1: dict
         :type node2: dict
         :param filter_list_node2: Link filter criteria for node2.
         :type node1: dict
         :type node2: dict
-        :type filter_list1: list of strings
-        :type filter_list2: list of strings
+        :type filter_list_node1: list of strings
+        :type filter_list_node2: list of strings
         :return: List of strings that represent connecting link names.
         :rtype: list
         """
         :return: List of strings that represent connecting link names.
         :rtype: list
         """
@@ -578,7 +599,8 @@ class Topology(object):
         else:
             return connecting_links[0]
 
         else:
             return connecting_links[0]
 
-    @keyword('Get egress interfaces name on "${node1}" for link with "${node2}"')
+    @keyword('Get egress interfaces name on "${node1}" for link with '
+             '"${node2}"')
     def get_egress_interfaces_name_for_nodes(self, node1, node2):
         """Get egress interfaces on node1 for link with node2.
 
     def get_egress_interfaces_name_for_nodes(self, node1, node2):
         """Get egress interfaces on node1 for link with node2.