diff options
Diffstat (limited to 'resources/libraries')
-rw-r--r-- | resources/libraries/python/honeycomb/HcAPIKwInterfaces.py | 28 | ||||
-rw-r--r-- | resources/libraries/robot/honeycomb/port_mirroring.robot | 33 |
2 files changed, 45 insertions, 16 deletions
diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py index f317d06a69..19ce8f26c8 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py +++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py @@ -1635,7 +1635,7 @@ class InterfaceKeywords(object): " 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. @@ -1644,29 +1644,35 @@ class InterfaceKeywords(object): :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. """ - 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) - - 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( diff --git a/resources/libraries/robot/honeycomb/port_mirroring.robot b/resources/libraries/robot/honeycomb/port_mirroring.robot index 854da311e9..81eedb944e 100644 --- a/resources/libraries/robot/honeycomb/port_mirroring.robot +++ b/resources/libraries/robot/honeycomb/port_mirroring.robot @@ -15,6 +15,10 @@ | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords | ... | WITH NAME | InterfaceAPI | Library | resources.libraries.python.telemetry.SPAN +| Library | resources.libraries.python.InterfaceUtil +| Library | resources.libraries.python.IPv4Util +| Library | resources.libraries.python.IPv4Setup +| Library | resources.libraries.python.Trace *** Keywords *** | Honeycomb Configures SPAN on interface @@ -24,17 +28,19 @@ | | ... | *Arguments:* | | ... | - node - information about a DUT node. Type: dictionary | | ... | - dst_interface - Mirroring destination interface. Type: string -| | ... | - src_interfaces - Mirroring source interfaces. Type: Argument list -\ -| | ... | any number of strings +| | ... | - src_interfaces - Mirroring source interfaces. Type: list \ +| | ... | of dictionaries | | ... | | ... | *Example:* | | ... | | ... | \| Honeycomb Configures SPAN on interface \| ${nodes['DUT1']} \ -| | ... | \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \| +| | ... | \| GigabitEthernet0/8/0 \| [{'iface-ref': 'GigabitEthernet0/10/0', \ +| | ... | \| 'state': 'transmit'}, \ +| | ... | \| {'iface-ref': 'local0', 'state': 'both'}] \| | | ... | | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} | | InterfaceAPI.Configure interface SPAN -| | ... | ${node} | ${dst_interface} | @{src_interfaces} +| | ... | ${node} | ${dst_interface} | ${src_interfaces} | Interface SPAN configuration from Honeycomb should be | | [Documentation] | Retrieves interface operational data and verifies that\ @@ -54,11 +60,28 @@ | | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} | | ${data}= | InterfaceAPI.Get interface oper data | ${node} | ${dst_interface} | | ${data}= | Set Variable -| | ... | ${data['span']['mirrored-interfaces']['mirrored-interface']} +| | ... | ${data['v3po:span']['mirrored-interfaces']['mirrored-interface']} | | Sort list | ${data} | | Sort list | ${src_interfaces} | | Lists should be equal | ${data} | ${src_interfaces} +| Interface SPAN configuration from Honeycomb should be empty +| | [Documentation] | Checks whether SPAN configuration from Honeycomb is empty. +| | ... +| | ... | *Arguments:* +| | ... | - node - Information about a DUT node. Type: dictionary +| | ... | - dst_interface - Mirroring destination interface. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Interface SPAN configuration from Honeycomb should be empty \ +| | ... | \| ${node} \| GigabitEthernetO/8/0 \| +| | ... +| | [Arguments] | ${node} | ${dst_interface} +| | ${data}= | Get interface oper data | ${node} | ${dst_interface} +| | Variable should not exist +| | ... | ${data['v3po:span']['mirrored-interfaces']['mirrored-interface']} + | Interface SPAN configuration from VAT should be | | [Documentation] | Retrieves SPAN configuration from VAT dump and verifies\ | | ... | that SPAN mirroring is configured with the provided interfaces. |