Fix Tap failing tests
[csit.git] / resources / libraries / python / honeycomb / HcAPIKwInterfaces.py
index 1e0b1a5..e9ef133 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (c) 2017 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:
@@ -18,13 +18,13 @@ operational data.
 """
 from robot.api import logger
 
-from resources.libraries.python.topology import Topology
 from resources.libraries.python.HTTPRequest import HTTPCodes
 from resources.libraries.python.honeycomb.HoneycombSetup import HoneycombError
 from resources.libraries.python.honeycomb.HoneycombUtil \
     import DataRepresentation
 from resources.libraries.python.honeycomb.HoneycombUtil \
     import HoneycombUtil as HcUtil
+from resources.libraries.python.topology import Topology
 
 
 class InterfaceKeywords(object):
@@ -48,7 +48,10 @@ class InterfaceKeywords(object):
     VXLAN_PARAMS = ("src", "dst", "vni", "encap-vrf-id")
     L2_PARAMS = ("bridge-domain", "split-horizon-group",
                  "bridged-virtual-interface")
-    TAP_PARAMS = ("tap-name", "mac", "device-instance")
+    TAP_PARAMS = ("id", "tx-ring-size", "rx-ring-size", "host-mac",
+                  "host-interface-name", "host-namespace", "host-bridge",
+                  "host-ipv4-address", "host-ipv6-address", "tag",
+                  "host-ipv4-gateway", "host-ipv6-gateway", "mac")
     VHOST_USER_PARAMS = ("socket", "role")
     SUB_IF_PARAMS = ("identifier",
                      "vlan-type",
@@ -86,7 +89,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the status code in response on PUT is not
-        200 = OK.
+            200 = OK.
         """
 
         status_code, resp = HcUtil.\
@@ -228,7 +231,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param path:  Path to data we want to change / create / remove.
         :param new_value: The new value to be set. If None, the item will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type path: tuple
@@ -252,7 +255,7 @@ class InterfaceKeywords(object):
         return InterfaceKeywords._configure_interface(node, interface, new_data)
 
     @staticmethod
-    def set_interface_state(node, interface, state="up"):
+    def honeycomb_set_interface_state(node, interface, state="up"):
         """Set VPP interface state.
 
         The keyword changes the administration state of interface to up or down
@@ -261,7 +264,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: Interface name, key, link name or sw_if_index.
         :param state: The requested state, only "up" and "down" are valid
-        values.
+            values.
         :type node: dict
         :type interface: str
         :type state: str
@@ -310,7 +313,8 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
-        return InterfaceKeywords.set_interface_state(node, interface, "up")
+        return InterfaceKeywords.honeycomb_set_interface_state(
+            node, interface, "up")
 
     @staticmethod
     def set_interface_down(node, interface):
@@ -324,7 +328,8 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
-        return InterfaceKeywords.set_interface_state(node, interface, "down")
+        return InterfaceKeywords.honeycomb_set_interface_state(
+            node, interface, "down")
 
     @staticmethod
     def add_bridge_domain_to_interface(node, interface, bd_name,
@@ -368,7 +373,6 @@ class InterfaceKeywords(object):
         :param interface: Interface name, key, link name or sw_if_index.
         :type node: dict
         :type interface: str or int
-
         :raises HoneycombError: If the operation fails.
         """
 
@@ -400,7 +404,7 @@ class InterfaceKeywords(object):
         :type node: dict
         :type interface: str
         :returns: Operational data about bridge domain settings in the
-        interface.
+            interface.
         :rtype: dict
         """
 
@@ -421,7 +425,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param param: Parameter to configure (set, change, remove)
         :param value: The value of parameter. If None, the parameter will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type param: str
@@ -446,7 +450,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param param: Parameter to configure (set, change, remove)
         :param value: The value of parameter. If None, the parameter will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type param: str
@@ -554,6 +558,9 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv4",
                 "address")
         return InterfaceKeywords._set_interface_properties(
@@ -596,6 +603,9 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv4",
                 "neighbor")
         return InterfaceKeywords._set_interface_properties(
@@ -609,7 +619,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param param: Parameter to configure (set, change, remove)
         :param value: The value of parameter. If None, the parameter will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type param: str
@@ -694,6 +704,9 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv6",
                 "address")
         return InterfaceKeywords._set_interface_properties(
@@ -736,6 +749,9 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv6",
                 "neighbor")
         return InterfaceKeywords._set_interface_properties(
@@ -749,7 +765,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param param: Parameter to configure (set, change, remove)
         :param value: The value of parameter. If None, the parameter will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type param: str
@@ -774,7 +790,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param param: Parameter to configure (set, change, remove)
         :param value: The value of parameter. If None, the parameter will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type param: str
@@ -796,13 +812,13 @@ class InterfaceKeywords(object):
             node, interface, path, value)
 
     @staticmethod
-    def create_vxlan_interface(node, interface, **kwargs):
+    def honeycomb_create_vxlan_interface(node, interface, **kwargs):
         """Create a new VxLAN interface.
 
         :param node: Honeycomb node.
         :param interface: The name of interface.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.VXLAN_PARAMS.
