CSIT-577 HC Test: Scripts for test jobs using ODL client
[csit.git] / resources / libraries / python / honeycomb / HcAPIKwInterfaces.py
index eff0719..dc24858 100644 (file)
@@ -201,6 +201,16 @@ class InterfaceKeywords(object):
         :rtype: dict
         """
 
         :rtype: dict
         """
 
+        try:
+            interface = Topology.convert_interface_reference(
+                node, interface, "name")
+        except RuntimeError:
+            if isinstance(interface, basestring):
+                # Probably name of a custom interface (TAP, VxLAN, Vhost, ...)
+                pass
+            else:
+                raise
+
         intfs = InterfaceKeywords.get_all_interfaces_oper_data(node)
         for intf in intfs:
             if intf["name"] == interface:
         intfs = InterfaceKeywords.get_all_interfaces_oper_data(node)
         for intf in intfs:
             if intf["name"] == interface:
@@ -653,6 +663,9 @@ class InterfaceKeywords(object):
         :rtype: bytearray
         """
 
         :rtype: bytearray
         """
 
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv6",
                 "address")
         address = [{"ip": ip_addr, "prefix-length": prefix_len}, ]
         path = ("interfaces", ("interface", "name", interface), "ietf-ip:ipv6",
                 "address")
         address = [{"ip": ip_addr, "prefix-length": prefix_len}, ]
@@ -1476,7 +1489,7 @@ class InterfaceKeywords(object):
         interface = interface.replace("/", "%2F")
 
         data = {
         interface = interface.replace("/", "%2F")
 
         data = {
-            "v3po:acl": {
+            "vpp-interface-acl:acl": {
                 "ingress": {
                     "ip4-acl": {
                         "classify-table": table_name
                 "ingress": {
                     "ip4-acl": {
                         "classify-table": table_name
@@ -1488,7 +1501,7 @@ class InterfaceKeywords(object):
             }
         }
 
             }
         }
 
-        path = "/interface/" + interface + "/v3po:acl"
+        path = "/interface/" + interface + "/vpp-interface-acl:acl"
         status_code, resp = HcUtil.\
             put_honeycomb_data(node, "config_vpp_interfaces", data, path,
                                data_representation=DataRepresentation.JSON)
         status_code, resp = HcUtil.\
             put_honeycomb_data(node, "config_vpp_interfaces", data, path,
                                data_representation=DataRepresentation.JSON)
@@ -1498,6 +1511,69 @@ class InterfaceKeywords(object):
                 "Status code: {1}.".format(interface, status_code))
         return resp
 
                 "Status code: {1}.".format(interface, status_code))
         return resp
 
+    @staticmethod
+    def enable_policer_on_interface(node, interface, table_name):
+        """Enable Policer on the given interface.
+
+        :param node: Honeycomb node.
+        :param interface: The interface where policer will be enabled.
+        :param table_name: Name of the classify table.
+        :type node: dict
+        :type interface: str
+        :type table_name: str
+        :returns: Content of response.
+        :rtype: bytearray
+        :raises HoneycombError: If the configuration of interface is not
+        successful.
+        """
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+        interface = interface.replace("/", "%2F")
+
+        data = {
+            "interface-policer:policer": {
+                "ip4-table": table_name
+                }
+            }
+
+        path = "/interface/" + interface + "/interface-policer:policer"
+        status_code, resp = HcUtil.\
+            put_honeycomb_data(node, "config_vpp_interfaces", data, path,
+                               data_representation=DataRepresentation.JSON)
+        if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED):
+            raise HoneycombError(
+                "The configuration of interface '{0}' was not successful. "
+                "Status code: {1}.".format(interface, status_code))
+        return resp
+
+    @staticmethod
+    def disable_policer_on_interface(node, interface):
+        """Disable Policer on the given interface.
+
+        :param node: Honeycomb node.
+        :param interface: The interface where policer will be disabled.
+        :param table_name: Name of the classify table.
+        :type node: dict
+        :type interface: str
+        :type table_name: str
+        :returns: Content of response.
+        :rtype: bytearray
+        :raises HoneycombError: If the configuration of interface is not
+        successful.
+        """
+        interface = Topology.convert_interface_reference(
+            node, interface, "name")
+        interface = interface.replace("/", "%2F")
+
+        path = "/interface/" + interface + "/interface-policer:policer"
+        status_code, resp = HcUtil.\
+            delete_honeycomb_data(node, "config_vpp_interfaces", path)
+        if status_code != HTTPCodes.OK:
+            raise HoneycombError(
+                "The configuration of interface '{0}' was not successful. "
+                "Status code: {1}.".format(interface, status_code))
+        return resp
+
     @staticmethod
     def disable_acl_on_interface(node, interface):
         """Disable ACL on the given interface.
     @staticmethod
     def disable_acl_on_interface(node, interface):
         """Disable ACL on the given interface.
@@ -1514,7 +1590,7 @@ class InterfaceKeywords(object):
 
         interface = interface.replace("/", "%2F")
 
 
         interface = interface.replace("/", "%2F")
 
-        path = "/interface/" + interface + "/v3po:acl"
+        path = "/interface/" + interface + "/vpp-interface-acl:acl"
 
         status_code, resp = HcUtil.\
             delete_honeycomb_data(node, "config_vpp_interfaces", path)
 
         status_code, resp = HcUtil.\
             delete_honeycomb_data(node, "config_vpp_interfaces", path)
@@ -1544,7 +1620,7 @@ class InterfaceKeywords(object):
         """
 
         interface = intf.replace("/", "%2F")
         """
 
         interface = intf.replace("/", "%2F")
-        path = "/interface/{0}/pbb-rewrite/".format(interface)
+        path = "/interface/{0}/pbb-rewrite".format(interface)
         status_code, resp = HcUtil. \
             put_honeycomb_data(node, "config_vpp_interfaces", params, path,
                                data_representation=DataRepresentation.JSON)
         status_code, resp = HcUtil. \
             put_honeycomb_data(node, "config_vpp_interfaces", params, path,
                                data_representation=DataRepresentation.JSON)
@@ -1622,7 +1698,7 @@ class InterfaceKeywords(object):
                              " of disabled interfaces.".format(interface))
 
     @staticmethod
                              " of disabled interfaces.".format(interface))
 
     @staticmethod
