diff options
author | jan.hradil <jan.hradil@pantheon.tech> | 2017-03-23 13:16:18 +0100 |
---|---|---|
committer | Tibor Frank <tifrank@cisco.com> | 2017-03-30 11:45:03 +0000 |
commit | c756b657f5fd3423b95c98d41c6fb0c007cbed08 (patch) | |
tree | d7ee1c93c5fadf2eacda6f78f67207f2b8ca72e7 /resources | |
parent | 8c1bb6ac0c8253ee203d120c1a8f035c47293d9e (diff) |
HC Test: SPAN Port Mirroring Suite
Change-Id: Ideaae09aa0d062460f5dfb3e3732dee67d6a5aea
Signed-off-by: jan.hradil <jan.hradil@pantheon.tech>
Diffstat (limited to 'resources')
3 files changed, 110 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. diff --git a/resources/test_data/honeycomb/spanrx-apihc-apivat.py b/resources/test_data/honeycomb/spanrx-apihc-apivat.py new file mode 100644 index 0000000000..3f6a1e6a00 --- /dev/null +++ b/resources/test_data/honeycomb/spanrx-apihc-apivat.py @@ -0,0 +1,65 @@ +# Copyright (c) 2016 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: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Test variables for SPAN port mirroring test suite.""" + + +def get_variables(node, + interface1, + interface2, + interface3 + ): + """Create and return a dictionary of test variables. + + :param node: Honeycomb node. + :param interface1: Name of an interface. + :param interface2: Name of an interface. + :param interface3: Name of an interface. + :type node: dict + :type interface1: string + :type interface2: string + :type interface3: string + + :returns: Dictionary of test variables - settings for Honeycomb's + SPAN port mirroring suite. + :rtype: dict + """ + variables = { + "interface1": interface1, + "interface2": interface2, + "interface3": interface3, + "settings_1": { + "state": "receive", + "iface-ref": interface2, + }, + + "settings_2": { + "state": "transmit", + "iface-ref": interface2, + }, + + "settings_3": { + "state": "both", + "iface-ref": interface2, + }, + + "settings_4": { + "state": "both", + "iface-ref": interface3, + }, + + "tg_to_dut_if1_ip": "192.168.1.1", + "dut_to_tg_if1_ip": "192.168.1.2", + "prefix": 24, + } + return variables |