aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorselias <samelias@cisco.com>2017-06-21 18:52:10 +0200
committerTibor Frank <tifrank@cisco.com>2017-06-26 12:39:32 +0000
commitb7f0c133f672b39b49e0480f71dd0629986bcf72 (patch)
tree5a8504f5cb2c3b2bddbbf3a8289ea5ce120bc1f4
parent41bded220766aad6f805a9864ef677abe9ff9004 (diff)
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 <samelias@cisco.com>
-rw-r--r--resources/libraries/python/honeycomb/HcAPIKwInterfaces.py15
-rw-r--r--resources/libraries/python/honeycomb/HoneycombSetup.py196
-rw-r--r--resources/libraries/robot/honeycomb/access_control_lists.robot9
-rw-r--r--resources/libraries/robot/honeycomb/bridge_domain.robot18
-rw-r--r--resources/libraries/robot/honeycomb/honeycomb.robot134
-rw-r--r--resources/libraries/robot/honeycomb/interfaces.robot74
-rw-r--r--resources/libraries/robot/honeycomb/l2_fib.robot5
-rw-r--r--resources/libraries/robot/honeycomb/nsh.robot1
-rw-r--r--resources/libraries/robot/honeycomb/persistence.robot7
-rw-r--r--resources/libraries/robot/honeycomb/policer.robot1
-rw-r--r--resources/libraries/robot/honeycomb/port_mirroring.robot17
-rw-r--r--resources/libraries/robot/honeycomb/provider_backbone_bridge.robot9
-rw-r--r--resources/libraries/robot/honeycomb/slaac.robot2
-rw-r--r--resources/libraries/robot/honeycomb/sub_interface.robot62
-rw-r--r--resources/libraries/robot/honeycomb/tap.robot12
-rw-r--r--resources/libraries/robot/honeycomb/vhost_user.robot16
-rw-r--r--resources/libraries/robot/honeycomb/vxlan.robot14
-rw-r--r--resources/libraries/robot/honeycomb/vxlan_gpe.robot14
-rw-r--r--tests/func/honeycomb/__init__.robot26
-rw-r--r--tests/func/honeycomb/mgmt-cfg-acl-apihc-apivat-func.robot4
-rw-r--r--tests/func/honeycomb/mgmt-cfg-dhcp-apihc-apivat-func.robot4
-rw-r--r--tests/func/honeycomb/mgmt-cfg-int-apihcnc-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-int-subint-apihc-apivat-func.robot6
-rw-r--r--tests/func/honeycomb/mgmt-cfg-intip4-intip6-apihc-apivat-func.robot74
-rw-r--r--tests/func/honeycomb/mgmt-cfg-inttap-apihc-apivat-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-intvhost-apihc-apivat-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-l2bd-apihc-apivat-func.robot7
-rw-r--r--tests/func/honeycomb/mgmt-cfg-l2fib-apihc-apivat-func.robot9
-rw-r--r--tests/func/honeycomb/mgmt-cfg-lisp-apihc-apivat-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-nsh-apihc-apivat-func.robot13
-rw-r--r--tests/func/honeycomb/mgmt-cfg-pbb-apihc-apivat-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-pluginacl-apihc-apivat-func.robot70
-rw-r--r--tests/func/honeycomb/mgmt-cfg-policer-apihc-func.robot10
-rw-r--r--tests/func/honeycomb/mgmt-cfg-proxyarp-apihc-func.robot6
-rw-r--r--tests/func/honeycomb/mgmt-cfg-proxynd6-apihc-func.robot4
-rw-r--r--tests/func/honeycomb/mgmt-cfg-routing-apihc-apivat-func.robot4
-rw-r--r--tests/func/honeycomb/mgmt-cfg-slaac-apihc-func.robot18
-rw-r--r--tests/func/honeycomb/mgmt-cfg-snat44-apihc-apivat-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-spanrx-apihc-apivat-func.robot16
-rw-r--r--tests/func/honeycomb/mgmt-cfg-vxlan-apihc-apivat-func.robot5
-rw-r--r--tests/func/honeycomb/mgmt-cfg-vxlangpe-apihc-apivat-func.robot7
-rw-r--r--tests/func/honeycomb/mgmt-notif-apihcnc-func.robot21
-rw-r--r--tests/func/honeycomb/mgmt-statepersist-apihc-func.robot3
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"
@@ -107,41 +107,6 @@ class HoneycombSetup(object):
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']))
@@ -477,6 +460,31 @@ class HoneycombSetup(object):
"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}