-    def configure_interface_span(node, dst_interface, *src_interfaces):
+    def configure_interface_span(node, dst_interface, src_interfaces=None):
         """Configure SPAN port mirroring on the specified interfaces. If no
          source interface is provided, SPAN will be disabled.
 
         """Configure SPAN port mirroring on the specified interfaces. If no
          source interface is provided, SPAN will be disabled.
 
@@ -1631,29 +1707,35 @@ class InterfaceKeywords(object):
         :param src_interfaces: List of interfaces to mirror packets from.
         :type node: dict
         :type dst_interface: str
         :param src_interfaces: List of interfaces to mirror packets from.
         :type node: dict
         :type dst_interface: str
-        :type src_interfaces: list of str
+        :type src_interfaces: list of dict
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If SPAN could not be configured.
         """
 
         :returns: Content of response.
         :rtype: bytearray
         :raises HoneycombError: If SPAN could not be configured.
         """
 
-        interface = dst_interface.replace("/", "%2F")
+        interface = Topology.convert_interface_reference(
+            node, dst_interface, "name")
+        interface = interface.replace("/", "%2F")
         path = "/interface/" + interface + "/span"
 
         if not src_interfaces:
             status_code, _ = HcUtil.delete_honeycomb_data(
                 node, "config_vpp_interfaces", path)
         path = "/interface/" + interface + "/span"
 
         if not src_interfaces:
             status_code, _ = HcUtil.delete_honeycomb_data(
                 node, "config_vpp_interfaces", path)
-
-        data = {
-            "span": {
-                "mirrored-interfaces": {
-                    "mirrored-interface": src_interfaces
+        else:
+            for src_interface in src_interfaces:
+                src_interface["iface-ref"] = Topology.\
+                    convert_interface_reference(
+                        node, src_interface["iface-ref"], "name")
+            data = {
+                "span": {
+                    "mirrored-interfaces": {
+                        "mirrored-interface": src_interfaces
+                    }
                 }
             }
                 }
             }
-        }
 
 
-        status_code, _ = HcUtil.put_honeycomb_data(
-            node, "config_vpp_interfaces", data, path)
+            status_code, _ = HcUtil.put_honeycomb_data(
+                node, "config_vpp_interfaces", data, path)
 
         if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED):
             raise HoneycombError(
 
         if status_code not in (HTTPCodes.OK, HTTPCodes.ACCEPTED):
             raise HoneycombError(