+            defined in InterfaceKeywords.VXLAN_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -838,7 +854,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If it is not possible to get information about
-        interfaces or it is not possible to delete the interface.
+            interfaces or it is not possible to delete the interface.
         """
 
         path = ("interfaces", ("interface", "name", interface))
@@ -860,7 +876,7 @@ class InterfaceKeywords(object):
         return resp
 
     @staticmethod
-    def configure_interface_vxlan(node, interface, **kwargs):
+    def honeycomb_configure_interface_vxlan(node, interface, **kwargs):
         """Configure VxLAN on the interface.
 
         The keyword configures VxLAN parameters on the given interface. The type
@@ -873,7 +889,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: The name of interface.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.VXLAN_PARAMS.
+            defined in InterfaceKeywords.VXLAN_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -901,7 +917,7 @@ class InterfaceKeywords(object):
         :param interface: The name of interface.
         :param param: Parameter to configure (set, change, remove)
         :param value: The value of parameter. If None, the parameter will be
-        removed.
+            removed.
         :type node: dict
         :type interface: str
         :type param: str
@@ -925,7 +941,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: The name of interface.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.TAP_PARAMS.
+            defined in InterfaceKeywords.TAP_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -936,14 +952,14 @@ class InterfaceKeywords(object):
 
         new_tap = {
             "name": interface,
-            "type": "v3po:tap",
-            "v3po:tap": {}
+            "type": "v3po:tap-v2",
+            "v3po:tap-v2": {}
         }
         for param, value in kwargs.items():
             if param not in InterfaceKeywords.TAP_PARAMS:
-                raise HoneycombError("The parameter {0} is invalid.".
-                                     format(param))
-            new_tap["v3po:tap"][param] = value
+                raise HoneycombError(
+                    "The parameter {0} is invalid.".format(param))
+            new_tap["v3po:tap-v2"][param] = value
 
         path = ("interfaces", "interface")
         new_tap_structure = [new_tap, ]
@@ -955,7 +971,7 @@ class InterfaceKeywords(object):
         """Configure TAP on the interface.
 
         The keyword configures TAP parameters on the given interface. The type
-        of interface must be set to "v3po:tap".
+        of interface must be set to "v3po:tap-v2".
         The new TAP parameters overwrite the current configuration. If a
         parameter in new configuration is missing, it is removed from TAP
         configuration.
@@ -964,7 +980,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: The name of interface.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.TAP_PARAMS.
+            defined in InterfaceKeywords.TAP_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -980,7 +996,7 @@ class InterfaceKeywords(object):
                                      format(param))
             tap_structure[param] = value
 
-        path = ("interfaces", ("interface", "name", interface), "v3po:tap")
+        path = ("interfaces", ("interface", "name", interface), "v3po:tap-v2")
         return InterfaceKeywords._set_interface_properties(
             node, interface, path, tap_structure)
 
@@ -998,7 +1014,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: The name of interface.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.VHOST_USER_PARAMS.
+            defined in InterfaceKeywords.VHOST_USER_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -1026,7 +1042,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: The name of interface.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.VHOST_USER_PARAMS.
+            defined in InterfaceKeywords.VHOST_USER_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -1052,16 +1068,17 @@ class InterfaceKeywords(object):
             node, interface, path, new_vhost_structure)
 
     @staticmethod
-    def create_sub_interface(node, super_interface, match, tags=None, **kwargs):
+    def honeycomb_create_sub_interface(node, super_interface, match, tags=None,
+                                       **kwargs):
         """Create a new sub-interface.
 
         :param node: Honeycomb node.
         :param super_interface: Super interface.
         :param match: Match type. The valid values are defined in
