From b7f0c133f672b39b49e0480f71dd0629986bcf72 Mon Sep 17 00:00:00 2001 From: selias Date: Wed, 21 Jun 2017 18:52:10 +0200 Subject: [PATCH] HC Test: improve functional suite setup and teardown Restart the whole stack (VPP+Honeycomb+-ODL) in between test suites. Add generic suite setup and suite teardown keywords for all func suites Re-enable NSH_SFC suite, cleanup test failures Change-Id: I71025b4ed3a7c4912dcd7b62aedef6082357990c Signed-off-by: selias --- .../python/honeycomb/HcAPIKwInterfaces.py | 15 +- .../libraries/python/honeycomb/HoneycombSetup.py | 196 +++++++++++++-------- .../robot/honeycomb/access_control_lists.robot | 9 +- .../libraries/robot/honeycomb/bridge_domain.robot | 18 +- .../libraries/robot/honeycomb/honeycomb.robot | 134 +++++++++++++- .../libraries/robot/honeycomb/interfaces.robot | 74 ++++---- resources/libraries/robot/honeycomb/l2_fib.robot | 5 +- resources/libraries/robot/honeycomb/nsh.robot | 1 - .../libraries/robot/honeycomb/persistence.robot | 7 +- resources/libraries/robot/honeycomb/policer.robot | 1 - .../libraries/robot/honeycomb/port_mirroring.robot | 17 +- .../robot/honeycomb/provider_backbone_bridge.robot | 9 +- resources/libraries/robot/honeycomb/slaac.robot | 2 +- .../libraries/robot/honeycomb/sub_interface.robot | 62 ++++--- resources/libraries/robot/honeycomb/tap.robot | 12 +- .../libraries/robot/honeycomb/vhost_user.robot | 16 +- resources/libraries/robot/honeycomb/vxlan.robot | 14 +- .../libraries/robot/honeycomb/vxlan_gpe.robot | 14 +- tests/func/honeycomb/__init__.robot | 26 +-- .../honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot | 4 +- .../mgmt-cfg-dhcp-apihc-apivat-func.robot | 4 +- .../func/honeycomb/mgmt-cfg-int-apihcnc-func.robot | 5 +- .../mgmt-cfg-int-subint-apihc-apivat-func.robot | 6 +- .../mgmt-cfg-intip4-intip6-apihc-apivat-func.robot | 74 ++++---- .../mgmt-cfg-inttap-apihc-apivat-func.robot | 5 +- .../mgmt-cfg-intvhost-apihc-apivat-func.robot | 5 +- .../mgmt-cfg-l2bd-apihc-apivat-func.robot | 7 +- .../mgmt-cfg-l2fib-apihc-apivat-func.robot | 9 +- .../mgmt-cfg-lisp-apihc-apivat-func.robot | 5 +- .../honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot | 13 +- .../honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot | 5 +- .../mgmt-cfg-pluginacl-apihc-apivat-func.robot | 70 +++++--- .../honeycomb/mgmt-cfg-policer-apihc-func.robot | 10 +- .../honeycomb/mgmt-cfg-proxyarp-apihc-func.robot | 6 +- .../honeycomb/mgmt-cfg-proxynd6-apihc-func.robot | 4 +- .../mgmt-cfg-routing-apihc-apivat-func.robot | 4 +- .../func/honeycomb/mgmt-cfg-slaac-apihc-func.robot | 18 +- .../mgmt-cfg-snat44-apihc-apivat-func.robot | 5 +- .../mgmt-cfg-spanrx-apihc-apivat-func.robot | 16 +- .../mgmt-cfg-vxlan-apihc-apivat-func.robot | 5 +- .../mgmt-cfg-vxlangpe-apihc-apivat-func.robot | 7 +- tests/func/honeycomb/mgmt-notif-apihcnc-func.robot | 21 ++- .../honeycomb/mgmt-statepersist-apihc-func.robot | 3 +- 43 files changed, 565 insertions(+), 378 deletions(-) diff --git a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py index 1e0b1a5d14..6f0bdda9fe 100644 --- a/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py +++ b/resources/libraries/python/honeycomb/HcAPIKwInterfaces.py @@ -252,7 +252,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 @@ -310,7 +310,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 +325,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, @@ -796,7 +798,7 @@ 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. @@ -860,7 +862,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 @@ -1052,7 +1054,8 @@ 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. diff --git a/resources/libraries/python/honeycomb/HoneycombSetup.py b/resources/libraries/python/honeycomb/HoneycombSetup.py index 5026cb4868..53130f405b 100644 --- a/resources/libraries/python/honeycomb/HoneycombSetup.py +++ b/resources/libraries/python/honeycomb/HoneycombSetup.py @@ -59,7 +59,7 @@ class HoneycombSetup(object): HoneycombSetup.print_environment(nodes) - logger.console("\nStarting Honeycomb service ...") + logger.console("\n(re)Starting Honeycomb service ...") cmd = "sudo service honeycomb start" @@ -106,41 +106,6 @@ class HoneycombSetup(object): raise HoneycombError('Node(s) {0} failed to stop Honeycomb.'. format(errors)) - @staticmethod - def restart_honeycomb_and_vpp_on_duts(*nodes): - """Restart the Honeycomb service on specified DUT nodes. - - Use the keyword "Check Honeycomb Startup State" to check when Honeycomb - is fully restarted. - :param nodes: List of nodes to restart Honeycomb on. - :type nodes: list - :raises HoneycombError: If Honeycomb failed to restart. - """ - logger.console("\nRestarting Honeycomb service ...") - - cmd = "sudo service honeycomb restart " - errors = [] - - for node in nodes: - if node['type'] == NodeType.DUT: - ssh = SSH() - ssh.connect(node) - (ret_code, _, _) = ssh.exec_command_sudo(cmd) - if int(ret_code) != 0: - errors.append(node['host']) - try: - DUTSetup.setup_dut(node) - except Exception as err: - logger.debug(err) - errors.append(node['host']) - continue - logger.info("Restart of Honeycomb and VPP on node {0} is " - "in progress ...".format(node['host'])) - if errors: - raise HoneycombError('Node(s) {0} failed to restart Honeycomb' - ' and/or VPP.'. - format(errors)) - @staticmethod def check_honeycomb_startup_state(*nodes): """Check state of Honeycomb service during startup on specified nodes. @@ -362,16 +327,19 @@ class HoneycombSetup(object): "node {0}, {1}".format(node, stderr)) @staticmethod - def enable_module_features(node, *features): - """Configure Honeycomb to use VPP modules that are disabled by default. + def manage_honeycomb_features(node, feature, disable=False): + """Configure Honeycomb to use features that are disabled by default, or + disable previously enabled features. ..Note:: If the module is not enabled in VPP, Honeycomb will be unable to establish VPP connection. :param node: Honeycomb node. - :param features: Features to enable. + :param feature: Feature to enable. + :param disable: Disable the specified feature instead of enabling it. :type node: dict - :type features: string + :type feature: string + :type disable: bool :raises HoneycombError: If the configuration could not be changed. """ @@ -382,23 +350,24 @@ class HoneycombSetup(object): ssh = SSH() ssh.connect(node) - for feature in features: - if feature in disabled_features.keys(): - # uncomment by replacing the entire line - find = replace = "{0}".format(disabled_features[feature]) - - argument = '"/{0}/c\\ {1}"'.format(find, replace) - path = "{0}/modules/*module-config"\ - .format(Const.REMOTE_HC_DIR) - command = "sed -i {0} {1}".format(argument, path) - - (ret_code, _, stderr) = ssh.exec_command_sudo(command) - if ret_code != 0: - raise HoneycombError("Failed to modify configuration on " - "node {0}, {1}".format(node, stderr)) - else: - raise HoneycombError( - "Unrecognized feature {0}.".format(feature)) + if feature in disabled_features.keys(): + # uncomment by replacing the entire line + find = replace = "{0}".format(disabled_features[feature]) + if disable: + replace = "// {0}".format(find) + + argument = '"/{0}/c\\ {1}"'.format(find, replace) + path = "{0}/modules/*module-config"\ + .format(Const.REMOTE_HC_DIR) + command = "sed -i {0} {1}".format(argument, path) + + (ret_code, _, stderr) = ssh.exec_command_sudo(command) + if ret_code != 0: + raise HoneycombError("Failed to modify configuration on " + "node {0}, {1}".format(node, stderr)) + else: + raise HoneycombError( + "Unrecognized feature {0}.".format(feature)) @staticmethod def copy_java_libraries(node): @@ -438,37 +407,51 @@ class HoneycombSetup(object): "node {0}, {1}".format(node, stderr)) @staticmethod - def configure_odl_client(node, odl_name): - """Start ODL client on the specified node. + def copy_odl_client(node, odl_name, src_path, dst_path): + """Copy ODL Client from source path to destination path. - Karaf should be located in /mnt/common, and VPP and Honeycomb should - already be running, otherwise the start will fail. - :param node: Node to start ODL client on. + :param node: Honeycomb node. :param odl_name: Name of ODL client version to use. + :param src_path: Source Path where to find ODl client. + :param dst_path: Destination path. :type node: dict :type odl_name: str - :raises HoneycombError: If Honeycomb fails to start. + :type src_path: str + :type dst_path: str + :raises HoneycombError: If the operation fails. """ - logger.debug("Copying ODL Client to home dir.") - ssh = SSH() ssh.connect(node) - cmd = "cp -r /mnt/common/*karaf_{name}* ~/karaf".format(name=odl_name) + cmd = "cp -r {src}/*karaf_{odl_name}* {dst}".format( + src=src_path, odl_name=odl_name, dst=dst_path) - (ret_code, _, _) = ssh.exec_command_sudo(cmd) + ret_code, _, _ = ssh.exec_command(cmd, timeout=30) if int(ret_code) != 0: raise HoneycombError( "Failed to copy ODL client on node {0}".format(node["host"])) - logger.console("\nStarting ODL client ...") + @staticmethod + def setup_odl_client(node, path): + """Start ODL client on the specified node. - cmd = "~/*karaf*/bin/start" + Karaf should be located in the provided path, and VPP and Honeycomb + should already be running, otherwise the start will fail. + :param node: Node to start ODL client on. + :param path: Path to ODL client on node. + :type node: dict + :type path: str + :raises HoneycombError: If Honeycomb fails to start. + """ + logger.console("\nStarting ODL client ...") ssh = SSH() ssh.connect(node) - (ret_code, _, _) = ssh.exec_command_sudo(cmd) + + cmd = "{path}/*karaf*/bin/start clean".format(path=path) + ret_code, _, _ = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: raise HoneycombError('Node {0} failed to start ODL.'. format(node['host'])) @@ -476,6 +459,31 @@ class HoneycombSetup(object): logger.info("Starting the ODL client on node {0} is " "in progress ...".format(node['host'])) + @staticmethod + def install_odl_features(node, path, *features): + """Install required features on a running ODL client. + + :param node: Honeycomb node. + :param path: Path to ODL client on node. + :param features: Optional, list of additional features to install. + :type node: dict + :type path: str + :type features: list + """ + + ssh = SSH() + ssh.connect(node) + + cmd = "{path}/*karaf*/bin/client -u karaf feature:install " \ + "odl-restconf-all odl-netconf-connector-all".format(path=path) + for feature in features: + cmd += " {0}".format(feature) + + ret_code, _, stderr = ssh.exec_command_sudo(cmd, timeout=120) + + if int(ret_code) != 0: + raise HoneycombError("Feature install did not succeed.") + @staticmethod def check_odl_startup_state(node): """Check the status of ODL client startup. @@ -537,6 +545,52 @@ class HoneycombSetup(object): if status_code == HTTPCodes.OK: logger.info("ODL mount point configured successfully.") elif status_code == HTTPCodes.CONFLICT: - logger.warn("ODL mount point was already configured.") + logger.info("ODL mount point was already configured.") else: raise HoneycombError('Mount point configuration not successful') + + @staticmethod + def stop_odl_client(node, path): + """Stop ODL client service on the specified node. + + :param node: Node to start ODL client on. + :param path: Path to ODL client. + :type node: dict + :type path: str + :raises HoneycombError: If ODL client fails to stop. + """ + + ssh = SSH() + ssh.connect(node) + + cmd = "{0}/*karaf*/bin/stop".format(path) + + ssh = SSH() + ssh.connect(node) + ret_code, _, _ = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + logger.warn("ODL Client refused to shut down.") + cmd = "pkill -f 'karaf'" + (ret_code, _, _) = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + raise HoneycombError('Node {0} failed to stop ODL.'. + format(node['host'])) + + logger.info("ODL client service stopped.") + + @staticmethod + def stop_vpp_service(node): + """Stop VPP service on the specified node. + + :param node: VPP node. + :type node: dict + :raises RuntimeError: If VPP fails to stop. + """ + + ssh = SSH() + ssh.connect(node) + cmd = "service vpp stop" + ret_code, _, _ = ssh.exec_command_sudo(cmd) + if int(ret_code) != 0: + raise RuntimeError("Could not stop VPP service on node {0}".format( + node['host'])) diff --git a/resources/libraries/robot/honeycomb/access_control_lists.robot b/resources/libraries/robot/honeycomb/access_control_lists.robot index 1d42cf186a..3f0b3d0592 100644 --- a/resources/libraries/robot/honeycomb/access_control_lists.robot +++ b/resources/libraries/robot/honeycomb/access_control_lists.robot @@ -18,7 +18,6 @@ | Library | resources.libraries.python.InterfaceUtil | Library | resources.libraries.python.honeycomb.HcAPIKwACL.ACLKeywords | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Documentation | Keywords used to manage ACLs. *** Keywords *** @@ -92,7 +91,7 @@ | | ... | \| Honeycomb enables ACL on interface \| ${nodes['DUT1']} \ | | ... | \| GigabithEthernet0/8/0 \| table0 \| | | [Arguments] | ${node} | ${interface} | ${table_name} -| | InterfaceAPI.Enable ACL on interface +| | Enable ACL on interface | | ... | ${node} | ${interface} | ${table_name} | Honeycomb disables ACL on interface @@ -107,7 +106,7 @@ | | ... | \| Honeycomb disables ACL on interface \| ${nodes['DUT1']} \ | | ... | \| GigabithEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | InterfaceAPI.Disable ACL on interface | ${node} | ${interface} +| | Disable ACL on interface | ${node} | ${interface} | ACL table from Honeycomb should be | | [Documentation] | Retrieves ACL table information from Honeycomb\ @@ -268,7 +267,7 @@ | | ... | \| Interface ACL configuration from Honeycomb should be \ | | ... | \| ${nodes['DUT1']} \| GigabithEthernet0/8/0 \| table0 \| | | [Arguments] | ${node} | ${interface} | ${table_name} -| | ${data}= | InterfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${data}= | Get interface oper data | ${node} | ${interface} | | Should be equal | | ... | ${table_name} | | ... | ${data['vpp-interface-acl:acl']['ingress']['l2-acl']['classify-table']} @@ -306,7 +305,7 @@ | | ... | \| Interface ACL configuration from Honeycomb should be empty \ | | ... | \| ${nodes['DUT1']} \| GigabithEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | ${data}= | InterfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError: 'vpp-interface-acl:acl' | | ... | Set Variable | | ... | ${data['vpp-interface-acl:acl']['l2-acl']['classify-table']} diff --git a/resources/libraries/robot/honeycomb/bridge_domain.robot b/resources/libraries/robot/honeycomb/bridge_domain.robot index e680e82ad4..e26c18d019 100644 --- a/resources/libraries/robot/honeycomb/bridge_domain.robot +++ b/resources/libraries/robot/honeycomb/bridge_domain.robot @@ -15,9 +15,7 @@ | Library | resources.libraries.python.L2Util | Library | resources.libraries.python.honeycomb.HcAPIKwBridgeDomain.BridgeDomainKeywords | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI *** Keywords *** | Honeycomb creates first L2 bridge domain @@ -109,9 +107,9 @@ | | ... | \| ${{split_horizon_group:2, bvi:False}} \| | | [Arguments] | ${node} | ${interface1} | ${interface2} | ${bd_name} | | ... | ${settings} -| | interfaceAPI.Add bridge domain to interface +| | Add bridge domain to interface | | ... | ${node} | ${interface1} | ${bd_name} | &{settings} -| | interfaceAPI.Add bridge domain to interface +| | Add bridge domain to interface | | ... | ${node} | ${interface2} | ${bd_name} | &{settings} | Honeycomb should show interfaces assigned to bridge domain @@ -133,9 +131,9 @@ | | ... | \| bd-04 \| ${{split_horizon_group:2, bvi:False}} \| | | [Arguments] | ${node} | ${interface1} | ${interface2} | ${bd_name} | | ... | ${settings} -| | ${if1_data}= | interfaceAPI.Get interface oper data +| | ${if1_data}= | Get interface oper data | | ... | ${node} | ${interface1} -| | ${if2_data}= | interfaceAPI.Get interface oper data +| | ${if2_data}= | Get interface oper data | | ... | ${node} | ${interface2} | | Should be equal | ${if1_data['v3po:l2']['bridge-domain']} | | ... | ${if2_data['v3po:l2']['bridge-domain']} | ${bd_name} @@ -240,7 +238,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | ${bd_name} | ${settings} | | ... -| | interfaceAPI.Add bridge domain to interface +| | Add bridge domain to interface | | ... | ${node} | ${interface} | ${bd_name} | | ... | ${settings['split-horizon-group']} | | ... | ${settings['bridged-virtual-interface']} @@ -260,7 +258,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | | ... -| | ${if_data}= | interfaceAPI.Get BD Oper Data From Interface +| | ${if_data}= | Get BD Oper Data From Interface | | ... | ${node} | ${interface} | | Should be empty | ${if_data} @@ -280,6 +278,6 @@ | | ... | | [Arguments] | ${node} | ${interface} | ${bd_settings} | | ... -| | ${if_data}= | interfaceAPI.Get BD Oper Data From Interface +| | ${if_data}= | Get BD Oper Data From Interface | | ... | ${node} | ${interface} -| | interfaceAPI.Compare Data Structures | ${if_data} | ${bd_settings} +| | Compare Data Structures | ${if_data} | ${bd_settings} diff --git a/resources/libraries/robot/honeycomb/honeycomb.robot b/resources/libraries/robot/honeycomb/honeycomb.robot index d14dd2d722..603fbfa72f 100644 --- a/resources/libraries/robot/honeycomb/honeycomb.robot +++ b/resources/libraries/robot/honeycomb/honeycomb.robot @@ -12,9 +12,11 @@ # limitations under the License. *** Settings *** -| Library | resources/libraries/python/honeycomb/HoneycombSetup.py -| Library | resources/libraries/python/honeycomb/HoneycombUtil.py -| Library | resources/libraries/python/honeycomb/HcPersistence.py +| Library | resources.libraries.python.honeycomb.HoneycombSetup +| Library | resources.libraries.python.honeycomb.HoneycombUtil +| Library | resources.libraries.python.honeycomb.HcPersistence +| Library | resources.libraries.python.DUTSetup +| Library | resources.libraries.python.InterfaceUtil *** Keywords *** | Configure Honeycomb service on DUTs @@ -85,7 +87,6 @@ | | ... | \| Restart Honeycomb and VPP and clear persisted configuration \ | | ... | \| ${nodes['DUT1']} \| | | [Arguments] | ${node} -| | Log | Performing clean restart of Honeycomb and VPP. | console=True | | Stop Honeycomb service on DUTs | ${node} | | Clear persisted Honeycomb configuration | ${node} | | Setup DUT | ${node} @@ -101,14 +102,14 @@ | | ... | | ... | \| Restart Honeycomb and VPP \| ${nodes['DUT1']} \| | | [Arguments] | ${node} -| | Log | Performing clean restart of Honeycomb and VPP. | console=True -| | Restart Honeycomb and VPP on DUTs | ${node} -| | Wait until keyword succeeds | 4min | 16sec -| | ... | Check honeycomb startup state | ${node} +| | Stop Honeycomb service on DUTs | ${node} +| | Setup DUT | ${node} +| | Configure Honeycomb service on DUTs | ${node} | Archive Honeycomb log file | | [Documentation] | Copy honeycomb.log file from Honeycomb node\ | | ... | to test executor. +| | ... | | ... | *Arguments:* | | ... | - node - information about a DUT node. Type: dictionary | | ... @@ -119,11 +120,126 @@ | | Archive Honeycomb log | ${node} | Configure ODL Client Service On DUT +| | [Documentation] | Configure and start ODL client, then repeatedly check if +| | ... | it is running. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... | - odl_name - Name of ODL client version. Type: string +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Configure ODL Client Service on DUT \| ${nodes['DUT1']} \ +| | ... | \| carbon-SR1 \| | | [Arguments] | ${node} | ${odl_name} -| | Configure ODL client | ${node} | ${odl_name} +| | Copy ODL Client | ${node} | ${odl_name} | /mnt/common | /tmp +| | Setup ODL Client | ${node} | /tmp +| | Wait until keyword succeeds | 2min | 30sec +| | ... | Install ODL Features | ${node} | /tmp | | Wait until keyword succeeds | 4min | 16sec | | ... | Mount Honeycomb on ODL | ${node} | | Wait until keyword succeeds | 2min | 16sec | | ... | Check ODL startup state | ${node} | | Wait until keyword succeeds | 2min | 16sec | | ... | Check honeycomb startup state | ${node} + +| Configure Honeycomb for functional testing +| | [Documentation] | Configure Honeycomb with parameters for functional +| | ... | testing, then start Honeycomb and repeatedly check startup status. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Configure Honeycomb for functional testing \| ${nodes['DUT1']} \| +| | [Arguments] | ${node} +| | Configure Restconf binding address | ${node} +| | Configure Log Level | ${node} | TRACE +| | Configure Persistence | ${node} | disable +| | Configure jVPP timeout | ${node} | ${14} +| | Clear Persisted Honeycomb Configuration | ${node} +| | Configure Honeycomb service on DUTs | ${node} + +| Configure ODL Client for functional testing +| | [Documentation] | Read external variable HC_ODL. Depending on its +| | ... | value either: do nothing, or setup ODL client for testing and +| | ... | create a global variable that modifies Restconf requests to use ODL. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Configure ODL Client for functional testing \| ${nodes['DUT1']} \| +| | [Arguments] | ${node} +| | ${use_odl_client}= | Get Variable Value | ${HC_ODL} +| | Run Keyword If | '${use_odl_client}' != '${NONE}' +| | ... | Run Keywords +| | ... | Set Global Variable | ${use_odl_client} | AND +| | ... | Configure ODL Client Service On DUT | ${node} | ${use_odl_client} +| | ... | ELSE | Log | Variable HC_ODL is not present. Not using ODL. +| | ... | level=INFO + +| Set Up Honeycomb Functional Test Suite +| | [Documentation] | Generic test suite setup for Honeycomb functional tests. +| | ... | Restarts VPP, then enables Honeycomb and optionally ODL, based +| | ... | on external variable. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Set Up Honeycomb Functional Test Suite \| ${nodes['DUT1']} \| +| | [Arguments] | ${node} +| | Setup DUT | ${node} +| | Configure all TGs for traffic script +| | Configure Honeycomb for functional testing | ${node} +| | Configure ODL Client for functional testing | ${node} + +| Tear Down Honeycomb Functional Test Suite +| | [Documentation] | Generic test suite teardown for Honeycomb functional +| | ... | tests. Stops ODL client (if used), then stops Honeycomb and verifies +| | ... | that they are both stopped. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Tear Down Honeycomb Functional Test Suite \| ${nodes['DUT1']} \| +| | [Arguments] | ${node} +| | ${use_odl_client}= | Get Variable Value | ${HC_ODL} +| | Run Keyword If | '${use_odl_client}' != '${NONE}' +| | ... | Run Keywords +| | ... | Stop ODL Client | ${node} | /tmp +| | ... | ${use_odl_client}= | Set Variable | ${NONE} +| | ... | Set Global Variable | ${use_odl_client} +| | Stop Honeycomb service on DUTs | ${node} + +| Enable Honeycomb Feature +| | [Documentation] | Enable the specified feature in Honeycomb configuration. +| | ... | Requires a restart of Honeycomb to take effect. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Enable Honeycomb Feature \| ${nodes['DUT1']} \| NSH \| +| | [arguments] | ${node} | ${feature} +| | Manage Honeycomb Features | ${node} | ${feature} + +| Disable Honeycomb Feature +| | [Documentation] | Disable the specified feature in Honeycomb configuration. +| | ... | Requires a restart of Honeycomb to take effect. +| | ... +| | ... | *Arguments:* +| | ... | - node - information about a DUT node. Type: dictionary +| | ... +| | ... | *Example:* +| | ... +| | ... | \| Disable Honeycomb Feature \| ${nodes['DUT1']} \| NSH \| +| | [arguments] | ${node} | ${feature} +| | Manage Honeycomb Features | ${node} | ${feature} | disable=${True} \ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/interfaces.robot b/resources/libraries/robot/honeycomb/interfaces.robot index 95c6ece277..461a49557e 100644 --- a/resources/libraries/robot/honeycomb/interfaces.robot +++ b/resources/libraries/robot/honeycomb/interfaces.robot @@ -13,9 +13,7 @@ *** Settings *** | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Library | resources.libraries.python.IPv4Util | Library | resources.libraries.python.TrafficScriptExecutor @@ -34,7 +32,7 @@ | | ... | \| Honeycomb configures interface state \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| up \| | | [Arguments] | ${node} | ${interface} | ${state} -| | interfaceAPI.Set interface state | ${node} | ${interface} | ${state} +| | Honeycomb Set Interface State | ${node} | ${interface} | ${state} | Interface state from Honeycomb should be | | [Documentation] | Retrieves interface admin state through Honeycomb and\ @@ -50,7 +48,7 @@ | | ... | \| Interface state from Honeycomb should be \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| up \| | | [Arguments] | ${node} | ${interface} | ${state} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${api_state}= | Set Variable | ${api_data['admin-status']} | | Should be equal | ${api_state} | ${state} @@ -71,7 +69,7 @@ | | ... | \| Interface state from VAT should be \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| up \| | | [Arguments] | ${node} | ${interface} | ${state} -| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface} +| | ${vat_data}= | VPP get interface data | ${node} | ${interface} | | ${vat_state}= | Set Variable if | | ... | ${vat_data['admin_up_down']} == 1 | up | down | | Should be equal | ${vat_state} | ${state} @@ -91,7 +89,7 @@ | | ... | \| Honeycomb sets interface IPv4 address \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 255.255.255.0 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${netmask} -| | interfaceAPI.Add first ipv4 address +| | Add first ipv4 address | | ... | ${node} | ${interface} | ${address} | ${netmask} | Honeycomb sets interface IPv4 address with prefix @@ -109,7 +107,7 @@ | | ... | \| Honeycomb sets interface IPv4 address with prefix \ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | interfaceAPI.Add first ipv4 address +| | Add first ipv4 address | | ... | ${node} | ${interface} | ${address} | ${prefix} | Honeycomb adds interface IPv4 address @@ -127,7 +125,7 @@ | | ... | \| Honeycomb adds interface IPv4 address \ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| 192.168.0.2 \| 24 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | interfaceAPI.Add ipv4 address +| | Add ipv4 address | | ... | ${node} | ${interface} | ${address} | ${prefix} | Honeycomb fails to add interface IPv4 address @@ -164,7 +162,7 @@ | | ... | \| IPv4 address from Honeycomb should be \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| ${24} \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${settings}= | Create Dictionary | | ... | ip=${address} | prefix-length=${prefix} | | Should contain | ${api_data['ietf-ip:ipv4']['address']} | ${settings} @@ -185,7 +183,7 @@ | | ... | \| IPv4 address from VAT should be \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.2 \| ${24} \| 255.255.255.0 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} | ${netmask} -| | ${vpp_data}= | interfaceCLI.VPP get interface ip addresses +| | ${vpp_data}= | VPP get interface ip addresses | | ... | ${node} | ${interface} | ipv4 | | ${settings}= | Create Dictionary | | ... | ip=${address} | netmask=${netmask} | prefix_length=${prefix} @@ -219,7 +217,7 @@ | | ... | \| IPv4 address from Honeycomb should be empty\| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError:* | | ... | Set Variable | ${api_data['ietf-ip:ipv4']['address']} @@ -237,7 +235,7 @@ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} | | Run keyword and expect error | *No JSON object could be decoded* -| | ... | InterfaceCLI.VPP get interface ip addresses +| | ... | VPP get interface ip addresses | | ... | ${node} | ${interface} | ipv4 | Honeycomb adds interface IPv4 neighbor @@ -255,7 +253,7 @@ | | ... | \| Honeycomb adds interface IPv4 neighbor \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.3 \| 08:00:27:c0:5d:37 \ | | [Arguments] | ${node} | ${interface} | ${fib_address} | ${fib_mac} -| | interfaceAPI.Add ipv4 neighbor +| | Add ipv4 neighbor | | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac} | IPv4 neighbor from Honeycomb should be @@ -273,7 +271,7 @@ | | ... | \| IPv4 neighbor from Honeycomb should be \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.4 \| 08:00:27:60:26:ab \| | | [Arguments] | ${node} | ${interface} | ${ip_address} | ${mac_address} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${settings}= | Create Dictionary | | ... | ip=${ip_address} | link-layer-address=${mac_address} | origin=static | | Should contain | ${api_data['ietf-ip:ipv4']['neighbor']} | ${settings} @@ -291,7 +289,7 @@ | | ... | \| Honeycomb clears all interface IPv4 neighbors \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | interfaceAPI.Remove all ipv4 neighbors | ${node} | ${interface} +| | Remove all ipv4 neighbors | ${node} | ${interface} | IPv4 neighbor from Honeycomb should be empty | | [Documentation] | Retrieves ipv4 neighbor list through Honeycomb\ @@ -306,7 +304,7 @@ | | ... | \| IPv4 neighbor from Honeycomb should be empty \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError:* | | ... | Set Variable | ${api_data['ietf-ip:ipv4']['neighbor'][0]['ip']} @@ -326,7 +324,7 @@ | | ... | \| Honeycomb sets interface IPv6 address \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | interfaceAPI.Add first ipv6 address +| | Add first ipv6 address | | ... | ${node} | ${interface} | ${address} | ${prefix} | Honeycomb adds interface IPv6 address @@ -344,7 +342,7 @@ | | ... | \| Honeycomb adds interface IPv6 address \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | interfaceAPI.Add ipv6 address +| | Add ipv6 address | | ... | ${node} | ${interface} | ${address} | ${prefix} | Honeycomb fails to add interface IPv6 address @@ -381,7 +379,7 @@ | | ... | \| IPv6 address from Honeycomb should contain \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${settings}= | Create Dictionary | | ... | ip=${address} | prefix-length=${prefix} | | Should contain | ${api_data['ietf-ip:ipv6']['address']} | ${settings} @@ -401,7 +399,7 @@ | | ... | \| IPv6 address from VAT should contain \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 10::10 \| 64 \| | | [Arguments] | ${node} | ${interface} | ${address} | ${prefix} -| | ${vpp_data}= | interfaceCLI.VPP get interface ip addresses +| | ${vpp_data}= | VPP get interface ip addresses | | ... | ${node} | ${interface} | ipv6 | | ${settings}= | Create Dictionary | | ... | ip=${address} | prefix_length=${prefix} @@ -435,7 +433,7 @@ | | ... | \| IPv6 address from Honeycomb should be empty\| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError:* | | ... | Set Variable | ${api_data['ietf-ip:ipv6']['address']} @@ -453,7 +451,7 @@ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} | | Run keyword and expect error | *No JSON object could be decoded* -| | ... | InterfaceCLI.VPP get interface ip addresses +| | ... | VPP get interface ip addresses | | ... | ${node} | ${interface} | ipv6 | Honeycomb adds interface IPv6 neighbor @@ -471,7 +469,7 @@ | | ... | \| Honeycomb adds interface IPv6 neighbor \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.3 \| 08:00:27:c0:5d:37 \| | | [Arguments] | ${node} | ${interface} | ${fib_address} | ${fib_mac} -| | InterfaceAPI.Add ipv6 neighbor +| | Add ipv6 neighbor | | ... | ${node} | ${interface} | ${fib_address} | ${fib_mac} | IPv6 neighbor from Honeycomb should be @@ -489,7 +487,7 @@ | | ... | \| IPv6 neighbor from Honeycomb should be \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| 192.168.0.4 \| 08:00:27:60:26:ab \| | | [Arguments] | ${node} | ${interface} | ${ip_address} | ${mac_address} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${settings}= | Create Dictionary | | ... | ip=${ip_address} | link-layer-address=${mac_address} | origin=static | | Should contain | ${api_data['ietf-ip:ipv6']['neighbor']} | ${settings} @@ -507,7 +505,7 @@ | | ... | \| Honeycomb clears all interface IPv6 neighbors \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | interfaceAPI.Remove all ipv6 neighbors | ${node} | ${interface} +| | Remove all ipv6 neighbors | ${node} | ${interface} | IPv6 neighbor from Honeycomb should be empty | | [Documentation] | Retrieves ipv6 neighbor list through Honeycomb\ @@ -522,7 +520,7 @@ | | ... | \| IPv6 neighbor from Honeycomb should be empty \| ${nodes['DUT1']} \ | | ... | \| GigabitEthernet0/8/0 \| | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError:* | | ... | Set Variable | ${api_data['ietf-ip:ipv6']['neighbor'][0]['ip']} @@ -541,7 +539,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${{'mtu': 1500}} \ | | [Arguments] | ${node} | ${interface} | ${ethernet} | | :FOR | ${key} | IN | @{ethernet.keys()} -| | | interfaceAPI.Configure interface ethernet +| | | Configure interface ethernet | | | ... | ${node} | ${interface} | ${key} | ${ethernet['${key}']} | Interface ethernet Operational Data From Honeycomb Should Be @@ -559,7 +557,7 @@ | | ... | should be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \ | | ... | \| ${{'mtu': 1500}} \| | | [Arguments] | ${node} | ${interface} | ${ethernet} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | :FOR | ${key} | IN | @{ethernet.keys()} | | | Should be equal | | | ... | ${api_data['v3po:ethernet']['${key}']} | ${ethernet['${key}']} @@ -578,7 +576,7 @@ | | ... | \| Interface ethernet Operational Data From VAT Should Be \ | | ... | should be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1500} \| | | [Arguments] | ${node} | ${interface} | ${mtu} -| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface} +| | ${vat_data}= | VPP get interface data | ${node} | ${interface} | | Should be equal | ${vat_data['mtu']} | ${mtu} | Honeycomb sets interface VRF ID @@ -595,7 +593,7 @@ | | ... | \| Honeycomb sets interface VRF ID \ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| ipv4 \| | | [Arguments] | ${node} | ${interface} | ${vrf_id} | ${ip_version} -| | interfaceAPI.Configure interface routing +| | Configure interface routing | | ... | ${node} | ${interface} | ${ip_version}-vrf-id | ${vrf_id} | Interface VRF ID from Honeycomb should be @@ -614,7 +612,7 @@ | | ... | should be \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \ | | ... | \| ipv4 \| | | [Arguments] | ${node} | ${interface} | ${vrf_id} | ${ip_version} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} | +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | | Should be equal | | ... | ${api_data['v3po:routing']['${ip_version}-vrf-id']} | ${vrf_id} @@ -632,7 +630,7 @@ | | ... | \| Interface VRF ID from VAT should be \ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| | | [Arguments] | ${node} | ${interface} | ${vrf_id} -| | ${vat_data}= | InterfaceCLI.get interface vrf table +| | ${vat_data}= | get interface vrf table | | ... | ${node} | ${interface} | | Should be equal | ${vat_data} | ${vrf_id} @@ -650,7 +648,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| | | ... | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Should be empty | ${api_data} | Interface Operational Data From VAT Should Be empty @@ -667,7 +665,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| | | ... | | [Arguments] | ${node} | ${interface} | -| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface} +| | ${vat_data}= | VPP get interface data | ${node} | ${interface} | | Should be empty | ${vat_data} | Interface indices from Honeycomb and VAT should correspond @@ -686,8 +684,8 @@ | | ... | | [Arguments] | ${node} | ${interface} | | ... -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} -| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} +| | ${vat_data}= | VPP get interface data | ${node} | ${interface} | | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1 | | Should be equal as strings | | ... | ${api_data['if-index']} | ${sw_if_index} @@ -704,7 +702,7 @@ | | ... | | ... | \| Get interface index from oper data \| ${nodes['DUT1']} \| local0 \| | | [Arguments] | ${node} | ${interface} -| | ${data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${data}= | Get interface oper data | ${node} | ${interface} | | Return from keyword | ${data['if-index']} | Honeycomb should show disabled interface in oper data @@ -720,7 +718,7 @@ | | ... | \| Honeycomb should show disabled interface in oper data \ | | ... | \| ${nodes['DUT1']} \| ${vx_interface} \| | | [Arguments] | ${node} | ${index} -| | interfaceAPI.check disabled interface | ${node} | ${index} +| | check disabled interface | ${node} | ${index} | Honeycomb should not show disabled interface in oper data | | [Documentation] | Retrieves list of disabled interfaces\ diff --git a/resources/libraries/robot/honeycomb/l2_fib.robot b/resources/libraries/robot/honeycomb/l2_fib.robot index e63f299d11..f90cbffb20 100644 --- a/resources/libraries/robot/honeycomb/l2_fib.robot +++ b/resources/libraries/robot/honeycomb/l2_fib.robot @@ -15,7 +15,6 @@ | Library | resources.libraries.python.L2Util | Library | resources.libraries.python.honeycomb.HcAPIKwBridgeDomain.BridgeDomainKeywords | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI *** Keywords *** | Honeycomb adds L2 FIB entry to bridge domain @@ -70,7 +69,7 @@ | | ... | | ${l2_fib_data}= | Get L2 FIB Entry | ${node} | ${bd_name} | | ... | ${l2_fib_ref_data['phys-address']} -| | interfaceAPI.Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data} +| | Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data} | Honeycomb removes L2 FIB entry | | [Documentation] | Remove the specified L2 FIB entry from the bridge \ @@ -167,7 +166,7 @@ | | ... | | ${l2_fib_data}= | Get L2 FIB entry VAT | ${node} | ${bd_index} | | ... | ${l2_fib_ref_data['mac']} -| | interfaceAPI.Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data} +| | Compare Data Structures | ${l2_fib_data} | ${l2_fib_ref_data} | L2 FIB Table from VAT should be empty | | [Documentation] | Check if the L2 FIB table in the specified bridge domain \ diff --git a/resources/libraries/robot/honeycomb/nsh.robot b/resources/libraries/robot/honeycomb/nsh.robot index fbb5b89567..dfb0c989f6 100644 --- a/resources/libraries/robot/honeycomb/nsh.robot +++ b/resources/libraries/robot/honeycomb/nsh.robot @@ -15,7 +15,6 @@ | Library | resources.libraries.python.InterfaceUtil | Library | resources.libraries.python.honeycomb.HcAPIKwNSH.NSHKeywords | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Documentation | Keywords used to test Honeycomb NSH node. *** Keywords *** diff --git a/resources/libraries/robot/honeycomb/persistence.robot b/resources/libraries/robot/honeycomb/persistence.robot index 6fe439a759..17bacd17b1 100644 --- a/resources/libraries/robot/honeycomb/persistence.robot +++ b/resources/libraries/robot/honeycomb/persistence.robot @@ -13,8 +13,7 @@ *** Settings *** | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI -| Library | resources/libraries/python/honeycomb/HcPersistence.py +| Library | resources.libraries.python.honeycomb.HcPersistence | Resource | resources/libraries/robot/honeycomb/honeycomb.robot | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Resource | resources/libraries/robot/honeycomb/vxlan.robot @@ -163,8 +162,8 @@ | | ... | ${node} | ${interface} | ${sub_if_id} | ${tag_rewrite_pop_1_oper} | | Rewrite tag from VAT should be | | ... | ${node} | ${sub_if_name} | ${tag_rewrite_pop_1_VAT} -| | ${data_conf}= | InterfaceAPI.Get all interfaces cfg data | ${node} -| | ${data_oper}= | InterfaceAPI.Get all interfaces oper data | ${node} +| | ${data_conf}= | Get all interfaces cfg data | ${node} +| | ${data_oper}= | Get all interfaces oper data | ${node} | | Compare interface lists | ${data_conf} | ${data_oper} | Honeycomb and VPP should have default configuration diff --git a/resources/libraries/robot/honeycomb/policer.robot b/resources/libraries/robot/honeycomb/policer.robot index 4319b27a21..17191c5b37 100644 --- a/resources/libraries/robot/honeycomb/policer.robot +++ b/resources/libraries/robot/honeycomb/policer.robot @@ -14,7 +14,6 @@ *** Settings *** | Resource | resources/libraries/robot/traffic.robot | Library | resources.libraries.python.honeycomb.Routing.RoutingKeywords -| ... | WITH NAME | RoutingKeywordsAPI | Variables | resources/test_data/honeycomb/policer_variables.py | Documentation | Keywords used to test Policer using Honeycomb. diff --git a/resources/libraries/robot/honeycomb/port_mirroring.robot b/resources/libraries/robot/honeycomb/port_mirroring.robot index 63fbcea7a0..64faa5e233 100644 --- a/resources/libraries/robot/honeycomb/port_mirroring.robot +++ b/resources/libraries/robot/honeycomb/port_mirroring.robot @@ -13,7 +13,6 @@ *** Settings *** | 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 @@ -39,7 +38,7 @@ | | ... | \| {'iface-ref': 'local0', 'state': 'both'}] \| | | ... | | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} -| | InterfaceAPI.Configure interface SPAN +| | Configure interface SPAN | | ... | ${node} | ${dst_interface} | ${src_interfaces} | Interface SPAN Operational Data From Honeycomb Should Be @@ -58,7 +57,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| GigabitEthernet0/9/0 \| | | ... | | [Arguments] | ${node} | ${dst_interface} | @{src_interfaces} -| | ${data}= | InterfaceAPI.Get interface oper data | ${node} | ${dst_interface} +| | ${data}= | Get interface oper data | ${node} | ${dst_interface} | | ${data}= | Set Variable | | ... | ${data['v3po:span']['mirrored-interfaces']['mirrored-interface']} | | Sort list | ${data} @@ -118,7 +117,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| | | ... | | [Arguments] | ${node} | ${dst_interface} -| | InterfaceAPI.Configure interface SPAN | ${node} | ${dst_interface} +| | Configure interface SPAN | ${node} | ${dst_interface} | Interface SPAN Operational Data from Honeycomb should not exist | | [Documentation] | Retrieves interface operational data and verifies that\ @@ -132,7 +131,7 @@ | | ... | | ... | \| | | [Arguments] | ${node} | ${dst_interface} -| | ${data}= | InterfaceAPI.Get interface oper data | ${node} | ${dst_interface} +| | ${data}= | Get interface oper data | ${node} | ${dst_interface} | | Run keyword and expect error | *KeyError* | Set Variable | | ... | ${data['span']['mirrored-interfaces']['mirrored-interface']} @@ -169,7 +168,7 @@ | | ... | \| {'iface-ref': 'local0', 'state': 'both'}] \| | | ... | | [Arguments] | ${node} | ${dst_interface} | ${index} | @{src_interfaces} -| | InterfaceAPI.Configure sub interface SPAN +| | Configure sub interface SPAN | | ... | ${node} | ${dst_interface} | ${index} | ${src_interfaces} | Sub-Interface SPAN Operational Data from Honeycomb should be @@ -190,7 +189,7 @@ | | ... | \| GigabitEthernet0/9/0 \| | | ... | | [Arguments] | ${node} | ${dst_interface} | ${index} | @{src_interfaces} -| | ${data}= | InterfaceAPI.Get sub interface oper data +| | ${data}= | Get sub interface oper data | | ... | ${node} | ${dst_interface} | ${index} | | ${data}= | Set Variable | | ... | ${data['subinterface-span:span-state']['mirrored-interfaces']['mirrored-interface']} @@ -232,7 +231,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| | | ... | | [Arguments] | ${node} | ${dst_interface} | ${index} -| | InterfaceAPI.Configure sub interface SPAN +| | Configure sub interface SPAN | | ... | ${node} | ${dst_interface} | ${index} | Sub-Interface SPAN Operational Data from Honeycomb should not exist @@ -250,7 +249,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| | | .... | | [Arguments] | ${node} | ${dst_interface} | ${index} -| | ${data}= | InterfaceAPI.Get sub interface oper data +| | ${data}= | Get sub interface oper data | | ... | ${node} | ${dst_interface} | ${index} | | Run keyword and expect error | *KeyError* | Set Variable | | ... | ${data['subinterface-span:span-state']['mirrored-interfaces']['mirrored-interface']} \ No newline at end of file diff --git a/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot b/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot index 92145f82fa..130e184d9c 100644 --- a/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot +++ b/resources/libraries/robot/honeycomb/provider_backbone_bridge.robot @@ -13,7 +13,6 @@ *** Settings *** | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | IfAPI *** Keywords *** | Honeycomb creates PBB sub-interface @@ -33,8 +32,8 @@ | | ... | | [Arguments] | ${node} | ${super_if} | ${params} | | ... -| | IfAPI.Set Interface Up | ${node} | ${super_if} -| | IfAPI.Create PBB Sub Interface +| | Set Interface Up | ${node} | ${super_if} +| | Create PBB Sub Interface | | ... | ${node} | ${super_if} | ${params} | Honeycomb removes PBB sub-interface @@ -71,7 +70,7 @@ | | ... | | [Arguments] | ${node} | ${super_if} | ${params} | | ... -| | IfAPI.Set Interface Up | ${node} | ${super_if} +| | Set Interface Up | ${node} | ${super_if} | | Run keyword and expect error | *HoneycombError*not successful*. -| | ... | IfAPI.Create PBB Sub Interface +| | ... | Create PBB Sub Interface | | ... | ${node} | ${super_if} | ${params} diff --git a/resources/libraries/robot/honeycomb/slaac.robot b/resources/libraries/robot/honeycomb/slaac.robot index 966f95fa42..1304c2b8ec 100644 --- a/resources/libraries/robot/honeycomb/slaac.robot +++ b/resources/libraries/robot/honeycomb/slaac.robot @@ -102,5 +102,5 @@ | | ... | | [Arguments] | ${node} | ${interface} | | Honeycomb removes SLAAC configuration | ${node} | ${interface} -| | And InterfaceAPI.Set Interface State | ${node} | ${interface} | down +| | And Honeycomb configures interface state | ${node} | ${interface} | down | | Honeycomb removes interface IPv6 addresses | ${node} | ${interface} diff --git a/resources/libraries/robot/honeycomb/sub_interface.robot b/resources/libraries/robot/honeycomb/sub_interface.robot index 4b93de9b8c..69eb9003d1 100644 --- a/resources/libraries/robot/honeycomb/sub_interface.robot +++ b/resources/libraries/robot/honeycomb/sub_interface.robot @@ -13,10 +13,8 @@ *** Settings *** | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI | Library | resources.libraries.python.L2Util | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Resource | resources/libraries/robot/honeycomb/bridge_domain.robot | Documentation | Keywords used to manipulate sub-interfaces. @@ -43,7 +41,7 @@ | | [Arguments] | ${node} | ${super_interface} | | ... | ${match} | ${tags} | ${sub_interface_settings} | | ... -| | interfaceAPI.Create sub interface | ${node} | ${super_interface} +| | Honeycomb Create sub interface | ${node} | ${super_interface} | | ... | ${match} | ${tags} | &{sub_interface_settings} | Sub-interface Operational Data From Honeycomb Should Be @@ -65,9 +63,9 @@ | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... | ${sub_if_settings} | | ... -| | ${api_data}= | interfaceAPI.Get sub interface oper data +| | ${api_data}= | Get sub interface oper data | | ... | ${node} | ${super_interface} | ${identifier} -| | interfaceAPI.Compare Data Structures | ${api_data} | ${sub_if_settings} +| | Compare Data Structures | ${api_data} | ${sub_if_settings} | Sub-interface Operational Data From Honeycomb Should Be empty | | [Documentation] | Retrieves sub-interface configuration through Honeycomb \ @@ -85,7 +83,7 @@ | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... | | Run keyword and expect error | *KeyError: 'vpp-vlan:sub-interfaces'* -| | ... | interfaceAPI.Get sub interface oper data +| | ... | Get sub interface oper data | | ... | ${node} | ${super_interface} | ${identifier} | Sub-interface state from Honeycomb should be @@ -107,7 +105,7 @@ | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... | ${admin_state} | ${oper_state} | | ... -| | ${api_data}= | interfaceAPI.Get sub interface oper data +| | ${api_data}= | Get sub interface oper data | | ... | ${node} | ${super_interface} | ${identifier} | | Should be equal | ${api_data['admin-status']} | ${admin_state} | | Should be equal | ${api_data['oper-status']} | ${oper_state} @@ -129,7 +127,7 @@ | | ... | | [Arguments] | ${node} | ${sub_interface} | ${sub_interface_settings} | | ... -| | ${vat_data}= | InterfaceCLI.VPP get interface data +| | ${vat_data}= | VPP get interface data | | ... | ${node} | ${sub_interface} | | Should be equal as strings | ${vat_data['sub_id']} | | ... | ${sub_interface_settings['identifier']} @@ -160,7 +158,7 @@ | | ... | | [Arguments] | ${node} | ${sub_interface} | ${admin_state} | ${oper_state} | | ... -| | ${vat_data}= | InterfaceCLI.VPP get interface data +| | ${vat_data}= | VPP get interface data | | ... | ${node} | ${sub_interface} | | Run keyword if | '${admin_state}' == 'down' | | ... | Should be equal as strings | ${vat_data['admin_up_down']} | 0 @@ -189,9 +187,9 @@ | | ... | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... -| | ${api_data}= | interfaceAPI.Get sub interface oper data +| | ${api_data}= | Get sub interface oper data | | ... | ${node} | ${super_interface} | ${identifier} -| | ${vat_data}= | InterfaceCLI.VPP get interface data +| | ${vat_data}= | VPP get interface data | | ... | ${node} | ${super_interface}.${identifier} | | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1 | | Should be equal as strings @@ -211,7 +209,7 @@ | | ... | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... -| | interfaceAPI.Set sub interface state +| | Set sub interface state | | ... | ${node} | ${super_interface} | ${identifier} | up | Honeycomb sets the sub-interface down @@ -228,7 +226,7 @@ | | ... | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... -| | interfaceAPI.Set sub interface state +| | Set sub interface state | | ... | ${node} | ${super_interface} | ${identifier} | down | Honeycomb fails to set sub-interface up @@ -246,7 +244,7 @@ | | [Arguments] | ${node} | ${super_interface} | ${identifier} | | ... | | Run keyword and expect error | *HoneycombError: * was not successful. * 500. -| | ... | interfaceAPI.Set sub interface state +| | ... | Set sub interface state | | ... | ${node} | ${super_interface} | ${identifier} | up | Honeycomb adds sub-interface to bridge domain @@ -265,7 +263,7 @@ | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${sub_bd_setings} | | ... -| | interfaceAPI.Add bridge domain to sub interface +| | Add bridge domain to sub interface | | ... | ${node} | ${super_if} | ${identifier} | ${sub_bd_setings} | Sub-interface bridge domain Operational Data From Honeycomb Should Be @@ -284,7 +282,7 @@ | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} | | ... -| | ${if_data}= | interfaceAPI.Get BD data from sub interface +| | ${if_data}= | Get BD data from sub interface | | ... | ${node} | ${super_if} | ${identifier} | | Should be equal | ${if_data['bridge-domain']} | | ... | ${settings['bridge-domain']} @@ -330,7 +328,7 @@ | | [Arguments] | ${node} | ${super_if} | | ... | | Run keyword and expect error | *HoneycombError:*not successful. * code: 500. -| | ... | interfaceAPI.Remove all sub interfaces +| | ... | Remove all sub interfaces | | ... | ${node} | ${super_if} | Honeycomb configures tag rewrite @@ -349,7 +347,7 @@ | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} | | ... -| | interfaceAPI.Configure tag rewrite +| | Configure tag rewrite | | ... | ${node} | ${super_if} | ${identifier} | ${settings} | Rewrite tag from Honeycomb should be empty @@ -367,7 +365,7 @@ | | [Arguments] | ${node} | ${super_if} | ${identifier} | | ... | | Run keyword and expect error | *Hon*Error*oper*does not contain*tag-rewrite* -| | ... | interfaceAPI.Get tag rewrite oper data +| | ... | Get tag rewrite oper data | | ... | ${node} | ${super_if} | ${identifier} | Rewrite tag from Honeycomb should be @@ -387,9 +385,9 @@ | | ... | \| ${tag_rewrite_push_oper} \| | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} -| | ${api_data}= | interfaceAPI.Get tag rewrite oper data +| | ${api_data}= | Get tag rewrite oper data | | ... | ${node} | ${super_if} | ${identifier} -| | interfaceAPI.Compare Data Structures +| | Compare Data Structures | | ... | ${api_data} | ${settings} | Rewrite tag from VAT should be @@ -409,8 +407,8 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| ${rw_params} \| | | ... | | [Arguments] | ${node} | ${interface} | ${rw_settings} -| | ${vat_data}= | InterfaceCLI.VPP get interface data | ${node} | ${interface} -| | interfaceAPI.Compare Data Structures | ${vat_data} | ${rw_settings} +| | ${vat_data}= | VPP get interface data | ${node} | ${interface} +| | Compare Data Structures | ${vat_data} | ${rw_settings} | Honeycomb fails to set wrong rewrite tag | | [Documentation] | Honeycomb tries to set wrong rewrite tag and expects\ @@ -429,7 +427,7 @@ | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${settings} | | Run keyword and expect error | *HoneycombError: * was not successful. *00. -| | ... | interfaceAPI.Configure tag rewrite +| | ... | Configure tag rewrite | | ... | ${node} | ${super_if} | ${identifier} | ${settings} | Honeycomb sets sub-interface ipv4 address @@ -469,7 +467,7 @@ | | ... | \| 192.168.0.2 \| ${24} \| | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} -| | ${if_data}= | interfaceAPI.Get sub interface oper data +| | ${if_data}= | Get sub interface oper data | | ... | ${node} | ${super_if} | ${identifier} | | Should be equal | | ... | ${if_data['ipv4']['address'][0]['ip']} | ${address} @@ -492,7 +490,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| | | ... | | [Arguments] | ${node} | ${sub_interface} | ${address} | ${prefix} -| | ${data}= | interfaceCLI.VPP get interface ip addresses +| | ${data}= | VPP get interface ip addresses | | ... | ${node} | ${sub_interface} | ipv4 | | Should be equal | ${data[0]['ip']} | ${address} | | Should be equal | ${data[0]['prefix_length']} | ${prefix} @@ -528,7 +526,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} -| | ${if_data}= | interfaceAPI.Get sub interface oper data +| | ${if_data}= | Get sub interface oper data | | ... | ${node} | ${super_if} | ${identifier} | | Run keyword and expect error | *KeyError: 'ipv4'* | | ... | Set Variable | ${if_data['ipv4']['address'][0]['ip']} @@ -548,7 +546,7 @@ | | ... | | [Arguments] | ${node} | ${sub_interface} | | Run keyword and expect error | *No JSON object could be decoded* -| | ... | interfaceCLI.VPP get interface ip addresses +| | ... | VPP get interface ip addresses | | ... | ${node} | ${sub_interface} | ipv4 | Honeycomb sets sub-interface ipv6 address @@ -588,7 +586,7 @@ | | ... | \| 10::10 \| ${64} \| | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} | ${address} | ${prefix} -| | ${if_data}= | interfaceAPI.Get sub interface oper data +| | ${if_data}= | Get sub interface oper data | | ... | ${node} | ${super_if} | ${identifier} | | ${settings}= | Create Dictionary | | ... | ip=${address} | prefix-length=${prefix} @@ -610,7 +608,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0.1 \| | | ... | | [Arguments] | ${node} | ${sub_interface} | ${address} | ${prefix} -| | ${data}= | interfaceCLI.VPP get interface ip addresses +| | ${data}= | VPP get interface ip addresses | | ... | ${node} | ${sub_interface} | ipv6 | | Should be equal | ${data[0]['ip']} | ${address} | | Should be equal | ${data[0]['prefix_length']} | ${prefix} @@ -646,7 +644,7 @@ | | ... | \| ${nodes['DUT1']} \| GigabitEthernet0/8/0 \| ${1} \| | | ... | | [Arguments] | ${node} | ${super_if} | ${identifier} -| | ${if_data}= | interfaceAPI.Get sub interface oper data +| | ${if_data}= | Get sub interface oper data | | ... | ${node} | ${super_if} | ${identifier} | | Run keyword and expect error | *KeyError: 'ipv6'* | | ... | Set Variable | ${if_data['ipv6']['address'][0]['ip']} @@ -666,5 +664,5 @@ | | ... | | [Arguments] | ${node} | ${sub_interface} | | Run keyword and expect error | *No JSON object could be decoded* -| | ... | interfaceCLI.VPP get interface ip addresses +| | ... | VPP get interface ip addresses | | ... | ${node} | ${sub_interface} | ipv6 diff --git a/resources/libraries/robot/honeycomb/tap.robot b/resources/libraries/robot/honeycomb/tap.robot index 1a045d1909..0d5585b4bf 100644 --- a/resources/libraries/robot/honeycomb/tap.robot +++ b/resources/libraries/robot/honeycomb/tap.robot @@ -13,9 +13,7 @@ *** Settings *** | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Documentation | Keywords used to manipulate TAP interfaces. *** Keywords *** @@ -33,7 +31,7 @@ | | ... | 'mac':'08:00:27:60:26:ab', 'device-instance':3}} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | interfaceAPI.Create TAP interface | ${node} | ${interface} +| | Create TAP interface | ${node} | ${interface} | | ... | &{settings} | Honeycomb configures TAP interface @@ -50,7 +48,7 @@ | | ... | 'mac':'08:00:27:60:26:ab', 'device-instance':3}} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | interfaceAPI.Configure interface TAP | ${node} | ${interface} +| | Configure interface TAP | ${node} | ${interface} | | ... | &{settings} | Honeycomb removes TAP interface @@ -65,7 +63,7 @@ | | ... | \| Honeycomb removes TAP interface \ | | ... | \| ${nodes['DUT1']} \| tap_int1 \| | | [Arguments] | ${node} | ${interface} -| | interfaceAPI.Delete interface | ${node} | ${interface} +| | Delete interface | ${node} | ${interface} | TAP Operational Data From Honeycomb Should Be | | [Documentation] | Retrieves interface TAP configuration through Honeycomb\ @@ -83,7 +81,7 @@ | | ... | 'mac':'08:00:27:60:26:ab', 'device-instance':3}} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${api_tap}= | Set Variable | ${api_data['v3po:tap']} | | Should be equal | ${api_tap['tap-name']} | ${settings['tap-name']} | | ${api_mac}= | Set Variable | ${api_data['phys-address']} @@ -122,7 +120,7 @@ | | ... | \| ${nodes['DUT1']} \| tap_int1 \| | | ... | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError: 'v3po:tap' | Set Variable | | ... | ${api_data['v3po:tap']} diff --git a/resources/libraries/robot/honeycomb/vhost_user.robot b/resources/libraries/robot/honeycomb/vhost_user.robot index b0941ed1d3..0c662993b4 100644 --- a/resources/libraries/robot/honeycomb/vhost_user.robot +++ b/resources/libraries/robot/honeycomb/vhost_user.robot @@ -13,9 +13,7 @@ *** Settings *** | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI | Documentation | Keywords used to manipulate vhost-user unterfaces. *** Keywords *** @@ -33,7 +31,7 @@ | | ... | \| ${nodes['DUT1']} \| vhost_test \| ${vhost_user_settings} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | interfaceAPI.Create vhost user interface | ${node} | ${interface} +| | Create vhost user interface | ${node} | ${interface} | | ... | &{settings} | Honeycomb removes vhost-user interface @@ -48,7 +46,7 @@ | | ... | \| ${nodes['DUT1']} \| vhost_test \| | | ... | | [Arguments] | ${node} | ${interface} -| | interfaceAPI.Delete interface | ${node} | ${interface} +| | Delete interface | ${node} | ${interface} | Honeycomb configures vhost-user interface | | [Documentation] | Configure a vhost-user interface using Honeycomb API. @@ -64,7 +62,7 @@ | | ... | \| ${nodes['DUT1']} \| vhost_test \| ${new_vhost_user_settings} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | interfaceAPI.Configure interface vhost user | ${node} | ${interface} +| | Configure interface vhost user | ${node} | ${interface} | | ... | &{settings} | Vhost-user Operational Data From Honeycomb Should Be @@ -82,7 +80,7 @@ | | ... | \| ${nodes['DUT1']} \| vhost_test \| ${vhost_user_settings} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${api_vhost}= | Set Variable | ${api_data['v3po:vhost-user']} | | :FOR | ${key} | IN | @{settings.keys()} | | | Should be equal | ${api_vhost['${key}']} | ${settings['${key}']} @@ -126,7 +124,7 @@ | | ... | \| ${nodes['DUT1']} \| vhost_test \| | | ... | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError: 'v3po:vhost-user' | | ... | Should be empty | ${api_data['v3po:vhost-user']} @@ -160,7 +158,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | ${settings} | | Run Keyword And Expect Error | HoneycombError: * Status code: 500. -| | ... | interfaceAPI.Configure interface vhost user | ${node} | ${interface} +| | ... | Configure interface vhost user | ${node} | ${interface} | | ... | &{settings} | Honeycomb fails setting invalid vhost-user configuration @@ -178,5 +176,5 @@ | | ... | | [Arguments] | ${node} | ${interface} | ${settings} | | Run Keyword And Expect Error | HoneycombError: * Status code: 400. -| | ... | interfaceAPI.Configure interface vhost user | ${node} | ${interface} +| | ... | Configure interface vhost user | ${node} | ${interface} | | ... | &{settings} diff --git a/resources/libraries/robot/honeycomb/vxlan.robot b/resources/libraries/robot/honeycomb/vxlan.robot index b3bf083587..ed21d192c8 100644 --- a/resources/libraries/robot/honeycomb/vxlan.robot +++ b/resources/libraries/robot/honeycomb/vxlan.robot @@ -13,9 +13,7 @@ *** Settings *** | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI *** Keywords *** | Honeycomb sets interface VxLAN configuration @@ -32,7 +30,7 @@ | | ... | 'dst':'192.168.0.3', 'vni':5, 'encap-vrf-id':0}} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | interfaceAPI.Create VxLAN interface | ${node} | ${interface} +| | Honeycomb Create VxLAN interface | ${node} | ${interface} | | ... | &{settings} | Honeycomb removes VxLAN tunnel settings @@ -47,7 +45,7 @@ | | ... | | ... | \| Honeycomb removes VxLAN tunnel \| ${nodes['DUT1']} \| vxlan_01 \| | | [Arguments] | ${node} | ${interface} -| | interfaceAPI.Delete interface | ${node} | ${interface} +| | Delete interface | ${node} | ${interface} | VxLAN Operational Data From Honeycomb Should Be | | [Documentation] | Retrieves interface VxLAN configuration through Honeycomb\ @@ -65,7 +63,7 @@ | | ... | 'dst':'192.168.0.3', 'vni':5, 'encap-vrf-id':0}} \| | | ... | | [Arguments] | ${node} | ${interface} | ${settings} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${api_vxlan}= | Set Variable | ${api_data['v3po:vxlan']} | | :FOR | ${key} | IN | @{settings.keys()} | | | Should be equal | ${api_vxlan['${key}']} | ${settings['${key}']} @@ -111,7 +109,7 @@ | | ... | \|${nodes['DUT1']} \| vxlan_01 \| | | ... | | [Arguments] | ${node} | ${interface} -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Run keyword and expect error | *KeyError: 'v3po:vxlan' | Set Variable | | ... | ${api_data['v3po:vxlan']} @@ -149,7 +147,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | ${settings} | | Run Keyword And Expect Error | HoneycombError: * Status code: 500. -| | ... | interfaceAPI.Configure interface vxlan +| | ... | Honeycomb Configure interface vxlan | | ... | ${node} | ${interface} | &{settings} | Honeycomb fails setting invalid VxLAN configuration @@ -169,5 +167,5 @@ | | [Arguments] | ${node} | ${interface} | ${settings_list} | | :FOR | ${settings} | IN | @{settings_list} | | | Run Keyword And Expect Error | HoneycombError: * Status code: 500. -| | | ... | interfaceAPI.Create VxLAN interface +| | | ... | Honeycomb Create VxLAN interface | | | ... | ${node} | ${interface} | &{settings} diff --git a/resources/libraries/robot/honeycomb/vxlan_gpe.robot b/resources/libraries/robot/honeycomb/vxlan_gpe.robot index 6384061edd..2f2cfc50b4 100644 --- a/resources/libraries/robot/honeycomb/vxlan_gpe.robot +++ b/resources/libraries/robot/honeycomb/vxlan_gpe.robot @@ -13,9 +13,7 @@ *** Settings *** | Library | resources.libraries.python.InterfaceUtil -| ... | WITH NAME | interfaceCLI | Library | resources.libraries.python.honeycomb.HcAPIKwInterfaces.InterfaceKeywords -| ... | WITH NAME | InterfaceAPI *** Variables *** # Translation table used to convert values received from Honeycomb to values @@ -46,7 +44,7 @@ | | [Arguments] | ${node} | ${interface} | | ... | ${base_settings} | ${vxlan_gpe_settings} | | ... -| | interfaceAPI.Create VxLAN GPE interface +| | Create VxLAN GPE interface | | ... | ${node} | ${interface} | &{base_settings} | &{vxlan_gpe_settings} | Honeycomb removes VxLAN GPE interface @@ -64,7 +62,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | | ... -| | interfaceAPI.Delete interface | ${node} | ${interface} +| | Delete interface | ${node} | ${interface} | VxLAN GPE Operational Data From Honeycomb Should Be | | [Documentation] | Uses Honeycomb API to get operational data about the\ @@ -85,7 +83,7 @@ | | [Arguments] | ${node} | ${interface} | | ... | ${base_settings} | ${vxlan_gpe_settings} | | ... -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Should be equal as strings | | ... | ${api_data['name']} | ${base_settings['name']} | | Should be equal as strings @@ -148,7 +146,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | | ... -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | ${vat_data}= | VxLAN GPE Dump | ${node} | ${interface} | | ${sw_if_index}= | EVALUATE | ${vat_data['sw_if_index']} + 1 | | Should be equal as strings @@ -167,7 +165,7 @@ | | ... | | [Arguments] | ${node} | ${interface} | | ... -| | ${api_data}= | interfaceAPI.Get interface oper data | ${node} | ${interface} +| | ${api_data}= | Get interface oper data | ${node} | ${interface} | | Should be empty | ${api_data} | VxLAN GPE Operational Data From VAT Should Be empty @@ -206,5 +204,5 @@ | | ... | ${base_settings} | ${vxlan_gpe_settings} | | ... | | Run keyword and expect error | *HoneycombError*not successful. * code: *00. -| | ... | interfaceAPI.Create VxLAN GPE interface +| | ... | Create VxLAN GPE interface | | ... | ${node} | ${interface} | &{base_settings} | &{vxlan_gpe_settings} diff --git a/tests/func/honeycomb/__init__.robot b/tests/func/honeycomb/__init__.robot index 3f79a6a1f8..fff6097d08 100644 --- a/tests/func/honeycomb/__init__.robot +++ b/tests/func/honeycomb/__init__.robot @@ -21,29 +21,7 @@ | Resource | resources/libraries/robot/honeycomb/honeycomb.robot | ... | Suite Setup | Run Keywords | Configure all DUTs before test | AND -| ... | Configure Honeycomb for testing | ${node} | AND -| ... | Configure ODL Client for testing | ${node} | AND -| ... | Set Global Variable | ${node} +| ... | Set Global Variable | ${node} | AND +| ... | Stop Honeycomb service on DUTs | ${node} | ... | Suite Teardown | Archive Honeycomb log file | ${node} - -*** Keywords *** -| Configure Honeycomb for testing -| | [Arguments] | ${node} -| | Configure Restconf binding address | ${node} -| | Enable Module Features | ${node} -| | Configure Log Level | ${node} | TRACE -| | Configure Persistence | ${node} | disable -| | Configure jVPP timeout | ${node} | ${14} -| | Clear Persisted Honeycomb Configuration | ${node} -| | Configure Honeycomb service on DUTs | ${node} - -| Configure ODL Client for testing -| | [Arguments] | ${node} -| | ${use_odl_client}= | Get Variable Value | ${HC_ODL} -| | Run Keyword If | '${use_odl_client}' != '${NONE}' -| | ... | Run Keywords -| | ... | Set Global Variable | ${use_odl_client} | AND -| | ... | Configure ODL Client Service On DUT | ${node} | ${use_odl_client} -| | ... | ELSE | Log | Variable HC_ODL is not present. Not using ODL. -| | ... | level=INFO diff --git a/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot index b18b111981..f66eef88c4 100644 --- a/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot @@ -21,7 +21,9 @@ | Resource | resources/libraries/robot/honeycomb/access_control_lists.robot | Variables | resources/test_data/honeycomb/acl.py | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb access control lists test suite.* | ... diff --git a/tests/func/honeycomb/mgmt-cfg-dhcp-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-dhcp-apihc-apivat-func.robot index fba37e6318..d73334eabd 100644 --- a/tests/func/honeycomb/mgmt-cfg-dhcp-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-dhcp-apihc-apivat-func.robot @@ -28,9 +28,9 @@ | ... | Documentation | *Honeycomb DHCP relay test suite.* | ... -| Test Setup | Clear Packet Trace on All DUTs | ${nodes} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC diff --git a/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot b/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot index 3e3c64fd1f..6989d356c7 100644 --- a/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot @@ -25,7 +25,10 @@ | ... | Force Tags | HC_FUNC | HC_REST_ONLY | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} +| ... *** Variables *** | ${interface}= | ${node['interfaces']['port1']['name']} diff --git a/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot index f766eb296c..45ffd93af6 100644 --- a/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot @@ -19,9 +19,11 @@ | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Variables | resources/test_data/honeycomb/sub_interfaces.py | ... -| Suite Setup | Add Interface local0 To Topology | ${node} +| Suite Setup | Run Keywords +| ... | Set Up Honeycomb Functional Test Suite | ${node} | AND +| ... | Add Interface local0 To Topology | ${node} | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC | ... diff --git a/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot index 03160e0a65..804c067a8a 100644 --- a/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot @@ -25,7 +25,9 @@ | ... | Force Tags | HC_FUNC | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb interface management test suite.* @@ -214,40 +216,7 @@ | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if1} | ${dut_to_tg_if1_mac} -| TC11: Honeycomb fails to configure two IPv4 addresses from the same subnet -| | [Documentation] | Check if Honeycomb can configure two IPv4 addresses in\ -| | ... | the same subnet onto a single interface. It should not be possible. -| | ... -| | [Teardown] | Honeycomb removes interface IPv4 addresses | ${node} -| | ... | ${interface} -| | ... -| | [Tags] | EXPECTED_FAILING -| | ... -# VPP API does not configure the second address, but returns success. VPP-649 -| | When Honeycomb sets interface IPv4 address with prefix -| | ... | ${node} | ${interface} | 192.168.0.1 | ${9} -| | Then Honeycomb fails to add interface IPv4 address -| | ... | ${node} | ${interface} | 192.168.0.2 | ${9} -| | And Honeycomb fails to add interface IPv4 address -| | ... | ${node} | ${interface} | 192.232.0.2 | ${9} - -| TC12: Honeycomb fails to configure two IPv6 addresses from the same subnet -| | [Documentation] | Check if Honeycomb can configure two IPv6 addresses in\ -| | ... | the same subnet onto a single interface. It should not be possible. -| | ... -| | [Tags] | EXPECTED_FAILING -| | ... -# VPP API does not configure the second address, but returns success. VPP-649 -| | [Teardown] | Honeycomb removes interface IPv6 addresses | ${node} -| | ... | ${interface} -| | When Honeycomb sets interface IPv6 address -| | ... | ${node} | ${interface} | 10::FF10 | ${64} -| | Then Honeycomb fails to add interface IPv6 address -| | ... | ${node} | ${interface} | 10::FF11 | ${64} -| | And Honeycomb fails to add interface IPv6 address -| | ... | ${node} | ${interface} | 10::FFFF | ${64} - -| TC13: Honeycomb can configure unnumbered interface +| TC11: Honeycomb can configure unnumbered interface | | [Documentation] | Check if Honeycomb can configure an unnumbered interface\ | | ... | on a physical interface, borrowing the IP address of 'local0'. | | ... @@ -266,7 +235,7 @@ | | ... | ${node} | ${interface} | ${ipv4_address} | | ... | ${ipv4_prefix} | ${ipv4_mask} -| TC14: Honeycomb removes interface unnumbered configuration +| TC12: Honeycomb removes interface unnumbered configuration | | [Documentation] | Check if Honeycomb can remove unnumbered configuration\ | | ... | from an interface. | | ... @@ -289,3 +258,36 @@ | | ... | ${ipv4_prefix} | ${ipv4_mask} | | And IPv4 address from Honeycomb should be empty | ${node} | ${interface} | | And ipv4 address from VAT should be empty | ${node} | ${interface} + +| TC13: Honeycomb fails to configure two IPv4 addresses from the same subnet +| | [Documentation] | Check if Honeycomb can configure two IPv4 addresses in\ +| | ... | the same subnet onto a single interface. It should not be possible. +| | ... +| | [Teardown] | Honeycomb removes interface IPv4 addresses | ${node} +| | ... | ${interface} +| | ... +| | [Tags] | EXPECTED_FAILING +| | ... +# VPP API does not configure the second address, but returns success. VPP-649 +| | When Honeycomb sets interface IPv4 address with prefix +| | ... | ${node} | ${interface} | 192.168.0.1 | ${9} +| | Then Honeycomb fails to add interface IPv4 address +| | ... | ${node} | ${interface} | 192.168.0.2 | ${9} +| | And Honeycomb fails to add interface IPv4 address +| | ... | ${node} | ${interface} | 192.232.0.2 | ${9} + +| TC14: Honeycomb fails to configure two IPv6 addresses from the same subnet +| | [Documentation] | Check if Honeycomb can configure two IPv6 addresses in\ +| | ... | the same subnet onto a single interface. It should not be possible. +| | ... +| | [Tags] | EXPECTED_FAILING +| | ... +# VPP API does not configure the second address, but returns success. VPP-649 +| | [Teardown] | Honeycomb removes interface IPv6 addresses | ${node} +| | ... | ${interface} +| | When Honeycomb sets interface IPv6 address +| | ... | ${node} | ${interface} | 10::FF10 | ${64} +| | Then Honeycomb fails to add interface IPv6 address +| | ... | ${node} | ${interface} | 10::FF11 | ${64} +| | And Honeycomb fails to add interface IPv6 address +| | ... | ${node} | ${interface} | 10::FFFF | ${64} diff --git a/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot index 74d99a9684..f35384c473 100644 --- a/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot @@ -29,8 +29,9 @@ | ... | Force Tags | HC_FUNC | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb TAP management test suite.* diff --git a/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot index 64136bcfd6..4a2a763523 100644 --- a/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot @@ -29,8 +29,9 @@ | ... | Force Tags | HC_FUNC | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb vhost-user interface management test suite.* diff --git a/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot index e6287e79ae..6955167cb4 100644 --- a/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot @@ -29,10 +29,9 @@ | Resource | resources/libraries/robot/honeycomb/interfaces.robot | Resource | resources/libraries/robot/honeycomb/bridge_domain.robot | ... -| Suite Teardown | Run keywords -| ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} -| ... | AND | Honeycomb removes all bridge domains | ${node} | @{interfaces} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC | ... diff --git a/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot index 184f361947..2073b9b24b 100644 --- a/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot @@ -22,14 +22,9 @@ | ... | Documentation | *Honeycomb L2 FIB management test suite.* | ... -| Suite Setup | Run keywords | Set test interface down +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} | ... -| Suite Teardown | Run keywords -| ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} -| ... | AND -| ... | Honeycomb removes all bridge domains -| ... | ${node} | ${interface} | ${interface2} +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force tags | HC_FUNC diff --git a/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot index 42f5a84b8f..83634bf79b 100644 --- a/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot @@ -30,8 +30,9 @@ | ... | Documentation | *Honeycomb Lisp test suite.* | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC diff --git a/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot index 03ccc320fc..9270b98156 100644 --- a/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot @@ -24,10 +24,15 @@ | ... | Documentation | *Honeycomb NSH test suite.* | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} -# disabled pending NSH version 17.04 -#| Force Tags | honeycomb_sanity | honeycomb_odl +| Suite Setup | Run Keywords +| ... | Enable Honeycomb Feature | ${node} | NSH | AND +| ... | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Run Keywords +| ... | Tear Down Honeycomb Functional Test Suite | ${node} | AND +| ... | Disable Honeycomb Feature | ${node} | NSH +| ... +| Force Tags | honeycomb_sanity | honeycomb_odl *** Test Cases *** | TC01: Honeycomb can configure NSH entry diff --git a/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot index a04932556a..fb9e49e059 100644 --- a/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot @@ -22,8 +22,9 @@ | ... | Documentation | *Honeycomb provider backbone bridge test suite.* | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC diff --git a/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot index a365f54348..d9a3933578 100644 --- a/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot @@ -45,11 +45,14 @@ | ... | Test Setup | Clear Packet Trace on All DUTs | ${nodes} | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb access control lists test suite for ACL plugin.* | ... -| Force Tags | HC_FUNC +# Failing due to HC2VPP-173: cannot clean up ACLs in test teardown +| Force Tags | HC_FUNC | EXPECTED_FAILING *** Test Cases *** | TC01: ACL MAC filtering through plugin-acl node - bridged @@ -71,17 +74,20 @@ | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_macip} | | ... | ingress | macip=${True} -| | Then Send TCP or UDP packet and verify received packet | ${tg_node} | ${src_ip} | ${dst_ip} +| | Then Send TCP or UDP packet and verify received packet | ${tg_node} +| | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | TCP | ${src_port} | ${dst_port} | | And Run Keyword And Expect Error | TCP/UDP Rx timeout -| | ... | Send TCP or UDP packet and verify received packet | ${tg_node} | ${src_ip} | ${dst_ip} +| | ... | Send TCP or UDP packet and verify received packet | ${tg_node} +| | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${classify_src} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | TCP | ${src_port} | ${dst_port} | | And Run Keyword And Expect Error | TCP/UDP Rx timeout -| | ... | Send TCP or UDP packet and verify received packet | ${tg_node} | ${src_ip} | ${dst_ip} +| | ... | Send TCP or UDP packet and verify received packet | ${tg_node} +| | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${classify_src2} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | TCP | ${src_port} | ${dst_port} @@ -214,7 +220,8 @@ | | ... | ${dut_node} | ${acl_name_mixed} | ${acl_settings} | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_mixed} | ingress -| | Then Send TCP or UDP packet and verify received packet | ${tg_node} | ${src_ip} | ${dst_ip} +| | Then Send TCP or UDP packet and verify received packet | ${tg_node} +| | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | TCP | ${src_port} | ${dst_port} @@ -248,18 +255,21 @@ | | ... | ${dut_node} | ${acl_name_icmp} | ${acl_settings} | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_icmp} | ingress -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${icmp_type} | ${icmp_code} -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${classify_type} | ${icmp_code} | | And Run Keyword And Expect Error | ICMP echo Rx timeout -| | ... | Send ICMP packet with type and code and verify received packet | ${tg_node} +| | ... | Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} @@ -283,18 +293,21 @@ | | ... | ${dut_node} | ${acl_name_icmpv6} | ${acl_settings} | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_icmpv6} | ingress -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${icmp_type} | ${icmp_code} -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${classify_type} | ${icmp_code} | | And Run Keyword And Expect Error | ICMP echo Rx timeout -| | ... | Send ICMP packet with type and code and verify received packet | ${tg_node} +| | ... | Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} @@ -399,8 +412,10 @@ | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']} | | And Import Variables | resources/test_data/honeycomb/plugin_acl.py | | ... | L3_IP6 | ${acl_name_l3_ip6} -| | And Honeycomb configures interface state | ${dut_node} | ${dut_to_tg_if1} | up -| | And Honeycomb configures interface state | ${dut_node} | ${dut_to_tg_if2} | up +| | And Honeycomb configures interface state +| | ... | ${dut_node} | ${dut_to_tg_if1} | up +| | And Honeycomb configures interface state +| | ... | ${dut_node} | ${dut_to_tg_if2} | up | | And Honeycomb sets interface IPv6 address | ${dut_node} | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length} | | And Honeycomb sets interface IPv6 address | ${dut_node} @@ -489,7 +504,8 @@ | | ... | ${dut_node} | ${acl_name_mixed} | ${acl_settings} | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_mixed} | ingress -| | Then Send TCP or UDP packet and verify received packet | ${tg_node} | ${src_ip} | ${dst_ip} +| | Then Send TCP or UDP packet and verify received packet | ${tg_node} +| | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | TCP | ${src_port} | ${dst_port} @@ -524,18 +540,21 @@ | | ... | ${dut_node} | ${acl_name_icmp} | ${acl_settings} | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_icmp} | ingress -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${icmp_type} | ${icmp_code} -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${classify_type} | ${icmp_code} | | And Run Keyword And Expect Error | ICMP echo Rx timeout -| | ... | Send ICMP packet with type and code and verify received packet | ${tg_node} +| | ... | Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} @@ -558,8 +577,10 @@ | | ... | ${nodes['TG']} | ${nodes['DUT1']} | ${nodes['TG']} | | And Import Variables | resources/test_data/honeycomb/plugin_acl.py | | ... | icmpv6 | ${acl_name_icmpv6} -| | And Honeycomb configures interface state | ${dut_node} | ${dut_to_tg_if1} | up -| | And Honeycomb configures interface state | ${dut_node} | ${dut_to_tg_if2} | up +| | And Honeycomb configures interface state +| | ... | ${dut_node} | ${dut_to_tg_if1} | up +| | And Honeycomb configures interface state +| | ... | ${dut_node} | ${dut_to_tg_if2} | up | | And Honeycomb sets interface IPv6 address | ${dut_node} | | ... | ${dut_to_tg_if1} | ${dut_to_tg_if1_ip} | ${prefix_length} | | And Honeycomb sets interface IPv6 address | ${dut_node} @@ -575,18 +596,21 @@ | | ... | ${dut_node} | ${acl_name_icmpv6} | ${acl_settings} | | And Honeycomb Assigns plugin-acl Chain To Interface | | ... | ${dut_node} | ${dut_to_tg_if1} | ${acl_name_icmpv6} | ingress -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${icmp_type} | ${icmp_code} -| | Then Send ICMP packet with type and code and verify received packet | ${tg_node} +| | Then Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} | | ... | ${classify_type} | ${icmp_code} | | And Run Keyword And Expect Error | ICMP echo Rx timeout -| | ... | Send ICMP packet with type and code and verify received packet | ${tg_node} +| | ... | Send ICMP packet with type and code and verify received packet +| | ... | ${tg_node} | | ... | ${src_ip} | ${dst_ip} | | ... | ${tg_to_dut_if1} | ${tg_to_dut_if1_mac} | | ... | ${tg_to_dut_if2} | ${dut_to_tg_if1_mac} diff --git a/tests/func/honeycomb/mgmt-cfg-policer-apihc-func.robot b/tests/func/honeycomb/mgmt-cfg-policer-apihc-func.robot index 1fe4847f23..7afffad4d8 100644 --- a/tests/func/honeycomb/mgmt-cfg-policer-apihc-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-policer-apihc-func.robot @@ -30,9 +30,9 @@ | Library | resources.libraries.python.Trace | Variables | resources/test_data/honeycomb/policer_variables.py | ... -| Suite Teardown -| ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC | ... @@ -101,6 +101,8 @@ | | ... | ${node} | ${interface} | ${acl_tables['hc_acl_table']['name']} | TC06: VPP policer 2R3C Color-aware marks packet +# Pending rework +| | [Tags] | EXPECTED_FAILING | | [Documentation] | | ... | [Top] TG=DUT1. | | ... | [Ref] RFC2474, RFC2698. @@ -135,7 +137,7 @@ | | And Honeycomb adds interface IPv4 neighbor | | ... | ${dut_node} | ${dut_to_tg_if2} | ${tg_to_dut_if2_ip} | | ... | ${tg_to_dut_if2_mac} -| | And interfaceCLI.VPP Node Interfaces Ready Wait | ${dut_node} +| | And VPP Node Interfaces Ready Wait | ${dut_node} | | Then Honeycomb Send packet and verify marking | ${tg_node} | | ... | ${tg_to_dut_if1} | | ... | ${tg_to_dut_if2} | ${tg_to_dut_if1_mac} | ${dut_to_tg_if1_mac} diff --git a/tests/func/honeycomb/mgmt-cfg-proxyarp-apihc-func.robot b/tests/func/honeycomb/mgmt-cfg-proxyarp-apihc-func.robot index 26f73b054c..5e162a3e4e 100644 --- a/tests/func/honeycomb/mgmt-cfg-proxyarp-apihc-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-proxyarp-apihc-func.robot @@ -31,9 +31,9 @@ | Resource | resources/libraries/robot/traffic.robot | Library | resources.libraries.python.Trace | ... -| Suite Teardown -| ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb And VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC | ... diff --git a/tests/func/honeycomb/mgmt-cfg-proxynd6-apihc-func.robot b/tests/func/honeycomb/mgmt-cfg-proxynd6-apihc-func.robot index 6c718e705a..6b69f5b170 100644 --- a/tests/func/honeycomb/mgmt-cfg-proxynd6-apihc-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-proxynd6-apihc-func.robot @@ -35,9 +35,9 @@ | Resource | resources/libraries/robot/dhcp_proxy.robot | Library | resources.libraries.python.Trace | ... -| Test Setup | Clear Packet Trace on All DUTs | ${nodes} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} | ... -| Suite Teardown | Restart Honeycomb And VPP | ${node} +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC | ... diff --git a/tests/func/honeycomb/mgmt-cfg-routing-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-routing-apihc-apivat-func.robot index be151c347a..acf203b796 100644 --- a/tests/func/honeycomb/mgmt-cfg-routing-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-routing-apihc-apivat-func.robot @@ -24,7 +24,9 @@ | ... | Test Setup | Clear Packet Trace on All DUTs | ${nodes} | ... -| Suite Teardown | Restart Honeycomb And VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Test Teardown | Honeycomb routing test teardown | ${node} | ${table} | ... diff --git a/tests/func/honeycomb/mgmt-cfg-slaac-apihc-func.robot b/tests/func/honeycomb/mgmt-cfg-slaac-apihc-func.robot index c5533c27d0..b621e17cb1 100644 --- a/tests/func/honeycomb/mgmt-cfg-slaac-apihc-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-slaac-apihc-func.robot @@ -23,9 +23,9 @@ | Resource | resources/libraries/robot/testing_path.robot | Resource | resources/libraries/robot/traffic.robot | ... -| Suite Teardown -| ... | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC | ... @@ -39,7 +39,7 @@ | | ... | | Given SLAAC Operational Data From Honeycomb Should Be empty | ${node} | | ... | ${interface} -| | And InterfaceAPI.Set Interface State | ${node} | ${interface} | up +| | And Honeycomb Configures Interface State | ${node} | ${interface} | up | | And Honeycomb sets interface IPv6 address | ${node} | ${interface} | | ... | ${address} | ${prefix} | | When Honeycomb configures SLAAC | ${node} | ${interface} | ${slaac_data} @@ -62,7 +62,7 @@ | | ... | | Given SLAAC Operational Data From Honeycomb Should Be empty | ${node} | | ... | ${interface} -| | And InterfaceAPI.Set Interface State | ${node} | ${interface} | up +| | And Honeycomb Configures Interface State | ${node} | ${interface} | up | | And Honeycomb sets interface IPv6 address | ${node} | ${interface} | | ... | ${address} | ${prefix} | | When Honeycomb configures SLAAC | ${node} | ${interface} | ${slaac_data} @@ -77,7 +77,7 @@ | | ... | | Given SLAAC Operational Data From Honeycomb Should Be empty | ${node} | | ... | ${interface} -| | And InterfaceAPI.Set Interface State | ${node} | ${interface} | up +| | And Honeycomb Configures Interface State | ${node} | ${interface} | up | | And Honeycomb sets interface IPv6 address | ${node} | ${interface} | | ... | ${address} | ${prefix} | | When Honeycomb configures SLAAC | ${node} | ${interface} | ${slaac_data_01} @@ -92,7 +92,7 @@ | | ... | | Given SLAAC Operational Data From Honeycomb Should Be empty | ${node} | | ... | ${interface} -| | And InterfaceAPI.Set Interface State | ${node} | ${interface} | up +| | And Honeycomb Configures Interface State | ${node} | ${interface} | up | | And Honeycomb sets interface IPv6 address | ${node} | ${interface} | | ... | ${address} | ${prefix} | | When Honeycomb configures SLAAC | ${node} | ${interface} | ${slaac_data_02} @@ -107,7 +107,7 @@ | | ... | | Given SLAAC Operational Data From Honeycomb Should Be empty | ${node} | | ... | ${interface} -| | And InterfaceAPI.Set Interface State | ${node} | ${interface} | up +| | And Honeycomb Configures Interface State | ${node} | ${interface} | up | | And Honeycomb sets interface IPv6 address | ${node} | ${interface} | | ... | ${address} | ${prefix} | | When Honeycomb configures SLAAC | ${node} | ${interface} | ${slaac_data_03} @@ -115,6 +115,8 @@ | | ... | ${interface} | ${slaac_data_03} | TC07: DUT retransmits RA on IPv6 enabled interface after a set interval +# Traffic test failing in VIRL +| | [Tags] | EXPECTED_FAILING | | [Documentation] | | ... | [Top] TG-DUT1-DUT2-TG. | | ... | [Cfg] On DUT1 configure IPv6 interface on the link to TG. diff --git a/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot index 3c6be394c3..c281d95819 100644 --- a/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot @@ -22,8 +22,9 @@ | ... | Documentation | *Honeycomb NAT test suite.* | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Force Tags | HC_FUNC diff --git a/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot index e7fe2eb94e..a24d355382 100644 --- a/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot @@ -27,9 +27,11 @@ | ... | Force Tags | HC_FUNC | ... -| Suite Setup | Add Interface local0 To Topology | ${node} +| Suite Setup | Run Keywords +| ... | Set Up Honeycomb Functional Test Suite | ${node} | AND +| ... | Add Interface local0 To Topology | ${node} | ... -| Suite Teardown | Restart Honeycomb and VPP | ${node} +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb port mirroring test suite.* @@ -101,6 +103,8 @@ | | ... | ${node} | ${interface2} | ${settings_if2} | TC07: DUT mirrors IPv4 packets from one interface to another +# Pending rework +| | [Tags] | EXPECTED_FAILING | | [Documentation] | | ... | [Top] TG=DUT1 | | ... | [Cfg] (using Honeycomb) On DUT1 configure IPv4 address and set SPAN\ @@ -130,7 +134,7 @@ | | ... | ${tg_to_dut_if1_ip} | ${tg_to_dut_if1_mac} | | ${settings_5}= | create dictionary | state=both | | ... | iface-ref=${dut_to_tg_if1} -| | And InterfaceCLI.All Vpp Interfaces Ready Wait | ${nodes} +| | And All Vpp Interfaces Ready Wait | ${nodes} | | When Honeycomb configures SPAN on interface | | ... | ${node} | ${dut_to_tg_if2} | ${settings_5} | | Then Send Packet And Check Received Copies | ${tg_node} @@ -216,7 +220,9 @@ | | Then Sub-Interface SPAN Operational Data from Honeycomb should be | | ... | ${node} | ${interface2} | ${1} | ${settings_if2} -| TC14: DUT mirrors IPv4 packets from one interface to another +| TC14: DUT mirrors IPv4 packets from an interface to a sub-interface +# Pending rework +| | [Tags] | EXPECTED_FAILING | | [Documentation] | | ... | [Top] TG=DUT1 | | ... | [Cfg] (using Honeycomb) On DUT1 configure IPv4 address and set SPAN\ @@ -245,7 +251,7 @@ | | ... | ${tg_to_dut_if2_ip} | ${tg_to_dut_if2_mac} | | ${settings_5}= | create dictionary | state=both | | ... | iface-ref=${dut_to_tg_if2} -| | And InterfaceCLI.All Vpp Interfaces Ready Wait | ${nodes} +| | And All Vpp Interfaces Ready Wait | ${nodes} | | When Honeycomb Configures SPAN on sub-interface | | ... | ${node} | ${dut_to_tg_if1} | ${1} | ${settings_5} | | Then Send Packet And Check Received Copies | ${tg_node} diff --git a/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot index 7d0f5af665..74c18109d1 100644 --- a/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot @@ -35,8 +35,9 @@ | ... | Force Tags | HC_FUNC | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... | Documentation | *Honeycomb VxLAN management test suite.* diff --git a/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot b/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot index 8dd884af71..9f1cd86548 100644 --- a/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot +++ b/tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot @@ -41,9 +41,12 @@ | ... | Documentation | *Honeycomb VxLAN-GPE management test suite.* | ... -#| Force Tags | HC_FUNC +| Suite Setup | Set Up Honeycomb Functional Test Suite | ${node} +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... -| Suite Setup | Restart Honeycomb and VPP | ${node} +# Disabled due to VPP-875: Configuring VxLAN GPE tunnel crashes VPP +#| Force Tags | HC_FUNC *** Test Cases *** | TC01: Honeycomb creates VxLAN GPE tunnel diff --git a/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot b/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot index 2f834ac4b6..b943d78ad7 100644 --- a/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot +++ b/tests/func/honeycomb/mgmt-notif-apihcnc-func.robot @@ -25,18 +25,13 @@ | Resource | resources/libraries/robot/honeycomb/tap.robot | Resource | resources/libraries/robot/honeycomb/notifications.robot | ... -| Suite Setup | Run keywords -| ... | Honeycomb configures interface state -| ... | ${node} | ${interface} | down | AND -| ... | Honeycomb creates TAP interface -| ... | ${node} | ${tap_interface} | ${tap_settings} -| ... | Documentation | *Honeycomb notifications test suite.* | ... -| Force Tags | HC_FUNC +| Suite Setup | Set Up Honeycomb Notifications Functional Test Suite +| ... +| Suite Teardown | Tear Down Honeycomb Functional Test Suite | ${node} | ... -| Suite Teardown | Run Keyword If Any Tests Failed -| ... | Restart Honeycomb and VPP | ${node} +| Force Tags | HC_FUNC *** Test Cases *** | TC01: Honeycomb sends notification on interface state change @@ -63,3 +58,11 @@ | | And Notification listener should be established | ${node} | | When Honeycomb removes TAP interface | ${node} | ${tap_interface} | | Then Honeycomb should send interface deleted notification | ${tap_interface} + +*** Keywords *** +| Set Up Honeycomb Notifications Functional Test Suite +| | Set Up Honeycomb Functional Test Suite | ${node} +| | Honeycomb configures interface state +| | ... | ${node} | ${interface} | down +| | Honeycomb creates TAP interface +| | ... | ${node} | ${tap_interface} | ${tap_settings} \ No newline at end of file diff --git a/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot b/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot index 90ed077533..4277c91a4e 100644 --- a/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot +++ b/tests/func/honeycomb/mgmt-statepersist-apihc-func.robot @@ -39,7 +39,8 @@ | | [Documentation] | Checks if Honeycomb maintains configuration after both\ | | ... | Restart Honeycomb and VPP. | | ... -| | [Tags] | HC_FUNC +# Failing due to HC2VPP-47 +| | [Tags] | HC_FUNC | EXPECTED_FAILING | | ... | | [Teardown] | | ... | Restart Honeycomb And VPP And Clear Persisted Configuration | ${node} -- 2.16.6