Add output.xml with only INFO logging leve
[csit.git] / resources / libraries / python / IPv6Setup.py
index 25e8c47..72aeb30 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:
 
 """Library to set up IPv6 in topology."""
 
-from robot.api import logger
 from ipaddress import IPv6Network
+from robot.api import logger
 
 from resources.libraries.python.ssh import SSH
 from resources.libraries.python.topology import NodeType, Topology
-from resources.libraries.python.constants import Constants
+from resources.libraries.python.Constants import Constants
 from resources.libraries.python.VatExecutor import VatTerminal, VatExecutor
 
 
 class IPv6Networks(object):
     """IPv6 network iterator.
 
-    :param networks: List of the available IPv6 networks.
-    :type networks: list
+    TODO: Conform to https://docs.python.org/2/library/stdtypes.html#typeiter
     """
+
     def __init__(self, networks):
-        self._networks = list()
+        """Initialize internal list of valid networks.
+
+        :param networks: List of the available IPv6 networks.
+        :type networks: list
+        :raise RuntimeError: If no networks were added.
+        """
+        self._networks = []
         for network in networks:
             net = IPv6Network(unicode(network))
             self._networks.append(net)
-        num = len(self._networks)
-        if num == 0:
-            raise Exception('No IPv6 networks')
+        if not self._networks:
+            raise RuntimeError('No IPv6 networks')
 
     def next_network(self):
         """Get the next element of the iterator.
 
-        :return: IPv6 network.
+        :returns: IPv6 network.
         :rtype: IPv6Network object
-        :raises: StopIteration if there is no more elements.
+        :raises StopIteration: If there is no more elements.
         """
-        if len(self._networks):
+        if self._networks:
             return self._networks.pop()
         else:
             raise StopIteration()
@@ -63,7 +68,7 @@ class IPv6Setup(object):
         :param nodes_addr: Available nodes IPv6 addresses.
         :type nodes: dict
         :type nodes_addr: dict
-        :return: Affected interfaces as list of (node, interface) tuples.
+        :returns: Affected interfaces as list of (node, interface) tuples.
         :rtype: list
         """
         interfaces = []
@@ -169,7 +174,6 @@ class IPv6Setup(object):
         :type addr: str
         :type prefix: str
         """
-        topo = Topology()
         sw_if_index = Topology.get_interface_sw_index(node, iface_key)
         with VatTerminal(node) as vat:
             vat.vat_terminal_exec_cmd_from_template('add_ip_address.vat',
@@ -222,10 +226,11 @@ class IPv6Setup(object):
         :type interface: str
         """
         sw_if_index = Topology.get_interface_sw_index(node, interface)
-        VatExecutor.cmd_from_template(node,
-                                      'sw_interface_ip6nd_ra_config.vat',
-                                      sw_if_id=sw_if_index,
-                                      param='surpress')
+        if sw_if_index:
+            VatExecutor.cmd_from_template(node,
+                                          'sw_interface_ip6nd_ra_config.vat',
+                                          sw_if_id=sw_if_index,
+                                          param='surpress')
 
     @staticmethod
     def vpp_ra_send_after_interval(node, interface, interval=2):
@@ -240,10 +245,11 @@ class IPv6Setup(object):
         :type interval: int
         """
         sw_if_index = Topology.get_interface_sw_index(node, interface)
-        VatExecutor.cmd_from_template(node,
-                                      'sw_interface_ip6nd_ra_config.vat',
-                                      sw_if_id=sw_if_index,
-                                      param='interval {0}'.format(interval))
+        if sw_if_index:
+            VatExecutor.cmd_from_template(node,
+                                          'sw_interface_ip6nd_ra_config.vat',
+                                          sw_if_id=sw_if_index,
+                                          param='interval {0}'.format(interval))
 
     def vpp_all_ra_suppress_link_layer(self, nodes):
         """Suppress ICMPv6 router advertisement message for link scope address
@@ -266,7 +272,7 @@ class IPv6Setup(object):
         :param nodes_addr: Available nodes IPv6 addresses.
         :type link: str
         :type nodes_addr: dict
-        :return: Link IPv6 address.
+        :returns: Link IPv6 address.
         :rtype: str
         """
         net = nodes_addr.get(link)
@@ -282,7 +288,7 @@ class IPv6Setup(object):
         :param nodes_addr: Available nodes IPv6 addresses.
         :type link: str
         :type nodes_addr: dict
-        :return: Link IPv6 address prefix.
+        :returns: Link IPv6 address prefix.
         :rtype: int
         """
         net = nodes_addr.get(link)