-        InterfaceKeywords.SUB_IF_MATCH.
+            InterfaceKeywords.SUB_IF_MATCH.
         :param tags: List of tags.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.SUB_IF_PARAMS.
+            defined in InterfaceKeywords.SUB_IF_PARAMS.
         :type node: dict
         :type super_interface: str
         :type match: str
@@ -1073,6 +1090,9 @@ class InterfaceKeywords(object):
         :raises KeyError: If the parameter 'match' is invalid.
         """
 
+        super_interface = Topology.convert_interface_reference(
+            node, super_interface, "name")
+
         match_type = {
             "default":
                 {"default": {}},
@@ -1362,13 +1382,13 @@ class InterfaceKeywords(object):
         :param data: Data to be checked.
         :param ref: Referential data used for comparison.
         :param _path: Used in recursive calls, stores the path taken down
-        the JSON tree.
+            the JSON tree.
         :type data: dict
         :type ref: dict
         :type _path: str
 
         :raises HoneycombError: If the data structures do not match in some way,
-        or if they are not in deserialized JSON format.
+            or if they are not in deserialized JSON format.
         """
 
         if data == ref:
@@ -1456,7 +1476,7 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param interface: The name of interface to be created.
         :param kwargs: Parameters and their values. The accepted parameters are
-        defined in InterfaceKeywords.VXLAN_GPE_PARAMS.
+            defined in InterfaceKeywords.VXLAN_GPE_PARAMS.
         :type node: dict
         :type interface: str
         :type kwargs: dict
@@ -1496,7 +1516,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the configuration of interface is not
-        successful.
+            successful.
         """
 
         interface = interface.replace("/", "%2F")
@@ -1537,7 +1557,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the configuration of interface is not
-        successful.
+            successful.
         """
         interface = Topology.convert_interface_reference(
             node, interface, "name")
@@ -1570,7 +1590,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the configuration of interface is not
-        successful.
+            successful.
         """
         interface = Topology.convert_interface_reference(
             node, interface, "name")
@@ -1596,7 +1616,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the configuration of interface is not
-        successful.
+            successful.
         """
 
         interface = interface.replace("/", "%2F")
@@ -1620,14 +1640,14 @@ class InterfaceKeywords(object):
         :param node: Honeycomb node.
         :param intf: The interface where PBB sub-interface will be configured.
         :param params: Configuration parameters of the sub-interface to be
-        created.
+            created.
         :type node: dict
         :type intf: str
         :type params: dict
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the configuration of sub-interface is not
-        successful.
+            successful.
         """
 
         interface = intf.replace("/", "%2F")
@@ -1652,7 +1672,7 @@ class InterfaceKeywords(object):
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If the removal of sub-interface is not
-        successful.
+            successful.
         """
 
         interface = intf.replace("/", "%2F")
@@ -1679,7 +1699,7 @@ class InterfaceKeywords(object):
         :returns: PBB sub-interface operational data.
         :rtype: dict
         :raises HoneycombError: If the removal of sub-interface is not
-        successful.
+            successful.
         """
 
         raise NotImplementedError
@@ -1696,8 +1716,8 @@ class InterfaceKeywords(object):
         :returns: True if the interface exists in disabled interfaces.
         :rtype: bool
         :raises HoneycombError: If the interface is not present
-         in retrieved list of disabled interfaces.
-         """
+            in retrieved list of disabled interfaces.
+        """
         data = InterfaceKeywords.get_disabled_interfaces_oper_data(node)
         # decrement by one = conversion from HC if-index to VPP sw_if_index
         interface -= 1
@@ -1762,7 +1782,7 @@ class InterfaceKeywords(object):
 
         :param node: Honeycomb node.
         :param super_interface: Name, link name or sw_if_index
-        of the destination interface's super-interface.
+            of the destination interface's super-interface.
         :param dst_interface_index: Index of sub-interface to mirror packets to.
         :param src_interfaces: List of interfaces to mirror packets from.
         :type node: dict
@@ -1862,7 +1882,7 @@ class InterfaceKeywords(object):
 
         :param node: Honeycomb node.
         :param interface: Name, link name or sw_if_index of an interface,
-        name of a custom interface or name of a sub-interface.
+            name of a custom interface or name of a sub-interface.
         :type node: Honeycomb node.
         :type interface: str or int
         :returns: Name of interface that can be used in Honeycomb requests.