Fix Tap failing tests
[csit.git] / resources / libraries / python / IPv4NodeAddress.py
index 6759935..de96c18 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2018 Cisco and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
 
 """Robot framework variable file.
 
-   Create dictionary variable nodes_ipv4_addr of IPv4 addresses from
-   available networks.
+Create dictionary variable nodes_ipv4_addr of IPv4 addresses from
+available networks.
 """
+
 from ipaddress import IPv4Network
 
 from resources.libraries.python.topology import Topology
@@ -25,25 +26,33 @@ IPV4_NETWORKS = ['192.168.{}.0/24'.format(i) for i in range(1, 100)]
 
 
 class IPv4NetworkGenerator(object):
-    """IPv4 network generator."""
+    """IPv4 network generator.
+
+    TODO: Conform to https://docs.python.org/2/library/stdtypes.html#typeiter
+    """
+
     def __init__(self, networks):
+        """Populate internal list of valid networks.
+
+        :param networks: List of strings containing IPv4 subnet
+            with prefix length.
+        :type networks: list
+        :raise RuntimeError: If no IPv4 networks are added.
         """
-        :param networks: list of strings containing IPv4 subnet
-        with prefix length
-        """
-        self._networks = list()
+        self._networks = []
         for network in networks:
             net = IPv4Network(unicode(network))
             self._networks.append(net)
-        if len(self._networks) == 0:
-            raise Exception('No IPv4 networks')
+        if not self._networks:
+            raise RuntimeError("No IPv4 networks")
 
     def next_network(self):
+        """Pop and return network from internal list.
+
+        :returns: Next network in form (IPv4Network, subnet).
+        :raises StopIteration: If there are no more elements.
         """
-        :return: next network in form (IPv4Network, subnet)
-        :raises: StopIteration if there are no more elements.
-        """
-        if len(self._networks):
+        if self._networks:
             return self._networks.pop()
         else:
             raise StopIteration()
@@ -51,15 +60,15 @@ class IPv4NetworkGenerator(object):
 
 def get_variables(nodes, networks=IPV4_NETWORKS[:]):
     """Special robot framework method that returns dictionary nodes_ipv4_addr,
-       mapping of node and interface name to IPv4 adddress.
+    mapping of node and interface name to IPv4 address.
 
-       :param nodes: Nodes of the test topology.
-       :param networks: list of available IPv4 networks
-       :type nodes: dict
-       :type networks: list
+    :param nodes: Nodes of the test topology.
+    :param networks: List of available IPv4 networks.
+    :type nodes: dict
+    :type networks: list
 
-       .. note::
-           Robot framework calls it automatically.
+    .. note::
+       Robot framework calls it automatically.
     """
     topo = Topology()
     links = topo.get_links(nodes)
@@ -77,7 +86,8 @@ def get_variables(nodes, networks=IPV4_NETWORKS[:]):
         port_idx = 0
         ports = {}
         for node in nodes.values():
-            if_name = topo.get_interface_by_link_name(node, link)
+            if_key = topo.get_interface_by_link_name(node, link)
+            if_name = topo.get_interface_name(node, if_key)
             if if_name is not None:
                 port = {'addr': str(next(net_hosts)),
                         'node': node['host'],